In Datei suchen

  • Hallo zusammen,

    in meinem Skript durchsuche ich den PC nach einer Datei.
    Anschließend möchte ich den Inhalt der Datei durchsuchen, ob ein String enthalten ist.
    Muss ich dazu FileRead und strininstring machen oder gibt es eine bessere Möglichkeit?

    LG FKFK

  • Moin,

    was meinst du mit String in dem Fall? Kann doch prinzipiell alles sein...
    Möchtest du zwischen Zahlen und Buchstaben unterscheiden?
    Oder eine Suchfunktion, die Dateien nach einer bestimmten (vom Benutzer) angegebenen Zeichenkette durchsucht?

    Einmal editiert, zuletzt von John8 (30. April 2014 um 12:45)

  • Zitat

    Muss ich dazu FileRead und strininstring machen oder gibt es eine bessere Möglichkeit?


    Ja, das wäre schon mal eine Möglichkeit.
    Ich glaube aber, dass es noch besser (schneller) wäre, größere Dateien zuerst in einzelne Zeilen/Abschnitte zu zerlegen.
    Eine Alternative zu StringInStr(...) wäre dabei StringRegExp(...), da reguläre Ausdrücke genutzt werden können und somit auch beispielsweise leicht nach mehreren Strings gesucht werden kann.

    Google sollte dir dabei auch helfen, besonders einige Links zum englischen Forum.

    Ansonsten gibt es schon derartige Suchprogramme, die schneller sind als sämtliche (pure) AutoIt Versionen, wie z.B. SearchMyFiles.

  • Wenns unbedingt Autoit sein muss, würde ich das so in der Art angehen:

    Spoiler anzeigen
    [autoit]


    $sFileList = _SearchFileByString(@DesktopDir, "Admin")

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

    ConsoleWrite($sFileList & @LF)

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

    Func _SearchFileByString($sStartDir, $sString)
    If StringRight($sStartDir, 1) <> "\" Then $sStartDir &= "\"
    Local $hSearch = FileFindFirstFile($sStartDir & "*"), $sReturn
    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then
    ExitLoop
    ElseIf @extended Then
    $sReturn &= _SearchFileByString($sStartDir & $sFile & "\", $sString)
    Else
    If Not StringRegExp($sFile, ".*\.(exe|dll|zip|7z|jpg|png|gif|mp3)\z") And StringInStr(FileRead($sStartDir & $sFile), $sString) Then $sReturn &= $sStartDir & $sFile & @LF
    EndIf
    WEnd
    Return $sReturn
    EndFunc ;==>_SearchFileByString

    [/autoit]

    LG
    Christoph :)

  • Hi,

    Stringinstr() ist SEHR schnell, wenn man das casesensitive-flag setzt. Also ca. 7-8x schneller als "ohne"

    stringinstr($text,$suchstring) = "langsam"
    stringinstr($text,$suchstring,1) ist also wesentlich schneller

    "langsam" bedeutet, auf meinem Rechner findet Stringinstr() am Ende einer 52MB (!) großen Datei einen Suchstring mit 40 Zeichen innerhalb 2 Sekunden.
    Mit gesetztem casesensitiv-flag wird der Suchtext in 250ms gefunden....
    Vergleich Suchfunktionen