Zeilen in Datei ersetzen ohne die ganze Datei neu zu schreiben

  • Tag,

    Ich habe ein Problem dabei einzelne Texte/Zeichen in einer Text-Datei zu ändern, genau genommen hänge ich dabei es zu machen ohne die ganze Datei in eine Varriable zu packen und dann zu bearbeiten.

    Die Datei kann z.B. so aussehen:

    Code
    Grünkohla|2|Grünkohlb|5|Grünkohlc|1
    23hallo1

    Nun kann da aber eine ganz schön große menge an Daten zusammen kommen, z.B. 4Gb.

    Nehmen wir an in der Datei wären 4Gb Daten drin und ich will eine bestimmte "1" in eine "7" ändern, dass Problem dabei ist selbst wenn ich mit "Filereadline()"
    nur die richtige Zeile bearbeite, müsste ich den ganzen Text haben um ihn neu wieder in die Datei zu schreiben.
    Wenn ich nun häufiger Dinge in der Datei verändern müsste wäre das sehr langwierig!

    Gibt es da nicht irgendeine andere Möglichkeit, so etwas wie Filewriteline für zeilen mittendrin so dass ich nur die eine Zeile bearbeiten müsste?


    [Edit:] Ok Thx...

    2 Mal editiert, zuletzt von Zeitriss (6. Dezember 2011 um 19:14) aus folgendem Grund: Gelöst

  • Filesetpos() schreibt nur in bestimmete Bereiche einer Datei,
    mit Filegetpos() werden Daten blockweise aus der Datei gelesen....

  • sry. ich meinte eher

    [autoit]

    _FileWriteToLine()

    [/autoit]

    , mein Fehler :D

    Mit _FileWriteToLine():
    und mit

    [autoit]

    @CRLF

    [/autoit]

    erstellt zu eine neue Zeile. machste einfach:

    [autoit]

    _FileWriteToLine($File, $Line, "Dein Text" & @CRLF)

    [/autoit]


    Schon haste da ne neue zeile ( wenn du keinen Text haben willst, lässte den String einfach weg )

    mfg
    Hauke

  • Mit Filesetpos() ist es möglich dinge in die Text Datei einzufügen, aber wenn ich jetzt z.B. eine "12" durch eine 7 ersetzen möchte müsste ich auch noch etwas herauslöschen, dies ist einfach wenn beide gleichlang sind oder der neue String länger, aber sobald der alte String länger ist habe ich ein Problem.

    Ich müsste also Zeichen auch noch irgentwie löschen können ohne sie zu überschreiben, gibt es da eine Möglichkeit?


    Mit _FileWriteToLine() gibt es das Problem zwar nicht aber Filesetpos() ist ansonsten besser für mich geeignet.

  • Natürlich geht das mit String befehlen aber wenn ich z.B. in diesen String:

    Code
    ..."Hallo Welt"...


    Wenn jetzt an beiden Seiten c.a. 4Gb kommen und ich "Hallo Welt" in "Hi Welt" ändern möchte müsste ich wieder die ganze Datei( bezieungsweise die halbe) in eine Variable lesen, wobei der String viel zu groß ist um in eine Variable zu passen.
    Ich breuchte mehrere Variablen, also ein Array (Wenn der Arbeitsspeicher überhaupt reicht, wenn nicht müsste ich auslagern), dann müsste ich in dem oben genannten Fall min. 4Gb in eine Datei schreiben.
    Das braucht einfach zu lange.

    Das bearbeiten mit Stringbefehlen ist einfach aber das Zeitsparende einfügen in die Datei bekomme ich nicht hin solange der Neue String kürzer ist als der Alte.

    Beispiel:

    Code
    ...Hallo Welt...


    (Die "..." sind 4 Gb Beliebiger Text)
    Das will ich nun durch "Hi Welt" ersetzen

    Code
    ...Hi Weltelt...

    Leider ist "Hi Welt" kurzer deshalb bleibt ein teil von "Hallo Welt" übrig.

    [Edit:] Das soll direkt in der Datei geändert werden, ich nütze dazu die Befehle "FileSetPos" und "FileWrite"(Im überschreibmodus)

    Um das wegzukriegen müsste ich wieder allen in eine Variable laden, und exakt das will ich vermeiden.