AutoIt - Textdatei auslesen
Hallo zusammen,
ich habe folgendes Problem und würde mich freuen wenn ihr mir helfen könnt.
ich will über AutoIT von einer Textdatei bestimmte Informationen auslesen:
Hier mal ein Beispiel für den Inhalt:
Überschrift1
a
b
c
Überschrift2
b
c
a
Überschrift3
c
b
x
Nun möchte ich jede Überschrift auslesen unter welcher der Buchstabe "a" steht und in z.B. eine Variable speichern.
Ich weiß zwar wie man eine Textdatei ausliest mit "fileopen" und "FileReadLine" aber wie man das nach diesen Kriterien machen könnte darauf komme ich einfach nicht.
Vielleicht könnt ihr mir ja weiter helfen es würde mich sehr freuen
Viele grüße
rub444n
ich habe folgendes Problem und würde mich freuen wenn ihr mir helfen könnt.
ich will über AutoIT von einer Textdatei bestimmte Informationen auslesen:
Hier mal ein Beispiel für den Inhalt:
Überschrift1
a
b
c
Überschrift2
b
c
a
Überschrift3
c
b
x
Nun möchte ich jede Überschrift auslesen unter welcher der Buchstabe "a" steht und in z.B. eine Variable speichern.
Ich weiß zwar wie man eine Textdatei ausliest mit "fileopen" und "FileReadLine" aber wie man das nach diesen Kriterien machen könnte darauf komme ich einfach nicht.
Vielleicht könnt ihr mir ja weiter helfen es würde mich sehr freuen
Viele grüße
rub444n
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 226141
Url: https://administrator.de/forum/autoit-textdatei-auslesen-226141.html
Ausgedruckt am: 03.05.2025 um 05:05 Uhr
9 Kommentare
Neuester Kommentar
Hallo rub444n, Willkommen im Forum!
du müsstest schon noch etwas genauer spezifizieren was eine Überschrift bei dir ist bzw. wie diese von den anderen abgegrenzt ist denn das a steht in deinen Zeilen ja auch woanders:
d.h. hier:
würde dann c in der Variablen landen.
Für solche Aufgaben sind Regular Expressions das Mittel der Wahl:
Folgendes matcht alles in der Zeile über der ein a am Anfang steht
da aber wie gesagt hier auch das c gematcht wird sind weitere Spezifizierungen deinerseits nötig, oder war das jetzt nur ein Beispiel und a kommt kein weiteres mal vor ?
Grüße Uwe
du müsstest schon noch etwas genauer spezifizieren was eine Überschrift bei dir ist bzw. wie diese von den anderen abgegrenzt ist denn das a steht in deinen Zeilen ja auch woanders:
d.h. hier:
Überschrift2
b
c
a
Für solche Aufgaben sind Regular Expressions das Mittel der Wahl:
Folgendes matcht alles in der Zeile über der ein a am Anfang steht
$f = FileOpen("C:\test.txt")
$content = FileRead($f)
$arr = StringRegExp($content,"(.*?)[\r\n]a",3)
for $i = 0 to UBound($arr) -1
msgbox(0,"",$arr[$i])
Next
FileClose($f)
Grüße Uwe
wenn das so ist tausche Zeile 3 durch diese aus:
Das a am Ende des Patterns musst du natürlich an deine Gegebenheiten anpassen.
Les dir auch mal das Regular Expressions Tutorial durch.
Grüße Uwe
$arr = StringRegExp($content,"(rt-\d+.*?)[\r\n]+a",3)
Les dir auch mal das Regular Expressions Tutorial durch.
Grüße Uwe
Zitat von @rub444n:
ich wollte es gerade testen jedoch wird die Messagebox nicht mal aufgerufen.
Woran liegt das ?
dann stimmt dein Pattern(wie oben geschrieben) noch nicht, bzw. ist nicht an deinen tatsächlichen Text angepasst (das a am Ende des Pattern an deinen wirklichen Suchtext anpassen)ich wollte es gerade testen jedoch wird die Messagebox nicht mal aufgerufen.
Woran liegt das ?
"(rt-\d+.*?)[\r\n]+Suchstring"
Zitat von @rub444n:
dann erscheint in der MessageBox : "rt-1".
"rt-2" soll jedoch auch noch erscheinen da dort ja auch noch ein a steht. Ist das möglich ?
immer in der zweiten Zeile nach der Überschrift ? oder auch in der dritten 4,5 usw. ? Ist die leere Zeile vor einer Überschrift immer vorhanden ?dann erscheint in der MessageBox : "rt-1".
"rt-2" soll jedoch auch noch erscheinen da dort ja auch noch ein a steht. Ist das möglich ?
Denke für dich ist es einfacher wenn wir hier nach der klassischen Methode arbeiten:
$f = FileOpen("C:\temp\test.txt")
Global $username = "a"
Global $server = ""
Global $arrLoggedOn[1]
$counter = 0
While 1
Local $line = FileReadLine($f)
If @error = -1 Then ExitLoop
if Stringleft($line,3) = "rt-" then
$server = $line
Else
if $line = $username then
Redim $arrLoggedOn[$counter+1]
$arrLoggedOn[$counter] = $server
$counter = $counter + 1
Endif
EndIf
WEnd
for $i = 0 to UBound($arrLoggedOn) -1
msgbox(0,"",$arrLoggedOn[$i])
Next
FileClose($f)