Hallo, wo ihr gerade beim Thema "in Textdatei suchen" seid...
habe hier auch einen Beitrag für diese Seite. Es ist ein Tool, was Textdateien durchsucht, und Zeilen, die eine bestimmte Zeichenkette enthalten (einstellbar) in eine andere Datei "Ergebnisdatei" schreibt.
Ich zum Beispiel, habe damit Logdateien mit mehreren Tausenden Zeilen durchsucht und mir wichtige Zeilen rausgefiltert.
Ich habe die erste Version auch mit Zeilenweisen "StringInStr"... das hat aber 100x länger gedauert, als die Lösung die ich gestern mit _ArraySearch erarbeitet habe:
C
#include <Array.au3>
#include <File.au3>
OnAutoItExitRegister("_OnExit")
Global $debugmodus = 0
Global $suchstring
Global $dateiname_Ergebnisdatei
Global $enddateiname
Global $file2
Global $aDatei_eingelesen[1]
Global $aText_extrahiert[1]
Global $Suchoptionen
;Dateien auswählen
Global $files[1], $akt_file = ""
While 1
$akt_file = ""
$akt_file = FileOpenDialog("Datei wählen", @ScriptDir, "All (*)", 4)
If $akt_file = "" Then
ExitLoop(1)
ElseIf StringInStr($akt_file, "|") Then
Local $multiselsected = StringSplit($akt_file, "|")
For $temp_i = 2 To $multiselsected[0]
_ArrayAdd($files, $multiselsected[1] & "\" & $multiselsected[$temp_i])
Next
Else
_ArrayAdd($files, $akt_file)
EndIf
WEnd
_ArrayDelete($files, 0)
$files = _ArrayUnique($files)
If Not IsArray($files) Then
MsgBox(16, "Beende", "Es wurde keine zu durchsuchenden Dateien angegeben", 2)
Exit
EndIf
;Eingeben lassen, was gesucht werden soll
Global $akt_suchstring, $suchstrings[1]
$akt_suchstring = InputBox("Zeichenkette", "zu suchende Zeichenkette:")
If $akt_suchstring = "" Then
MsgBox(16, "Beende", "Es wurde kein Suchstring angegeben", 2)
Exit
Else
_ArrayAdd($suchstrings, $akt_suchstring, Default, @CRLF)
$Suchoptionen = $akt_suchstring
EndIf
While $akt_suchstring <> ""
$akt_suchstring = InputBox("weitere zu Suchende Zeichenkette eingeben", "zu suchende Zeichenkette angeben: " & @CRLF & "ESC bzw. Abbrechen = keine weitere Zeichenkette")
If $akt_suchstring <> "" Then
_ArrayAdd($suchstrings, $akt_suchstring, Default, @CRLF)
$Suchoptionen &= ", " & $akt_suchstring
EndIf
WEnd
_ArrayDelete($suchstrings, 0)
$suchstrings = _ArrayUnique($suchstrings)
;Dateiname für die Ergebnisdatei
$dateiname_Ergebnisdatei = InputBox("Dateiname Ergebnisdatei angeben", "Dateiname für die Ergebnisdatei angeben: " & @CRLF & "z.B.: Ergebnisse", "Ergebnisse")
$enddateiname = StringReplace($dateiname_Ergebnisdatei, "\", " ")
$enddateiname = StringReplace($enddateiname, "/", " ")
$enddateiname = StringReplace($enddateiname, ":", " ")
$enddateiname = StringReplace($enddateiname, "*", " ")
$enddateiname = StringReplace($enddateiname, "?", " ")
$enddateiname = StringReplace($enddateiname, "<", " ")
$enddateiname = StringReplace($enddateiname, ">", " ")
$enddateiname = StringReplace($enddateiname, "|", " ")
$enddateiname = StringReplace($enddateiname, Chr(34), " ")
$file2 = @ScriptDir & "\" & $enddateiname & ".txt"
;Jede Datei einlesen und dies nach dem Suchkritieritum durchsuchen
Global $Ergebnis_indexe[1], $trefferanzahl = 0, $akt_pos = -1, $next_hit[1], $pos_gemerkt, $next_pos, $Ergebnisse[1]
For $temp_i = 1 To $files[0]
If IsArray($aDatei_eingelesen) Then
ReDim $aDatei_eingelesen[1]
ReDim $next_hit[1]
EndIf
If FileExists($files[$temp_i]) Then
ToolTip($temp_i & " / " & $files[0] & " - " & $files[$temp_i], MouseGetPos(0), MouseGetPos(1), "Datei einlesen " & $temp_i & " / " & $files[0])
_FileReadToArray($files[$temp_i], $aDatei_eingelesen)
If IsArray($aDatei_eingelesen) Then
redim $Ergebnis_indexe[1]
For $temp_j = 1 To $suchstrings[0]
ToolTip("Datei: " & $files[$temp_i] & @CRLF & "Suche nach: " & $suchstrings[$temp_j], MouseGetPos(0), MouseGetPos(1), "Datei durchsuchen: " & $temp_i & " / " & $files[0])
$akt_pos = _ArraySearch($aDatei_eingelesen, $suchstrings[$temp_j], 0, 0 ,0, 1)
If $akt_pos <> -1 Then
_ArrayAdd($Ergebnis_indexe, $akt_pos, Default, @CRLF)
$trefferanzahl += 1
While $akt_pos <> -1
$akt_pos = _ArraySearch($aDatei_eingelesen, $suchstrings[$temp_j], $akt_pos + 1, 0 ,0, 1)
If $akt_pos <> -1 Then
_ArrayAdd($Ergebnis_indexe, $akt_pos, Default, @CRLF)
$trefferanzahl += 1
EndIf
WEnd
EndIf
Next
_ArraySort($Ergebnis_indexe)
If $temp_i = 1 Then
_ArrayAdd($Ergebnisse, "gesuchte Zeichenfolgen: '" & $Suchoptionen & "'" , Default, @CRLF)
_ArrayAdd($Ergebnisse, "Insgesamt gefundene Zeilen: " & $trefferanzahl )
_ArrayAdd($Ergebnisse, "" )
EndIf
If UBound($Ergebnis_indexe, 1) - 1 > 0 Then
_ArrayAdd($Ergebnisse, "[Datei '" & $files[$temp_i] & "' - " & UBound($Ergebnis_indexe, 1) - 1 & " Zeilen]:" )
For $temp_j = 1 To UBound($Ergebnis_indexe, 1) - 1
_ArrayAdd($Ergebnisse, $aDatei_eingelesen[$Ergebnis_indexe[$temp_j]], Default, @CRLF)
Next
_ArrayAdd($Ergebnisse, "")
EndIf
EndIf
EndIf
Next
;~ _ArrayDisplay($Ergebnisse, "$Ergebnisse")
If $trefferanzahl >= 1 Then
$Ergebnisse[2] = "Insgesamt gefundene Zeilen: " & $trefferanzahl
ToolTip("")
_FileWriteFromArray($file2, $Ergebnisse, 1)
msgbox(0,"Fertig","Ergebnisdatei wurde erstellt: " & @CRLF & @CRLF & $file2 & @CRLF & @CRLF & "Anzahl Treffer: " & $trefferanzahl)
Else
ToolTip("")
msgbox(0,"Fertig","nichts gefunden...", 2)
EndIf
Func _OnExit()
Exit
EndFunc
Alles anzeigen