mehrere TXT in Verzeichnissen durchsuchen & Ergebniss in MSGBox

  • Hallo zusammen,

    Ich habe mir ein Script gebastelt das den User auffordert einen Suchstring einzugeben der in einer Datei gesucht werden soll. Ist das Ergebniss Positiv erscheint eine MSGBox das ein Treffer erfolgt ist mit Dateiname und in welcher Zeile der Suchstring steht. Das ganze sieht so aus:

    [autoit]


    #include <File.au3>
    $Datei1 = '123.txt'

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

    $Suchstring = InputBox("Info", "Suchstring eingeben:", "", "")
    For $i=0 to _FileCountLines($Datei1)
    If FileReadLine($Datei1, $i)=$Suchstring Then
    MsgBox(0,"Melde", "POSITIV: Zeile " & $i & " in Datei " & $Datei1 & "")

    EndIf
    Next

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

    MsgBox(0,"Melde", "Suchvorgang abgeschlossen")

    [/autoit]

    Mein Problem ist nun das ich ein Verzeichnis mit mehreren Unterverzeichnissen habe in denen mehrere TXT Dateien deren Name ich nicht kenne durchsucht werden müssen. Kann man so etwas irgendwie bewerkstelligen?
    Desweiteren sollte die Zeile in der der Treffer erfolgt ist komplett in der MSGBox ausgegeben werden.

    Für eure HIlfe vorab besten Dank :)

  • Als Erstes musst du den String den FileReadLine zuückgibt abspeichern, also $var=FileReadLine($handle).
    Dann müsstes du, wenn der Suchstring nicht immer die ganze Zeile sein soll, StringInStr zum vergleichen benutzen.

    Wenn du bei der _File-UDF bleiben willst, kannst du _FileListToArray benutzen und wenn du die Zeilen im Array haben willst kannst du _FileReadToArray. Wenn du zum Dateien finden lieber FileFindFirstFile und FileFindNextFile benutzt, kannst du das auch machen.

    Links zur Hilfe:

    [autoit]


    StringInStr
    _FileListToArray
    _FileReadToArray
    FileFindFirstFile
    FileFindNextFile

    [/autoit]
  • Du kannst auch die rekursive Verzeichnissuche verwenden. z.B so

    [autoit]


    Global $objFSO = ObjCreate("Scripting.FileSystemObject")

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

    ListFilesRecursive("C:\")

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

    Func ListFilesRecursive($strFolder)
    Local $objFolder, $objSubFolder, $objFile

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

    $objFolder = $objFSO.GetFolder($strFolder)
    $colFiles = $objFolder.Files
    For $objFile In $colFiles
    If StringRight($objFile.Path, 4) = ".txt" Then SearchSubString($objFile.Path)
    Next
    For $objSubFolder In $objFolder.SubFolders
    ListFilesRecursive($objSubFolder.Path)
    Next
    EndFunc

    [/autoit]

    Die Funktion SearchSubstring macht z.B. das was du oben beschrieben hast