Dateien löschen / Dateiinhalt entfernen?

  • Hallo Leute,

    ich habe im Verzeichnis: D:\Vent\LOG und T:\Vent\LOG viele TXT-Dateien.
    Der Inhalt jede Zeile beginnt mit dem Jahr (vierstellig)

    200909240823;05PC1427;WIN_7;X64;VENT_XM;;8809091207;Müller
    200909300816;05PC1427;WIN_7;X64;VENT_V8;;7908012402;Becker;3

    201203150855;05PC2139;WIN_7;X64;VENT_XM;10212022001;10212031201;Pjana;3

    1. Die Dateien bei den keine Zeile mit dem aktuellem Jahr (zur Zeit 2012) beginnt, sollen gelöscht werden.
    2. In der Datei sollen alle Zeilen die nicht mit aktuellem Jahr beginnen entfernt werden.

    Wie mache ich das am besten?

    Besten Dank vorab!

    Viele Grüße,
    Dino

  • Ich würde _FileReadToArray benutzen, dann mit ner For-Schleife durch das Array gehen, mit _ArrayDelete jeweils die Elemente entfernen, die nicht den Kriterien entsprechen und am Ende dann:

    • wenn das Array leer ist, die Datei löschen
    • wenn das Array nicht leer ist, es mit _FileWriteFromArray in die Datei schreiben

    edit: Ungetestet: (aber lies dir den Code und die Kommentare auch durch!)

    Spoiler anzeigen
    [autoit]

    #include <File.au3> ;Datei einbinden, die die _File-Befehle anbietet
    #include <Array.au3> ;Datei einbinden, die die _Array-Befehle anbietet

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

    $Files = _FileListToArray("D:\Vent\LOG","*.txt") ;Alle relevanten Dateinamen in ein Array lesen
    For $i = 1 To $Files[0] ;Den Inhalt dieser Schleife pro Datei einmal ausführen
    Local $Lines, $NewLines ;zwei lokale Variablen erstellen
    _FileReadToArray($Files[$i],$Lines) ;Inhalt der Datei in ein Array einlesen
    For $j = 1 To $Lines[0] ;Pro Zeile:
    If StringLeft($Lines[$j],4) = "2012" Then ;Wenn die Zeile mit "2012" anfängt, dann
    _ArrayAdd($NewLines,$Lines[$j]) ;In das andere Array kopieren
    EndIf
    Next ;Datei ist fertig durchgegangen
    If IsArray($NewLines) Then ;Wenn das neue Array nicht leer ist
    _FileWriteFromArray($Files[$i],$NewLines) ;Array in Datei schreiben
    Else ;Sonst
    FileDelete($Files[$i]) ;Datei löschen
    EndIf
    Next ;Und wieder von vorne

    [/autoit]

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

    Einmal editiert, zuletzt von L3viathan (19. März 2012 um 12:47)

  • Hi L3viathan,

    erstaml Besten Dank!

    Ich habe es getestet und bekomme diese Meldung:

    >Running:(3.3.6.1):C:\Program Files (x86)\AutoIt3\autoit3_x64.exe "D:\Dino\test.au3"
    D:\Dino\test.au3 (19) : ==> Subscript used with non-Array variable.:
    For $j = 1 To $Lines[0]
    For $j = 1 To $Lines^ ERROR
    ->13:05:33 AutoIT3.exe ended.rc:1
    +>13:05:34 AutoIt3Wrapper Finished
    >Exit code: 1 Time: 1.240

    Viele Grüße,
    Dino

  • Und so?

    [autoit]


    #include <File.au3> ;Datei einbinden, die die _File-Befehle anbietet
    #include <Array.au3> ;Datei einbinden, die die _Array-Befehle anbietet

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

    $Files = _FileListToArray("D:\Vent\LOG","*.txt") ;Alle relevanten Dateinamen in ein Array lesen
    For $i = 1 To $Files[0] ;Den Inhalt dieser Schleife pro Datei einmal ausführen
    Local $Lines, $NewLines ;zwei lokale Variablen erstellen
    _FileReadToArray($Files[$i],$Lines) ;Inhalt der Datei in ein Array einlesen
    If not isArray($Lines) Then ContinueLoop ;Wenn Datei leer, Datei überspringen
    For $j = 1 To $Lines[0] ;Pro Zeile:
    If StringLeft($Lines[$j],4) = "2012" Then ;Wenn die Zeile mit "2012" anfängt, dann
    _ArrayAdd($NewLines,$Lines[$j]) ;In das andere Array kopieren
    EndIf
    Next ;Datei ist fertig durchgegangen
    If IsArray($NewLines) Then ;Wenn das neue Array nicht leer ist
    _FileWriteFromArray($Files[$i],$NewLines) ;Array in Datei schreiben
    Else ;Sonst
    FileDelete($Files[$i]) ;Datei löschen
    EndIf
    Next ;Und wieder von vorne

    [/autoit]

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.