String in einer Chat.log Datei auslesen

  • Moin,
    habe mal wieder ein Problem mit Autoit.
    Ich möchte eine Txt auslesen und nach einem bestimmten Wort durchsuchen lassen.
    Das klappt auch soweit, aber sobald das gesuchte sich irgentwo zwischendrin, anstatt am Anfang, befindet wird nichts gefunden - 0 ausgegeben
    Anfangs hatte ich filereadline() probiert, durch sufu bin ich auf StringRegExp gestoßen, allerdings bin ich nach mehrmaligen rumprobieren immernoch nicht zum gewünschten Ergebnis gekommen.

    Würd sich jemanden erbarmen mir kurz die Lösung zu sagen? Denke das es einfach ist, nur mach ich etwas falsch.
    Geht hier um eine Chat.log datei die ausgelesen und auf bestimmte Einträge überprüft werden soll.

    [autoit]


    $file = FileOpen('chat.log', 0)

    [/autoit][autoit][/autoit][autoit]

    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    $chars = FileRead($file)
    $Ergebnis = StringRegExp($chars,'world',0)
    msgbox(0,"test",$Ergebnis)

    [/autoit][autoit][/autoit][autoit]

    FileClose($file)

    [/autoit]

    greez Vamp

    Einmal editiert, zuletzt von Vamp (18. Dezember 2010 um 18:34)

  • funktioniert problemlos ! Danke

    Möchte jetzt allerdings in derselben Zeile,wo der erste Treffer ist, eine zweite Suche nach einem anderem Stichwort durchführen.
    Zweite Suche funktioniert aber es wird natürlich das ganze Log danach durchsucht.

    Gibt es eine Möglichkeit die Zeile vom ersten Treffer zu speichern und auf einen zweiten Stichworttreffer abzusuchen?

  • Naja... So könntest du die Zeile herausfiltern in dem das Suchwort steckt (Beispiel).

    Spoiler anzeigen
    [autoit]

    $sText = "TestTestTestTest" & @CRLF & "TestAutoItTestTest" & @CRLF & "TestTestTestTest"
    $sSearch = "AutoIt"

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,"",$sText)

    [/autoit] [autoit][/autoit] [autoit]

    $iSearch = StringInStr($sText, $sSearch) - 1
    $iSearch_Left = StringInStr($sText, @CRLF, 0, -1, $iSearch)
    $iSearch_Right = StringInStr($sText, @CRLF, 0, 1, $iSearch)
    $sText = StringTrimLeft(StringLeft($sText, $iSearch_Right), $iSearch_Left)

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,"",$sText)

    [/autoit]
  • Hallo Vamp,

    Zitat

    Erfolg: Gibt die Position des Unterstrings zurück

    Quelle Hilfe zu StrInStrwenn du das File in Array einliest und jede Zeile einzeln durchsuchst, kannst du dir ja auuch den Schleifenzähler merken. Ansonsten, die Position - grösstmögliche Zeilenlänge, darauf achten dass Egebnis grösser 0 ist sonst 1 als Startposition vewenden,

    mfg autoBert

  • name22

    Soweit ich den das verstanden habe wird bei dir erst das Wort rausgesucht, anschließend die Zeichen von links und rechts bis zum Umbruch abgesucht und dann der Rest abgeschnitten.
    Funktioniert auch soweit mit deinem selbst erstellten Text.
    Füge ich statt deines Textes eine Txtfile ein wird ein leerer String ausgegeben, habe einfachheitshalber $sText = Fileopen("test.txt") gesetzt.
    Also muss Count einen ungültigen Wert haben oder negativ sein, habe allerdings noch nicht rausfinden können warum.

    In der Textfile steht einfach nur "Hello world new"

    autoBert

    schonmal danke für die deutsche Autoithilfe :D Wusste gar nicht das es eine gibt und habe immer mit der englischen gearbeitet^^
    Habe mich mal an einer Arrayversion versucht, allerdings wieder auf ein Problem gestoßen.
    Text in Array einlesen + Array auslesen funktioniert soweit, baue ich jetzt allerdings eine IF-Funktion mit StringInStr ein kommt "2" raus.

    Textdatei habe ich für den Zweck erweitert, sie enthält nun:
    1
    3
    hello world5
    7

    Wegen @CRLF werden leere Arrayzeilen erstellt, die geschriebenen Zahlen sind in dem Fall also auch der Index.
    Lese ich das Array in der Schleife OHNE If Funkion aus, zeigt er mir nacheinander " 1,L,3,L,hello world5,L,7 " an -> richtig ( L = leerer String , letzte Msgbox weggelassen)
    Baue ich die If-funktion ein zeigt er mir " 1,L,2" an, wieso kommt hier die 2 ? Es gibt keinen Array mit Wert 2 !?

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $file = fileopen("test.txt",0)
    $readfile = FileRead($file)
    $array = StringSplit ($readfile,@CRLF )
    _ArrayDisplay($array)
    $Suchwert = 0

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If $array[0] = 1 Then
    MsgBox(0, 'test', 'Error')
    Else
    For $i = 1 To $array[0] -1
    msgbox(0,"test",$array[$i])
    If $array[$i] = StringInStr($array[$i],"world") then
    $Suchwert = $i
    exitloop
    EndIf
    Next
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    msgbox(0,"test",$i & $array[$suchwert])

    [/autoit]
  • Du musst mit StringInStr auch richtig umgehen ;)
    Mach mal:

    [autoit]

    If StringInStr($array[$i],"world") Then

    [/autoit]


    Alles außer 0 wird quasi als True angesehen und 0 wird nur zurückgegeben wenn der String nicht gefunden wurde ansonsten die Position an dem er ist. (in deinem Bsp 7)