| |  | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: Variablen in ASCII-Datei suchen (1409 mal gelesen)
|
Raggus1 Mitglied NC-Programmierer
 
 Beiträge: 182 Registriert: 28.03.2003 V4 4.22, V5R16 - V5R19SP6 32+64Bit XP, Unix
|
erstellt am: 14. Sep. 2008 15:01 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, kurz beschrieben ....ich habe da ein Problem, bei dem ich Hilfe gebrauchen könnte. Ich möchte eine ASCII-Datei öffnen und dann zeilenweise (weis nicht, ob es richtig ist) nach Variablen durchsuchen. Genauer. Ich möchte prüfen, ob Variable 1 oder Variable 2 in einer Zeile steht (wenn, steht sie auch immer nur alleine in einer Zeile). Falls Variable 1 oder 2 gefunden wurde, muss nachfolgend in einer der nächsten Zeilen irgendwann Variable 3 stehen. Falls nur wieder Variable 1 oder 2 gefunden wird, sollte ein Meldung kommen, dass die zuerst gefundene Variable nicht "beendet" wird. Also quasi so: An oder On wird gesucht. Aus muss einem gefundenen An/On folgen, sonst eine Meldung An/On aus Zeile n hat kein Aus. Ich hoffe, ich finde hier bisschen hilfe. Momentan habe ich eine Lösung über IF Then als Schleife. Leider habe ich es noch nicht ganz so, wie ich es mir vorstelle. Momentan kann ich nur zwei Variablen (An/Aus) verarbeiten.... vg Raggus Ach so ...dass ganze programmiere ich in VB6.0. [Diese Nachricht wurde von Raggus1 am 14. Sep. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Ehrenmitglied Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2010, Rasterdesign MapGuide 6.5 - 2010 Oracle 9i,10g Enterprise autodesk Topobase 2-2010 VS6, VS.net 2010
|
erstellt am: 14. Sep. 2008 17:28 <-- editieren / zitieren --> Unities abgeben:          Nur für Raggus1
Hallo, vielleicht so was in der Art ?
Code:
value=true header1=false: header2=false While not eof(1) line input #1, Zeile Select case Zeile case Variable1 ' AN if Header1= true then msgbox "Wert war schon an" end if Header1=true case Variable2 ' AN if Header2= true then msgbox "Wert war schon an" end if Header2=true case Variable3 ' AUS if Header1 = true or Header2 = true then Value=true else msgbox "Aus ohne AN, blabla" end if header1=false header2=false end select wend
Häng doch mal deinen Code an damit man versteht was du machst.Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Raggus1 Mitglied NC-Programmierer
 
 Beiträge: 182 Registriert: 28.03.2003
|
erstellt am: 15. Sep. 2008 09:26 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich hoffe, du kanns mit meinem ersten Versuch etwas anfangen.... Dim T$, i&, j&, z&, x&, Lst$() Open "c:\test.txt" For Input As #1 T = Input(LOF(1), #1) Close #1 Lst = Split(T, vbCrLf) For i = 0 To UBound(Lst) If Trim$(Lst(i)) = "AN" Then Exit For 'If Lst(i) = "an" Then Exit For Next i ' MsgBox "cutcom/left in Zeile" & (i + 1) & " gefunden" For j = i + 1 To UBound(Lst) ' MsgBox "Prüfen ab Zeile" & (j + 1) & " " If Lst(j) = "aus" Then ElseIf Lst(j) = "an" Then GoTo jump End If Next j jump: MsgBox "In Zeile " & (j + 1) & " das erste aufeinander folgender an" Danke für deine Code. Ich werde ihn später mal versuchen zu verstehen Gruß Raggus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Ehrenmitglied Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2010, Rasterdesign MapGuide 6.5 - 2010 Oracle 9i,10g Enterprise autodesk Topobase 2-2010 VS6, VS.net 2010
|
erstellt am: 15. Sep. 2008 11:28 <-- editieren / zitieren --> Unities abgeben:          Nur für Raggus1
Hallo, hier mal noch eine Variante
Code:
Open Datei for input as #1 isOn=false While not eof(1) ' Eine Zeile aus der Datei lesen line input #1, Zeile ' Leerstellen abschneiden und in Grossbuchstaben Variable = ucase(trim(Zeile)) ' Variable auswerten Select case Variable ' Wenn entweder AN oder ON steht case "AN","ON" ' War der Zustand schon AN wurde er nicht vorher ausgeschaltet if isOn = true then msgbox "Zustand war schon AN" end if ' Zustand merken isOn=true ' Wenn Ausgeschaltet case "AUS","OFF" ' Wenn der Zustand an war if isON = true then ' Alles OK Zustand wieder ausschalten isON=false else ' Zustand war nicht an msgbox "Zustand war schon AUS" end if end select wend close
Aber was willst du mit der Aktion bezwecken. Vielleicht kann man das viel einfacher machen.Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Raggus1 Mitglied NC-Programmierer
 
 Beiträge: 182 Registriert: 28.03.2003
|
erstellt am: 15. Sep. 2008 15:01 <-- editieren / zitieren --> Unities abgeben:         
Hallo Stelli1, super. Vielen Danke für deine Hilfe. Ich werde den Code mal in mein Projekt mit übernehmen (Falls du nichts dagegen hast?). Du hast mir sehr geholfen. Der Hintergrund ist, dass ich damit meine arbeit schneller überprüfen kann. Wenn ich Daten für Bearbeitungsmaschinen erstelle kann es mal vorkommen, dass irgendwelche Befehle doppelt aufgerufen werden was zu einem Fehler führen kann. Bislang habe ich die Daten bei Unsicherheit "händisch" gecheckt ....ab nun ist es ja vorbei Also vielen Dank noch einmal Gruß Raggus1 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Raggus1 Mitglied NC-Programmierer
 
 Beiträge: 182 Registriert: 28.03.2003 V4 4.22, V5R16 - V5R19SP6 32+64Bit XP, Unix
|
erstellt am: 15. Sep. 2008 21:17 <-- editieren / zitieren --> Unities abgeben:         
Hallo, wie es manchmal so ist, kommen einen immer wieder neue Ideen... Meine ist gerade.... Wie kann ich erkennen, wenn meine Variablen nicht alleine in einer Zeile stehen. Ich habe es so versucht: Case InStr("xx1", "xx2") Aber das klappt nicht so. Hast du da vielleicht noch einen letzten Tipp, Stelli1? Gruß Raggus [Diese Nachricht wurde von Raggus1 am 15. Sep. 2008 editiert.] [Diese Nachricht wurde von Raggus1 am 15. Sep. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Ehrenmitglied Verm.-Ing.
    
 Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2010, Rasterdesign MapGuide 6.5 - 2010 Oracle 9i,10g Enterprise autodesk Topobase 2-2010 VS6, VS.net 2010
|
erstellt am: 16. Sep. 2008 11:48 <-- editieren / zitieren --> Unities abgeben:          Nur für Raggus1
Hallo, sind die Variablen dann irgendwie getrennt mit Leerzeihen, Komma oder so was ? Du könnest dann die Variablen einer Zeile mit der Split Funktion in ein Array bringen. Die Obergrenze des Arrays ist die Anzahl der Variablen (die erste hat den Index 0).
Code: vars=split(Zeile," ") if ubound(vars) > 0 then msgbox "Es sind " & ubound(vars) & " Variablen in einer Zeile" end if
Wilfried Stelberg------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Raggus1 Mitglied NC-Programmierer
 
 Beiträge: 182 Registriert: 28.03.2003
|
erstellt am: 16. Sep. 2008 14:18 <-- editieren / zitieren --> Unities abgeben:         
Hallo Stelli1, ja, die verschiedenen Variablen sind zumindest durch Leerzeichen von anderen Strings getrennt. Ich werde mal sehen, wo ich deinen Code mit unterbringen kann. Momentan sehe ich das noch nicht so... Ich kenne die Splitfunktion nur als Trenner von Dateinamen zur Dateiendung. Wenn ich es richtig sehe, soll die eingelesene Zeile an jedem Leerzeichen getrennt werden oder? Jeder String der dann zwischen den "Trennung" liegt ist dann ein Array(var())? Oder ist jetzt alles quatsch was ich schreibe? Gruß Raggus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |