.txt ändern bei mehr als 5 zeilen

  • ich hab mal wieder ein problem ich hab eine .txt an deren ende immer wieder
    neue sachen eingefügt werden.... jetzt möchte ich das wenn es mehr als 5
    zeilen sind löscht es die erste und rückt die andren nach oben...

    ich hab es so versucht:
    (geht aber irgend wie ich)

    [autoit]

    While 1
    $iHelp = FileReadLine(@ScriptDir & "\Data\log.txt",20)
    if $iHelp <> "" Then
    $line1 = FileReadLine(@ScriptDir & "\Data\log.txt",1)
    $line2 = FileReadLine(@ScriptDir & "\Data\log.txt",2)
    $line3 = FileReadLine(@ScriptDir & "\Data\log.txt",3)
    $line4 = FileReadLine(@ScriptDir & "\Data\log.txt",4)
    $line5 = FileReadLine(@ScriptDir & "\Data\log.txt",5)

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

    _FileWriteToLine(@ScriptDir & "\Data\log.txt",1,$line2,1)
    _FileWriteToLine(@ScriptDir & "\Data\log.txt",2,$line3,1)
    _FileWriteToLine(@ScriptDir & "\Data\log.txt",3,$line4,1)
    _FileWriteToLine(@ScriptDir & "\Data\log.txt",4,$line5,1)
    _FileWriteToLine(@ScriptDir & "\Data\log.txt",5,"",1)
    endif
    WEnd

    [/autoit]
  • Spoiler anzeigen
    [autoit]

    While 1 * Sleep(500)
    $aSplit = StringSplit(FileRead(@ScriptDir & "\Data\log.txt"), @CRLF, 3)
    If @error Then ContinueLoop
    If UBound($aSplit) > 5 Then
    Local $sRet = ""
    For $i = UBound($aSplit) - 5 To UBound($aSplit) - 1
    $sRet &= $aSplit[$i] & @CRLF
    Next
    $hFile = FileOpen(@ScriptDir & "\Data\log.txt", 2)
    FileWrite($hFile, $sRet)
    FileClose($hFile)
    EndIf
    WEnd

    [/autoit]
  • Hi,

    probier mal:
    StringSplit(FileRead(@ScriptDir & "\Data\log.txt"), @CRLF, 2)

    ;-))
    Stefan

    @Edit: Fehler liegt beim StringSplit, da er mehrmals @CRLF splittet, das Array hat dann Leerfelder. Neuer Ansatz:

    [autoit]


    #include <file.au3>
    Global $aSplit
    While 1 * Sleep(500)
    _FileReadToArray (@ScriptDir & "\Data\log.txt", $aSplit)
    If @error Then ContinueLoop
    If UBound($aSplit) > 5 Then
    Local $sRet = ""
    For $i = UBound($aSplit) - 5 To UBound($aSplit) - 1
    $sRet &= $aSplit[$i] & @CRLF
    Next
    $hFile = FileOpen(@ScriptDir & "\Data\log.txt", 2)
    FileWrite($hFile, $sRet)
    FileClose($hFile)
    EndIf
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von ojo (9. März 2010 um 13:50)

  • @Edit: Fehler liegt beim StringSplit, da er mehrmals @CRLF splittet, das Array hat dann Leerfelder. Neuer Ansatz:

    Was glaubst du warum ich Flag 3 benutze?!

    Naja heir nochmal meine Funktion von eben, MIT Beispieldatei, um dir zu zeigen, dass sie funktioniert...

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Global $DATEI = @ScriptDir & "\testdatei.txt"
    _Testdatei()

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

    While 1 * Sleep(500)
    $aSplit = StringSplit(FileRead($DATEI), @CRLF, 3)
    If @error Then ContinueLoop
    If UBound($aSplit) > 5 Then
    MsgBox(0, "", "Alte Datei:"); Das hier dann entfernen. Nur fürs Vorzeigen
    _ArrayDisplay($aSplit) ; Das hier dann entfernen. Nur fürs Vorzeigen
    Local $sRet = ""
    For $i = UBound($aSplit) - 5 To UBound($aSplit) - 1
    $sRet &= @CRLF & $aSplit[$i]
    Next
    $hFile = FileOpen($DATEI, 2)
    FileWrite($hFile, StringTrimLeft($sRet, 2))
    FileClose($hFile)
    MsgBox(0, "Neue Datei:", FileRead($DATEI)) ; Das hier dann entfernen. Nur fürs Vorzeigen
    EndIf
    WEnd

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

    Func _Testdatei(); Das hier dann entfernen. Nur fürs Vorzeigen
    $__hFile = FileOpen($DATEI, 2)
    For $i = 1 To 30
    FileWrite($__hFile, "Zeile " & $i)
    If $i < 30 Then FileWrite($__hFile, @CRLF)
    Next
    FileClose($__hFile)
    EndFunc ;==>_Testdatei

    [/autoit]
  • Hi,

    Zitat

    Was glaubst du warum ich Flag 3 benutze?!


    fahr mal runter. ^^

    Zitat

    Naja heir nochmal meine Funktion von eben, MIT Beispieldatei, um dir zu zeigen, dass sie funktioniert


    Nicht ganz, mit folgender, wichtiger, Änderung:
    $sRet &= @CRLF & $aSplit[$i] :thumbup:

    ;-))
    Stefan

    Einmal editiert, zuletzt von ojo (9. März 2010 um 14:22)


  • fahr mal runter.


    Sorry, sollte nicht krabitzig klingen. Wollte dich halt nur darauf hinweisen, dass es nicht an StringSplit, sondern am Flag liegt.
    Und ja, ich hab die Funktion noch angepasst, sonst wären nämlich immer leerzeilen am Ende enstanden, und die Datei hätte sich so nach und nach aufgelöst :D

  • Hi,

    kein Problem (s. Edit).
    War auch ein bisschen irritiert, da ich das Flag nicht kannte.
    Ist auch nicht in der englischen Hilfe vorhanden, benutze allerdings immer noch die Version 3.3.0.0, bzw. 3.3.4.0.

    ;-))
    Stefan

  • War auch ein bisschen irritiert, da ich das Flag nicht kannte.

    Das ist lediglich die Kombination von Flag 1 und 2
    flag = 1, es wird der gesamte Trennzeichenstring als Trennmarkierung genutzt
    flag = 2, deaktiviert die Rückgabe der Anzahl im ersten Element. Dadurch kann wird das Array 0-basierend. Man muss nun mit UBound() die Größe des Arrays feststellen.

    http://translation.autoit.de/onlinehilfe/fu…StringSplit.htm

  • Das ist lediglich die Kombination von Flag 1 und 2
    flag = 1, es wird der gesamte Trennzeichenstring als Trennmarkierung genutzt
    flag = 2, deaktiviert die Rückgabe der Anzahl im ersten Element. Dadurch kann wird das Array 0-basierend. Man muss nun mit UBound() die Größe des Arrays feststellen.

    Danke.