rub444n
Goto Top

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 face-smile

Viele grüße

rub444n

Content-Key: 226141

Url: https://administrator.de/contentid/226141

Printed on: April 16, 2024 at 23:04 o'clock

Member: colinardo
colinardo Jan 08, 2014, updated at Jan 09, 2014 at 08:43:49 (UTC)
Goto Top
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:
Überschrift2
b
c
a
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
$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)
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
Member: rub444n
rub444n Jan 09, 2014 at 07:23:25 (UTC)
Goto Top
Hallo Uwe,

du hast mein Problem erfasst.
Das "a" steht nämlich immer an einer anderen Position unter der Überschrift. Ist es überhaupt möglich eine solch spezielle Abfrage zu machen ?
Das einzige was die Überschrift eventuell absetzt ist dass sie immer mit "rt" anfängt und dahinter immer eine andere Zahl steht.
Also zum Beispiel rt-02 oder rt-05 usw.

Grüße

rub444n
Member: colinardo
colinardo Jan 09, 2014 updated at 10:40:16 (UTC)
Goto Top
wenn das so ist tausche Zeile 3 durch diese aus:
$arr = StringRegExp($content,"(rt-\d+.*?)[\r\n]+a",3)
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
Member: rub444n
rub444n Jan 09, 2014 at 10:17:29 (UTC)
Goto Top
Hallo Uwe,

ich wollte es gerade testen jedoch wird die Messagebox nicht mal aufgerufen.
Woran liegt das ?

Gruß rub444n
Member: colinardo
colinardo Jan 09, 2014 updated at 10:39:56 (UTC)
Goto Top
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)
"(rt-\d+.*?)[\r\n]+Suchstring"
Achtung: hier sind Regex-Sonderzeichen zu beachten, wenn du Sonderzeichen wie Punkt / Backslash etc. verwenden willst !
Member: rub444n
rub444n Jan 09, 2014 updated at 10:34:06 (UTC)
Goto Top
hatte einen blöden Schreibfehler...

wenn folgendes in der Textdatei steht:
rt-1
a
b
c

rt-2
b
a

rt-3
c
b
x

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 ?
Member: colinardo
colinardo Jan 09, 2014 updated at 11:03:13 (UTC)
Goto Top
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 ?
Member: rub444n
rub444n Jan 09, 2014 at 10:56:01 (UTC)
Goto Top
ich glaube fürs bessere Verständnis erkläre ich mal genauer worum es geht:
die rt-02, rt-03 usw. sind Server
die Buchstaben darunter stehen für die Usernamen welche eingeloggt sind auf diesen Servern
Nun will ich anzeigen auf welchem Server ich persönlich (in diesem Beispiel bin ich jetzt einfach mal User "a") eingeloggt bin.
Da die Formatierung wohl eine Rolle spielt hier nun die Formatierung der Textdatei um die es letztendlich geht (die Anzahl der eingeloggten User und dadurch die Anzahl der Einträge kann jedoch leider variieren was mein größtes Problem bei der Lösung ist).
Vielleicht hilft dir das weiter denn ich stehe total auf dem Schlauch face-smile

rt-02
b
rt-03
a
rt-04
x
rt-05
rt-06
rt-07
y
a
rt-08
h
j
rt-09
t
j
q
rt-10
x
t
rt-11
k
u
rt-20
a
o

Gruß rub444n
Member: colinardo
colinardo Jan 09, 2014 updated at 11:52:57 (UTC)
Goto Top
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)