In jeder Zeile einer Textdatei einen String einfügen?

  • Hallo zusammen,

    mein aktuelles Problem lässt sich etwas schwer beschreiben, aber ich probiers einfach.

    Ich hab hier eine Datei xxx.list (lässt sich problemlos mit Notepad öffnen).
    Die Datei hat etwa 700-1000 Einträge.
    Diese Datei soll als Grundlage für 7zip dienen, damit 7zip weiß, welche
    Dateien er komprimieren soll.

    Nun braucht 7zip aber in der xxx.list absolute pfade.
    Ich hätte keine Problem damit, die Pfade einmalig manuell anzupassen.
    Da es aber täglich gebraucht wird, bräuchte ich jetzt in AutoIT folgende Lösung.
    - Eine Datei soll geöffnet werden und vor jeder Zeile in der Datei ein String angehängt (oder vorgehängt ^^) werden.

    Alte Datei also so:
    123.jpg
    456.jpg
    789.jpg

    Soll am Ende so aussehen:
    C:\tmp\123.jpg
    C:\tmp\456.jpg
    C:\tmp\789.jpg

    Habs bis jetzt leider nicht hinbekommen..
    Hoffe ihr könnt mir helfen!

    Einmal editiert, zuletzt von Davor (25. März 2008 um 19:23)

    • Offizieller Beitrag
    [autoit]

    #include <File.au3>

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

    Global $Path = "xxx.list", $aFile
    Global $append = 'C:\temp\'
    $aFile = _FileReadToArray($Path, $aFile)
    If Not IsArray $aFile Then Exit MsgBox(0, '', 'Datei konnte nicht gelesen werden!')
    For $i = 1 To UBound($aFile) -1
    If $aFile[$i] <> '' Then $aFile[$i] = $append & $aFile[$i]
    Next
    FileMove($Path, $Path & '.BAK', 1) ; bestehende Datei sichern
    If _FileWriteFromArray($Path, $aFile, 1) = 1 Then
    MsgBox(0, '', 'Ferddisch :-)')
    Else
    MsgBox(0, '', 'Fehler beim Rückschreiben der Datei')
    EndIf

    [/autoit]
  • Ok Danke dir!
    Klingt alles sehr logisch und schlüssig,
    dennoch erhalte ich immer den "Fehler beim Rückschreiben der Datei"
    kann aber nicht so wirklich feststellen woran das liegt:

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

    #include <File.au3>

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

    $Path = @ScriptDir & 'bilder.list'
    $aFile = ""
    $append = 'C:\temp\'
    $aFile = _FileReadToArray($Path, $aFile)

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

    For $i = 1 To UBound($aFile) -1
    If $aFile[$i] <> '' Then $aFile[$i] = $append & $aFile[$i]
    Next

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

    If _FileWriteFromArray($Path, $aFile, 1) = 1 Then
    MsgBox(0, '', 'Ferddisch :-)')
    Else
    MsgBox(0, '', 'Fehler beim Rückschreiben der Datei')
    EndIf

    [/autoit]


    btw. was ist eigentlich der Unterschied zwischen " und ' oder ist das nur geschmackssache?

    • Offizieller Beitrag

    Laß dir mal beim Schreibvorgang die Fehlerart ausgeben:

    [autoit]

    If _FileWriteFromArray($Path, $aFile, 1) = 1 Then
    MsgBox(0, '', 'Ferddisch :-)')
    Else
    Switch @error
    Case 1
    MsgBox(0, '', 'Fehler beim Öffnen der Datei')
    Case 2
    MsgBox(0, '', 'Input ist kein Array ')
    Case 3
    MsgBox(0, '', 'Fehler beim Schreiben in die Datei')
    EndSwitch
    EndIf

    [/autoit]

    Ob du " oder ' verwendest ist Geschmackssache. Nur nicht mixen :D
    Wenn du in einem String Gänsefüßchen verwenden möchtest mußt du ihn mit Hochkomma einschließen (oder umgekehrt, wie du willst).
    z.B. 'Das ist ja eine "tolle" Sache' <== So ist gewährleistet, dass es ein String bleibt.

    • Offizieller Beitrag

    Du hast das Beispiel von Bugfix nicht korrekt übernommen (Zeile 6 weggelassen). Dann hättest Du die Fehlermeldung bereits schon vorher bekommen, denn Du hast bei:

    [autoit]


    $Path = @ScriptDir & 'bilder.list'

    [/autoit]

    den Backslash vergessen. Ändere das in:

    [autoit]


    $Path = @ScriptDir & '\bilder.list'

    [/autoit]

    und es sollte funktionieren (so es die Datei 'bilder.list' gibt).

    • Offizieller Beitrag

    Hallo,

    im Script von BugFix hat sich ein Fehler eingeschlichen, die Zeile

    [autoit]

    $aFile = _FileReadToArray($Path, $aFile)

    [/autoit]

    kann nicht funktionieren, weil $aFile, nachdem das Array gelesen wurde wieder mit dem Rückgabewert von _FileReadToArray überschrieben wird!

    so geht's!

    [autoit]

    #include <File.au3>

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

    Global $Path = "xxx.list", $aFile
    Global $append = 'C:\temp\'

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

    If Not _FileReadToArray($Path, $aFile) Then Exit MsgBox(0, '', 'Datei konnte nicht gelesen werden!')
    For $i = 1 To UBound($aFile) -1
    If $aFile[$i] <> '' Then $aFile[$i] = $append & $aFile[$i]
    Next
    FileMove($Path, $Path & '.BAK', 1) ; bestehende Datei sichern
    If _FileWriteFromArray($Path, $aFile, 1) = 1 Then
    MsgBox(0, '', 'Ferddisch :-)')
    Else
    MsgBox(0, '', 'Fehler beim Rückschreiben der Datei')
    EndIf

    [/autoit]
  • es muss außerdem wennschon heißen:

    [autoit]

    If Not IsArray($DeineArrayVariable) Then ...

    [/autoit]