StringRegExp problem

  • [autoit]

    $path = ("C:\Dokumente und Einstellungen\AsiX-5\Lokale Einstellungen\Temp\") ;WIn-XP
    $Search = StringRegExp ("test-", "\d,\A.html") ;\d=Entspricht jeder Ziffer (0-9), \A =Entspricht jedem alphanumerischen Zeichen (a-z, A-Z, 0-9) (lt Hilfe)
    $op = FileOpen($path & $Search)
    ConsoleWrite($op)
    ;ich habe im Temp-Ordner 2 dateien. eine
    ;Test-123-A2c.html und eine
    ;Test-123-A2c-frames.html
    ;ich möchte Die Obere finden und in der SciT-Console lesen lassen.
    ;leider scheitert es bereits bei der suche

    [/autoit]


    Ichhab auch noch ein bsp wie ich das mit Array lösen kann, nur leider komm ich so auch nicht weiter.
    Könnt Ihr mir helfen?

  • Da ich nicht weiß welchem Muster die Dateinamen tatsächlich entsprechen hab ich erstmal eines genommen welches die obere Datei findet.
    Das Pattern müsste aber sicher noch angepasst werden:

    Spoiler anzeigen
    [autoit]

    Global $sFileName
    Global $hFFFF = FileFindFirstFile(@TempDir & "\*.html") ; Finde alle html-Dateien im Temp-Dir

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

    Do ; Endlosschleife
    $sFileName = FileFindNextFile ($hFFFF) ; hole nächsten gefundenen Dateinamen
    If @error Then ExitLoop

    If StringRegExp($sFileName, "^Test-\d+-\w+\.html$") Then
    MsgBox(0,"Gefunden", "Datei " & $sFileName & " wird nun in die SciTe-Konsole ausgegeben")
    ConsoleWrite(FileRead(@TempDir & "\" & $sFileName) & @CRLF)
    EndIf
    Until 0

    [/autoit]
  • danke Funktioniert super (auch mit der richtigen Datei, da das Suchmuster das gleiche ist nur halt eben nicht "test" und "123")
    jetzt habe ich das Prinzip der StringRegEx erstmal verstanden, das man alle datein, z.b. html erstmal mit Filefind... lokalisieren muss,
    bevor man mit StringRegExp genauer nach der datei Verahnden kann...
    Dankeschön

  • Hallo an Alle AutoIT begeisterten,
    Ich, als Angänger war mal wieder voller Tatendrang und habe in meinem Jugendlichen Leichtsinn
    was auf die Beine gestellt, wo ich jetzt nicht weiter komme.

    Was ich möchte:
    auf eine Internet(Flatcast-Producer)-Radio-Seite gehen,
    mich einloggen und AUtomatisch Texte schreiben lassen.
    ich den Radio Log Einschalten (Es entsteht eine html-Datei im Temp Ordner-auf C:
    welche sich mit jedem im Radio geschriebenen Satz aktualisiert.)
    Diese bekommt mit jedem einloggen oder PC-Neustart eine neue Nurmmer im Namen zb flatcast-1058-12345.html
    soweit kein Problem, das habe ich hinbekommen nun möchte ich diese Datei so auslesen
    das AutoIT ein bestimmtes Wort/Satz in dem log erkennt und darauf etwas zurückschreibt.

    Mein Problem:
    Ich weiß wie ich Die aktuelle in Temp gespeicherte .html datei suchen kann. (Einen großen dank an AspirinJunkie -siehe oben)
    Ich weiß auch, wie ich diese auslesen kann und nach einem bestimmten Wort suchen kann. (Einen großen dank an Schnitzel)
    Nur Leider nicht, wie ich das zusammen mit dem Rest in dem Script unterbringen kann
    und wie ich es dazu bringe "zurück zu schreiben"
    Wenn jemand einige Tipps für mein, recht ausgefallenes Projekt hat, wäre das sehr Hilfreich.
    Danke schonmal Vorab

  • habs jetzt soweit. doch...

    [autoit]

    #include <String.au3>
    #include<Array.au3>
    #include<file.au3>
    Local $datei, $line
    Global $sFileName
    Global $hFFFF = FileFindFirstFile(@TempDir & "\*.html")
    $Radio = "testi"
    $handle = "Edit1"
    Do
    $sFileName = FileFindNextFile ($hFFFF) ; hole nächsten gefundenen Dateinamen
    If @error Then ExitLoop

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

    If StringRegExp($sFileName, "^Test-\d+-\w+\.html$") Then
    $datei = FileOpen (@TempDir & "\"& $sFileName)

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

    EndIf
    Until 0
    ;sucht mir die datei und öffnet sie, alles problemlos!
    while 1
    WinWaitactive ($Radio)
    Sleep(1000)
    $line= FileReadline($datei,1)
    ;Soll immer nur die 1te linie lesen, klappt aber nicht. er ließt zwar die datei jedesmal von neuem ein, was er ja auch soll
    ;aber immer die ganze, somit findet er immerwieder beide worte wenn sie geschrieben worden
    ;und schreibt mir endlos beide Rückgabewerten in den chat
    ;wie schaffe ich es, das er mir nur die erst linie list?
    ; Lt Hilfedatei:
    ;[optional]Die Zeilennummer, die gelesen werden soll. Die erste Zeile einer Textdatei hat die Nummer 1 (und nicht 0)
    ;anscheinend ist das bei *.html-Dateien anders

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

    $text1= ("xXx")
    $text2= ("asix-5")

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

    If StringInStr ( $line, $text1,0, 1) Then ;sollte das Wort in der datei Suchen, bzw in der oberen Zeile
    ControlSetText ($Radio, "", $handle, "rückgabe von text1")
    Sleep(100)
    Send ("{ENTER}")
    EndIf
    If StringInStr ( $line, $text2,0, 1) Then ;sollte das Wort in der datei Suchen, bzw in der oberen Zeile
    ControlSetText ($Radio, "", $handle, "rückgabe von Text2")
    Sleep(100)
    Send ("{ENTER}")
    EndIf
    wend

    [/autoit]