Da ich mich nicht sehr gut auskenne mit AutoIt (nur die Grundlagen) wollte ich mal fragen ob es möglich ist mit AutoIt einen Ordner nach .txt Dateien durchsuchen zulassen und diese dann nach Wörtern aus einem Input zu durchsuchen. Danach sollte es die Datei in das aktuelle Datum, Uhrzeit umbennen am Dateinamenende die gefundenen Worte schreiben.
Danke für eure Hilfe im vorraus.
.txt Dateien besonders auslesen
-
- [ gelöst ]
-
fanboi -
27. Februar 2009 um 17:13 -
Geschlossen -
Erledigt
-
-
Hallo fanboi!
das ist kein großes Problem, hier gibts auch sicher Hilfe dazu, aber ein bischen sollte vom Fragesteller schon kommen.
Wo hängst Du jetzt, beim Auslesen des Verzeichnisses oder beim Verarbeiten der Einzeldateien??
zumindest über den großen Ablauf muß man sich schon gedanken machen.Kennst Du grep -l (Unix/linux) der kann z.B. nach allen *.txt mit dem Wort "ERROR" suchen und gibt die Dateinamen aus, langt das evtl. auch schon?? (das wär dann flexibler Einzusetzen).
Wie soll Dein Input sein, ne Tabelle, ein Eingabefeld, ein Begriff, mehrere Begriffe??
Grüße
German
-
Ich habe gerade vor ein paar Tagen ein Script zum Suchen von mehreren Begriffen in Textdateien geschrieben. Ich such damit MP3-Titel in Inhaltsangaben.
Ggf. kannst Du es ja als Ausgangsbasis verwenden.
Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#Include <GuiListBox.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#Region ### START Koda GUI section ### Form=MP3Suche.kxf
$Main_GUI = GUICreate("MP3 Suche", 715, 559, 193, 115)
$Suchbegriffe_ID = GUICtrlCreateInput("", 116, 4, 513, 21)
$Suchliste_ID = GUICtrlCreateList("", 4, 60, 349, 487)
$StartSuche_ID = GUICtrlCreateButton("Start...", 324, 36, 65, 21, 0)
$Trefferliste_ID = GUICtrlCreateList("", 360, 60, 349, 487)
$Label_In_ID = GUICtrlCreateLabel("Suchen in", 8, 36, 84, 24)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$Treffer_Label_ID = GUICtrlCreateLabel("Treffer", 648, 36, 58, 24)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$Suchbegriffe_Label_ID = GUICtrlCreateLabel("Suchbegriffe", 8, 4, 107, 24)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$Suchliste_waehlen_ID = GUICtrlCreateButton("wählen...", 92, 36, 65, 21, 0)
;GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###$Anzeigeliste_ID = GUICtrlCreateList("",4,60,705,487)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState($Anzeigeliste_ID,$GUI_HIDE)
$EndeSuche_ID = GUICtrlCreateButton("Ende",8,36,65,21,0)
GUICtrlSetState($EndeSuche_ID,$GUI_HIDE)
GUISetState(@SW_SHOW)GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
[/autoit] [autoit][/autoit] [autoit]
Global $begriffeWhile 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Suchliste_waehlen_ID
GUICtrlSetData($Suchliste_ID,"")
$SelectFiles = FileOpenDialog("'SHIFT' benutzen um mehrere Dateien auszuwählen...","E:\Listen\MP3\","Listen(*.txt)",4+1)
If @error = 1 Then ContinueLoop
If StringInStr($selectFiles,"|") Then
Dim $aListView = StringSplit($SelectFiles,"|")
For $i = 2 To $aListView[0]
GUICtrlSetData($Suchliste_ID,$aListView[1] & "\" & $aListView[$i])
Next
Else
GUICtrlSetData($Suchliste_ID,$SelectFiles)
EndIf
Case $StartSuche_ID
$pos = WinGetPos("MP3 Suche")
SplashTextOn("","Suche läuft...",200,50,$pos[0]+($pos[2]-200)/2,$pos[1]+($pos[3]-50)/2,33,"",14)
Sleep(500)
$begriffe = _SearchStringSplit(GUICtrlRead($Suchbegriffe_ID))
If $begriffe[0] = 0 Then
Msgbox(0,"Fehler...","Sie müssen schon wenigstens einen Suchbegriff eingeben !")
Else
$anzahl = _GUICtrlListBox_GetCount($Suchliste_ID)
If $anzahl = 0 Then
Msgbox(0,"Fehler...","Sie müssen mindestens eine Datei angeben, in der gesucht werden soll !")
Else
GUICtrlSetData($Trefferliste_ID,"")
For $i = 0 To $anzahl - 1
$aktuelleDatei = _GUICtrlListBox_GetText($Suchliste_ID,$i)
$fileID = FileOpen($aktuelleDatei,0)
While 1
$zeile = FileReadLine($fileID)
If @error Then ExitLoop
If _BegriffeSuchen($begriffe,$zeile) = $begriffe[0] Then
GUICtrlSetData($Trefferliste_ID,$aktuelleDatei)
ExitLoop
EndIf
Wend
FileClose($fileID)
Next
EndIf
EndIf
SplashTextOn("","Die Suche wurde abgeschlossen.",300,50,$pos[0]+($pos[2]-300)/2,$pos[1]+($pos[3]-50)/2,33,"",14)
Sleep(1000)
SplashOff()
Case $EndeSuche_ID
GUICtrlSetState($Suchbegriffe_ID,$GUI_ENABLE)
GUICtrlSetState($Anzeigeliste_ID,$GUI_HIDE)
GUICtrlSetState($EndeSuche_ID,$GUI_HIDE)
GUICtrlSetState($Label_In_ID,$GUI_SHOW)
GUICtrlSetState($StartSuche_ID,$GUI_SHOW)
GUICtrlSetState($Treffer_Label_ID,$GUI_SHOW)
GUICtrlSetState($Suchliste_ID,$GUI_SHOW)
GUICtrlSetState($Suchliste_waehlen_ID,$GUI_SHOW)
GUICtrlSetState($Trefferliste_ID,$GUI_SHOW)
GUICtrlSetData($Anzeigeliste_ID,"")
EndSwitch
WEndFunc _SearchStringSplit($string)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Local $suchbegriffe[1]
If StringLen($string) > 0 Then
$begriff = 1
$i = 1
ReDim $suchbegriffe[2]
Do
If StringMid($string,$i,1) = '"' Then
Do
$i += 1
If $i <= StringLen($string) Then
If StringMid($string,$i,1) = '"' Then
If $suchbegriffe[Ubound($suchbegriffe)-1] <> "" Then
$begriff +=1
ReDim $suchbegriffe[Ubound($suchbegriffe)+1]
EndIf
$i += 1
ExitLoop
Else
$suchbegriffe[$begriff] &= StringMid($string,$i,1)
EndIf
EndIf
Until $i > StringLen($string)
Else
If StringMid($string,$i,1) = " " Then
If $suchbegriffe[Ubound($suchbegriffe)-1] <> "" Then
$begriff +=1
ReDim $suchbegriffe[Ubound($suchbegriffe)+1]
EndIf
Else
$suchbegriffe[$begriff] &= StringMid($string,$i,1)
EndIf
EndIf
$i += 1
Until $i > StringLen($string)
If $suchbegriffe[Ubound($suchbegriffe)-1] = "" Then ReDim $suchbegriffe[Ubound($suchbegriffe)-1]
$suchbegriffe[0] = UBound($suchbegriffe)-1
EndIf
Return $suchbegriffe
EndFuncFunc ListDblClick()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Local $fileID, $zeile
Local $selection = _GUICtrlListBox_GetCurSel($Trefferliste_ID)
;_GUICtrlListBox_SetCurSel($Trefferliste_ID,-1)
$fileID = FileOpen(_GUICtrlListBox_GetText($Trefferliste_ID,$selection),0)
GUICtrlSetState($Suchbegriffe_ID,$GUI_DISABLE)
GUICtrlSetState($Label_In_ID,$GUI_HIDE)
GUICtrlSetState($StartSuche_ID,$GUI_HIDE)
GUICtrlSetState($Treffer_Label_ID,$GUI_HIDE)
GUICtrlSetState($Suchliste_ID,$GUI_HIDE)
GUICtrlSetState($Suchliste_waehlen_ID,$GUI_HIDE)
GUICtrlSetState($Trefferliste_ID,$GUI_HIDE)
GUICtrlSetState($Anzeigeliste_ID,$GUI_SHOW)
GUICtrlSetState($EndeSuche_ID,$GUI_SHOW)
While 1
;GUICtrlSetData($AnzeigeListe_ID,_GUICtrlListBox_GetText($Trefferliste_ID,$selection))
$zeile = FileReadLine($fileID)
If @error Then ExitLoop
If _BegriffeSuchen($begriffe,$zeile) = $begriffe[0] Then GUICtrlSetData($Anzeigeliste_ID,$zeile)
Wend
FileClose($fileID)
;_GUICtrlListBox_SetCurSel($Anzeigeliste_ID,-1)
EndFuncFunc WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
If Not IsHWnd($Trefferliste_ID) Then $hWndListBox = GUICtrlGetHandle($Trefferliste_ID)
$hWndFrom = $ilParam
$iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
$iCode = BitShift($iwParam, 16) ; Hi Word
Switch $hWndFrom
Case $Trefferliste_ID, $hWndListBox
Switch $iCode
Case $LBN_DBLCLK
ListDblClick()
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMANDFunc _BegriffeSuchen ($aBegriffe, $sString)
[/autoit]
Local $gefunden = 0
If not IsArray($aBegriffe) Then Return 0
For $i = 1 To $aBegriffe[0]
If StringInStr($sString,$aBegriffe[$i]) > 0 Then $gefunden += 1
Next
Return $gefunden
EndFunc ; _BegriffeSuchen -
Es hängt am Auslesen und Umbennen der Dateien in die Aktuelle Zeit & Datum und das gefundene Suchwort. Und bei dem von "Micha he" geposteten Script muss ich erst alles in Ruhe anschauen weil da so viele Variablen sind und ich den Zusammenhang finden will
z.B soll eine Datei am Ende heißen : 27.02.2009 & 20:35:55 & Beispiel.txt -
In meinem Script steht in der Variable "$aktuelleDatei" in Zeile 73, der Dateiname der Textdatei, wenn alle Begriffe gefunden wurden.
Du brauchst also eigentlich nur ein FileMove in die Zeile 73 schreiben. Nur Dein Namenschema taug schonmal nicht ! Doppelpunkt (in der Uhrzeit) gehen nicht in einem Datei oder Verzeichnisnamen. Ich empfehle "JJJJ_MM_TT_hh_mm_ss_[Suchbegriff].xxx"
-
Hallo Fanboi!
hier ganz einfach programmiert, ohne jeden Schnickschnack,
teste das mal durch:Spoiler anzeigen
[autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]; test_70.au3 für fanboi
[/autoit] [autoit][/autoit] [autoit]
; von msp-holzwurm
; mal ganze einfach anfangen#include <Date.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <string.au3>
#include <array.au3>
#include <file.au3>$datelong = @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC ; das ist mal ein vernünftiges Datumsformat
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$Version="1.00"
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$Vinfo="test_70 für Fanboi " & $Version
; hiermit kann man schön suchen!!; Umgebung festlegen
[/autoit] [autoit][/autoit] [autoit]
$SearchDir="f:\x99" ; =Verzeichnis dasz zu durchsuchen ist
$SearchFiles="*.txt" ; dateityp festlegen; Benutzer nach Suchbegriff fragen:
[/autoit] [autoit][/autoit] [autoit]
$Suchbegriff= InputBox($VINFO, "Suchbegriff eingeben.", "")if StringLen($Suchbegriff) < 1 then
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
msgbox(64,$VINFO, "kein Suchgberiff eingeben" & @CR & "ABBRUCH",10)
exit
EndIf$FolderList=_FileListToArray($SearchDir & "\", $Searchfiles,1) ; Flag 2 = nur Ordner
[/autoit] [autoit][/autoit] [autoit]
If (Not IsArray($FolderList)) then
msgbox(0,$VINFO, "keine Dateien im Suchordner gefunden",10)
ELSEFor $i = 1 To $FolderList[0]
[/autoit] [autoit][/autoit] [autoit]
; jetzt kommt eine Datei nach der anderen
msgbox(0,$VINFO, "prüfe Datei: " & $SearchDir & "\" & $Folderlist[$i],1)$check01=_SearchinFile($SearchDir & "\" & $Folderlist[$i],$Suchbegriff)
[/autoit] [autoit][/autoit] [autoit]
; bei Antwort 0 nichts weiter tun
; bei Antwort 1 Datei umbenennenif $check01=1 then
[/autoit] [autoit][/autoit] [autoit]
; Variable neu setzen, auf aktuelle Zeit
$datelong=@YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC ; das ist mal ein vernünftiges Datumsformat
FileMove($SearchDir & "\" & $Folderlist[$i], $SearchDir & "\" & $Folderlist[$i] & $Suchbegriff & "_" & $datelong)EndIf
[/autoit] [autoit][/autoit] [autoit]Next
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
EndifFunc _SearchinFile($File,$Suchbegriff)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
; Funktion zum Testen, ob der Suchgebegriff enthalten ist
; Return 0=nicht gefunden
; Return 1=Treffer (beim ersten Treffer, wird nicht weitergesucht)Dim $myarray
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
If Not _FileReadToArray($file,$myarray) Then
MsgBox(4096,"FEHLER", " Datei " & $textdatei & " nicht gefunden, oder leer")
Return 0
EndIfFor $x = 1 to Ubound($myarray) -1 ; jetzt wird das array von Zeile 1 bis zur lezten Zeile eingelesen
[/autoit] [autoit][/autoit] [autoit]
$Zeile=$myArray[$x]
; msgbox(0,"ich hab jetzt die Zeile mit folgendem Inhalt:", $zeile)
if StringInStr($zeile,$Suchbegriff) > 0 then ; Achtung irgenwo in der Zeile gefunden, die Antwort ist die Position
msgbox(0,$VINFO, "hier hab ich den Suchbegriff drin: " & $zeile)
Return 1
EndIfNext
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]Danke langt nicht, so ein Kaffee wär schon angebracht!!!
-
Ein riesen großes Dankeschön an den holzwurm