Txt Datei

  • Hi Leute

    Wie kann man mehrere Txt. Datei öffnen
    Immer die Ersten und Letzten 10 Zeilen löschen.
    Speichern
    Nächste Txt. Datei öffnen
    alles wiederholen usw
    Es sind ca 10 txt. Dateien

    lg
    Vitaq

  • Hi
    habe mir folgendes Überlegt

    _FileReadToArray
    _ArrayDelete
    _FileWriteFromArray

    • Func DeleteFirst()
    • Local $File = @TempDir&"\edit.inhalt"
    • Local $Array
    • If FileExists($File) Then FileDelete($File) ;Wenn die Datei schon existiert, lösche sie)
    • FileWrite($File, GUICtrlRead($Edit)) ; Schreibe Inhalt in eine Datei
    • _FileReadToArray($File, $Array) ; Lies Zeile für Zeile in ein Array
    • _ArrayDelete($Array, 0) ; Lösche das Element 0 (Anzahl der Zeilen)
    • _ArrayDelete($Array, 0) ; Lösche das Element 0 (Damals Element 1 also Zeile 1)
    • _FileWriteFromArray($File, $Array) ; Schreibe den neuen Inhalt in die Temporäre Datei
    • Local $FileRead = FileRead($File) ;Lies aus, was da drin steht....
    • GUICtrlSetData($Edit, $FileRead) ; ...und setze das als neuen Text in die Edit
    • EndFunc

    Aber wie bekomme ich die letzten Zeilen gelöscht und dann noch die Schleife für Wiederholen?

  • Es ist ziemlich unsinnig den String aus deinem GUI nur auf die Platte zu schreiben um ihn gleich wieder auszulesen.
    Mit Hilfe der Funktion StringSplit() kannst du den String direkt in ein Array verwandeln. Außerdem solltest du dir die Parameter von _ArrayDelete() nochmal genauer ansehen.

    Spoiler anzeigen

    LG
    Christoph :)

  • Hallo @Christoph54

    Das mit der For-Schleife hast du ja schön gelöst, da man sich so ein Trimmen erspart. Das StringSplit mit dem @LF ist weniger fein, denn wer will schon ein verwaistes @CR haben?

    Hm, "1 + 2 To 9 = 10" ? :D

    So hätte ich es gemacht... da du dir so 2x UBound() ersparst.

  • Hi Leute ich hab das jetzt so gelöst würde das für 10 Txt Dateien auch 10mal so reinschreiben vielleicht kann man das aber auch "einfacher" Lösen?
    Vielleicht hat ja jemand eine Idee

    Spoiler anzeigen


    Global $array
    _FileReadToArray("C:\Users\Silvi\Desktop\A\test.txt", $array)
    Global $array2
    _FileReadToArray("C:\Users\Silvi\Desktop\A\zwei.txt", $array2)


    ; lösche die ersten und die letzten 3 zeilen
    _ArrayDelete($array, "0-9;" & $array[0] - 9 & "-" & $array[0])


    ; lösche die ersten und die letzten 3 zeilen
    _ArrayDelete($array2, "0-9;" & $array2[0] - 9 & "-" & $array2[0])


    Local $sFile = @ScriptDir & "\Test1.txt"
    Local $sTest123 = @ScriptDir & "\zwei2.txt"


    _FileWriteFromArray($sFile, $array,1 )


    _FileWriteFromArray($sTest123, $array2,1 )

    • Offizieller Beitrag

    Arrays hast Du doch schon verstanden!
    Wenn Du jetzt noch ein Array für die Dateien einsetzt und das Ganze in einer For-Schleife abarbeitest, dann brauchst Du das nicht 10mal zu schreiben.
    Eine For-Schleife bearbeitet dann alle Dateien. Dann kannst Du auch 1000 oder 10000 Dateien damit bearbeiten.
    Versuch' Dich mal daran. Das ist ein gutes Anfänger-Projekt.

  • Hi Oscar
    wie Meinst du das
    Wenn Du jetzt noch ein Array für die Dateien einsetzt .....
    ich mach doch schon _FileWriteFromArray zum Abschluss

    Kannst du mir das vielleicht bitte erklären

    • Offizieller Beitrag

    Hier mal ein Anfang als Script:

    AutoIt
    Global $aSourceFiles[2] = ["C:\Users\Silvi\Desktop\A\test.txt", "C:\Users\Silvi\Desktop\A\zwei.txt"]
    Global $aTargetFiles[2] = ["C:\Users\Silvi\Desktop\A\test2.txt", "C:\Users\Silvi\Desktop\A\zwei2.txt"]
    
    
    For $i = 0 To UBound($aSourceFiles) - 1
    	; ... Bearbeitung
    	_FileWriteFromArray($aTargetFiles[$i], $array, 1)
    Next
  • Hier mal ein Anfang als Script:

    Genau so sollte das ein Anfänger machen...
    Dieser Anfänger muss allerdings für jede Änderung an den "TargetFiles" den Quellcode ändern. Weniger schön...
    Wesentlich besser und komfortabler zu bearbeiten wird das Programm, wenn die "TargetFiles" untereinander in einer von jedem User und auch mit jedem beliebigen Editor bearbeitbaren Textdatei stehen. Diese einfach per (Anfänger nehmen dafür) FileReadToArray() einlesen.

    • Offizieller Beitrag

    Dieser Anfänger muss allerdings für jede Änderung an den "TargetFiles" den Quellcode ändern. Weniger schön...

    Das stimmt zwar, aber ich denke, um erstmal zu verstehen, wie man das Ganze per Array und For-Schleife bearbeiten kann, ist das direkt im Quelltext leichter ersichtlich.
    Wenn man das einmal verstanden hat, kann man dazu übergehen, das Ganze leichter konfigurierbar zu machen (sprich: Auslagerung in eine Ini-/Textdatei).