Txt-Datei an bestimmter Position etwas einfügen.

  • Hiho,

    Ich habe eine Text-Datei mit mehreren/unbekannten Zeilen mit Text.

    In diese soll in jeder Zeile an einer bestimmten Text-Position (z.B. 790) 4 Zeichen (meist Leerzeichen) überschrieben werden.
    Zusätzlich gibt es aber Zeilen die nicht so lange sind wie die Standard-Zeile, sprich die o.g. Position gibt es gar nicht.
    Da soll dann mit Leerzeichen aufgefüllt werden und dann dort wieder die 4 Zeichen eingefügt werden.

    Wie gehe ich das am besten an?? Bräuchte da ein Anstupser..

    Einmal editiert, zuletzt von Torni (22. Februar 2013 um 20:41)

  • Wo hängt's?
    Dafür gibt's doch die String-Befehle.^^

    Nehmen wir mal an, du hast die Datei zeilenweise als Array vorliegen.
    Dann einfach eine For-Schleife, die das Array durchgeht.

    In dieser dann eine Abfrage per StringLen, ob die benötigte Länge vorhanden ist.
    Dann ein kurzes _StringInsert (String.au3) an dieser Position.
    Wenn nicht, dann [benötigte Länge minus vorhandene Länge] mal Leerzeichen anfügen und den Schleifenschritt wiederholen. ;)

    chess

    Edit:
    Das war so gemeint:

    Spoiler anzeigen
    [autoit]


    #include <String.au3>
    #include <File.au3>

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

    $sFile = "test.txt" ;Datei
    $sOutputFile = "output.txt"
    $sInsertString = "insert!" ;Text zum Einfügen
    $iRequiredLength = 15 ;Benötigte Zeilenlänge
    $iInsertPlace = 10 ;Einfügungsstelle für $sInsertString

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

    $aLines = StringSplit(FileRead($sFile), @CRLF, 3)

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

    For $iLine = 0 To UBound($aLines) - 1
    If StringLen($aLines[$iLine]) >= $iRequiredLength Then ; Zeilenlänge größer oder gleich der benötigten Länge
    $aLines[$iLine] = _StringInsert($aLines[$iLine], $sInsertString, $iInsertPlace) ;Einfügen
    Else ;Wenn die Zeile kürzer ist
    $aLines[$iLine] &= _StringRepeat(Chr(32), $iRequiredLength - StringLen($aLines[$iLine])) ;Leerzeichen anfügen
    $iLine -= 1
    EndIf
    Next

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

    _FileWriteFromArray($sOutputFile, $aLines)

    [/autoit]