Hi Leute,
ich habe häufiger die Anforderung alle Excel-, CSV-, oder Word-Dateien in Verzeichnissen nach einem Suchbegriff zu durchsuchen - meist ein eindeutiger Bezeichner für einen Datensatz. Ich benutze dafür ein wunderbares Tool: grepWin (https://sourceforge.net/projects/grepwin/). Obwohl es wunderbar funktioniert, wollte ich die Suchfunktion nachbauen, um mir noch etwas zu automatisieren und im Grunde ist das Tool auch oversized für meine Zwecke..
CSV-Dateien stellen ja kein Problem dar; ich habe sie nur erwähnt, weil ich auch sie durchsuche.. Um einen Suchbegriff mit grepWin zu finden, muss man einen Haken bei "Include Binary Files" setzen und schon werden auch Excel-Dateien mit einem Treffer gelistet.
Da habe ich mir gedacht, ich könnte einfach, ohne Beachtung des Dateityps, alle Dateien als Binary öffnen und den Suchbegriff als Binary-String darin suchen. Aber so plump klappt das bei mir nicht. Ich hoffe ihr könnt mir da weiter helfen.
Unten habe ich mal einen Ordner mit einigen Testfiles und meinem Skript angehängt (Die Inhalte sind immer 1234 oder Das ist ein Test). Wahrscheinlich könnt mir aber schon anhand des Codes sagen, wo meine Fehler liegen.
Spoiler anzeigen
#include <FileConstants.au3>
Example()
Func Example()
GUICreate("", 320, 55, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45, -1)
Local $idFile = GUICtrlCreateInput("", 10, 5, 300, 20)
Local $idBtn = GUICtrlCreateButton("Suche", 10, 30, 60, 20)
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case -3
Exit
Case $idBtn
Local $sString = GUICtrlRead($idFile)
Local $bString = StringToBinary($sString)
_Search($bString)
EndSwitch
WEnd
EndFunc ;==>Example
Func _Search($bString)
Local $sFileName, $hFileOpen, $sFileRead
Local $hSearch = FileFindFirstFile("*.*")
While 1
$sFileName = FileFindNextFile($hSearch)
If @error Then ExitLoop
$hFileOpen = FileOpen(@ScriptDir & "\" & $sFileName, $FO_BINARY)
If $hFileOpen = -1 Then ConsoleWrite("Fehler beim Einlesen der Datei: " & $sFileName & @LF)
$sFileRead = FileRead($hFileOpen)
If StringInStr($sFileRead, $bString) Then
ConsoleWrite("Treffer in " & $sFileName & @LF)
Else
ConsoleWrite("Kein Treffer in " & $sFileName & @LF)
EndIf
FileClose($hFileOpen)
WEnd
EndFunc ;==>_Search
Alles anzeigen