Hallo zusammen,
ich versuche mich schon seit zwei Tagen an einem AutoIT-Script um eine Textdatei zeilenweise einzulesen. Immer wenn ich denke ich habe es ist doch noch irgendwie ein Fehler drin.
Folgende Ausgangssituation:
Eine Textdatei ("Daten.txt" oder ".csv") ganz egal enthält mit Semikolon separierte Einträge:
WertA1;WertB1;WertC1;WertD1;WertE1; ... WertK1
WertA2;WertB2;WertC2;WertD2;WertE2; ... WertK2
...
Bedingungen:
- Nun möchte ich nach einem bestimmten Wert suchen und dafür die Datei zeilenweise einlesen.
- Wird der Wert (z.B.: WertK23) gefunden sollen alle Werte der Zeile entsprechend ausgegeben werden. (WertA23=... ; WertB23=...; ...WertK23=...)
- Wir der Wert nicht gefunden sollen das Script sich die nächste Zeile vornehmen bis EOF.
- Auch wenn der Wert gefunden wird, soll dennoch die Datei bis EOF durchsucht werden, da ggf. ein zweiter, dritter, ... Eintrag vorhanden ist. Ebenso soll dann die ganze Zeile ausgegeben werden.
Mein Lösungsansatz:
#include <File.au3>
; Basisdaten
$daten = "c:\Daten.csv"
$datensatzgroesse = _FileCountLines($Daten)
; Anzeige der Summe aller Datensätze
MsgBox (4096, "Inhalt", "Es befinden sich " & $datensatzgroesse & " Datensätze in der Verwaltung.")
; Abfrage, was getan werden soll
$suchsoll = InputBox ("Datensuche", _
"Bitte geben Sie die Daten ein," & @CRLF & _
"nach denen gesucht werden soll", "", "")
If @error = 1 Then
Call ("abbruch")
Else
Call ("suchen", $suchsoll)
EndIf
; Funktionen
Func suchen ($suchsoll)
$file = FileOpen ($daten, 0)
For $i = 1 To $datensatzgroesse
$zeile = FileReadLine($daten, $i)
$durchlauf = 0
Do
$durchlauf = $durchlauf + 1
If StringInStr ($zeile, $suchsoll) Then
$datensatz = StringSplit ($zeile,';')
MsgBox (4096, "Datenfund " & $suchsoll, _
"Wert1: " & @TAB & $datensatz[1] & @CRLF & _
"Wert2: " & @TAB & $datensatz[2] & @CRLF & _
"Wert3: " & @TAB & $datensatz[3] & @CRLF & _
"Wert4: " & @TAB & $datensatz[4] & @CRLF & _
"Wert5: " & @TAB & $datensatz[5] & @CRLF & _
"Wert6: " & @TAB & $datensatz[6] & @CRLF & _
"Wert7: " & @TAB & $datensatz[7] & @CRLF & _
"Wert8: " & @TAB & $datensatz[8] & @CRLF & _
"Wert9: " & @TAB & $datensatz[9] & @CRLF & _
"Wert10: " & @TAB & $datensatz[10] & @CRLF & _
"Wert11: " & @TAB & $datensatz[11])
ExitLoop 1
Else
MsgBox (48, "Meldung", "Der gesuchte Datensatzinhalt " & $suchsoll & " wurde nicht gefunden!")
ExitLoop 2
EndIf
Until $durchlauf > $datensatzgroesse
Next
$file = FileClose ($daten)
EndFunc
Func abbruch ()
MsgBox (16, "Abbruch", "Sie haben Abbrechen/ Cancel gedrückt." & @crlf & _
"Auf wiedersehen.")
EndFunc
Weitere Planung:
- Über eine anfängliche GUI die Option besitzen suchen, ändern, löschen, anlegen von Daten in diese Datei
- Werte der einzelne Zeile exportieren und entsprechend neues Textfile schreiben
Vielleicht hilft euch dies den Hintergrund etwas zu verstehen.
Ich möchte um Gottes Willen von euch kein komplettes Script haben, das will ich schon selbst hinbekommen. Nur wie bereits erwähnt tippel ich schon seit ca. 2 Tagen auf der Stelle, weil ich irgendwie nicht den Durchlauf hinbekomme.
Ich erhoffe mir von euch den entscheidenden Hinweis/ Denkanstoss sodass ich wieder weitermachen kann.
Bei Fragen stehe ich euch zur Verfügung.