File aktualisieren/speichern

  • Guten Morgen zusammen,

    habe heute folgendes Problem.

    1 Ich habe eine Textdatei
    2. In dieser Datei sollen Teile ersetzt werden
    3. Wenn das erledigt ist soll eine neue Datei gespeichert werden

    Das mit dem speichern als neue Datei macht mir Probleme

    Mein Code:

    [autoit]


    $file = FileOpen("test2.txt", 0)

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

    InputBox("Neu","Neue Datei")
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf

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

    While 1
    $line = FileReadLine($file)

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

    If @error = -1 Then ExitLoop
    $Wort1 = StringReplace($line,"Petra","Web.de")
    $Wort2 = StringReplace($line,"Lisa","Gmx.de")

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

    Wend
    MsgBox(0,"Fertig","Datei wurde angepasst")

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

    D.h. die test2.txt wurde bearbeitet und soll nun als neue Datei
    abgespeichert werden!


    Grüße
    Ilse ;)

    2 Mal editiert, zuletzt von Ilse (12. April 2011 um 14:24)

  • klappt irgendwie,
    habe auch mit fileWriteLine probiert!

    [autoit]


    $file = FileOpen("test2.txt", 0)

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

    ;InputBox("Neu","Neue Datei")
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf

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

    While 1
    $line = FileReadLine($file)

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

    If @error = -1 Then ExitLoop
    $Wort1 = StringReplace($line,"VERSION","Test")
    FileWriteLine($file,$Wort1)
    $Wort2 = StringReplace($line,"URL","Web")
    FileWrite($file,"test2.txt")
    Wend
    ;MsgBox(0,"Fertig",$file)

    [/autoit]

    Meine TextDatei

    Spoiler anzeigen


    VERSION
    URL GOTO=http://www.web.de/

  • Hallo Ilse,

    Spoiler anzeigen
    [autoit]

    $file = FileOpen("test2.txt", 0) ; Datei wird angesprochen. Dabei wird für die Datei ein sogenanntes "Handle" übergeben an $file

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

    InputBox("Neu","Neue Datei") ; Abfrage eines Strings, der den Dateinamen der neu zu speichernden Datei enthalten soll. Nur worin wird der zwischengespeichert bis er gebraucht wird... ?
    ; Deine InputBox müsste also eine Variable habe, der es den String "neuer Dateiname" auch reinschreiben kann --> $neue_Datei = InputBox("Neu","Neue Datei")
    If $file = -1 Then ; Abfrage wie in der Hilfe zu sehen, ob das ansprechen der angegebenen Datei erfolgreich war. (ist die Datei überhaupt vorhanden, oder ist sie durch einen anderen Prozess gesperrt, etc
    MsgBox(0, "Error", "Unable to open file.") ; Ausgabe einer Fehlermeldung bei Fehler
    Exit ; Beenden des Scriptes bei Fehler
    EndIf ; Ende der If-Anweisung

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

    While 1 ; Start einer Schleife mit der Bedingung : Laufe solange 1=1 ist
    $line = FileReadLine($file) ; Lese ab der ersten Zeile eine Zeile aus der in Variable $file angegebenen Datei in die Variable $line !!!
    If @error = -1 Then ExitLoop ; Wenn letzte Zeile erreicht, dann Schleife beenden
    $Wort1 = StringReplace($line,"Petra","Web.de") ; speichere die Änderung durch StringReplace in einer neuen Variable namens $Wort1 !!!
    $Wort2 = StringReplace($line,"Lisa","Gmx.de") ; speichere die Änderung durch StringReplace in einer neuen Variable namens $Wort2 !!!
    Wend

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

    MsgBox(0,"Fertig","Datei wurde angepasst") ; MessageBox mit Text ...

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

    #cs
    so, nun dazu, warum das so nicht geht.....

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

    - 1. der neue Dateiname wird weder in einer Variablen vorgehalten noch direkt beim Erstellen der neuen Datei abgefragt z.B.: FileWrite(InputBox("Neu","Neue Datei"),$file)
    - 2. die Änderungen des Textes durch StringReplace werden in neuen Variablen gespeichert, die dann nicht mehr verwendet werden
    - 3. es wird in diesem Script nichts zum Schluß gespeichert. FileWrite ...

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

    #ce

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

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hallo Schnuffel,

    merci für deine Hilfe.
    Bitte schu doch nochmal drüber.
    Also mit FileWriteLine habe ich was hinbekommen.

    Nur FileWrite klappt nicht!

    [autoit]


    $file = FileOpen("test.txt", 0)
    $NeueDatei = InputBox("Neu","DateiName","DateiNeu.txt")
    ; Check if file opened for reading OK
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf

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

    ; Read in lines of text until the EOF is reached
    While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    MsgBox(0, "Line read:", $line)
    $Wort1 = StringReplace($line,"VERSION","Test")
    ;FileWriteLine($NeueDatei,$Wort1)
    $Wort2 = StringReplace($line,"GOTO","Web")
    ;FileWriteLine($NeueDatei,$Wort2)
    Wend
    FileWrite($NeueDatei,$file)
    FileClose($file)

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

    Also daß alle Änderungen nur mit einem Befehl
    und nicht mit FileWriteLine's gespeichert werden müssen.

    Da hänge ich fest!

    Liebe Grüße
    Ilse ;)

  • Muß mich wieder melden,

    ich komme da einfach nicht ans Ziel!
    Meine Textdatei sieht so aus:
    test.txt

    Spoiler anzeigen


    VERSION
    URL GOTO=http://www.web.de/


    So sollte sie später aussehen

    Spoiler anzeigen


    Test
    URL Web=http://www.web.de/

    Mein Code:

    [autoit]


    $file = FileOpen("test.txt", 0)
    $NeueDatei = InputBox("Neu","DateiName","DateiNeu.txt")
    ; Check if file opened for reading OK
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf

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

    ; Read in lines of text until the EOF is reached
    While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    MsgBox(0, "Line read:", $line)
    $Wort1 = StringReplace($line,"VERSION","Test")
    FileWriteLine($NeueDatei,$Wort1)
    $Wort2 = StringReplace($line,"GOTO","Web")
    FileWriteLine($NeueDatei,$Wort2)
    ;FileWrite($NeueDatei,$line)
    Wend
    ;FileWrite($NeueDatei,$file)
    ;FileWrite($NeueDatei("Neu","Neue Datei"),$file)
    FileClose($file)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]
  • ungefähr so (nicht getestet ...)

    [autoit]


    $NeueDatei = InputBox("Neu","DateiName","DateiNeu.txt")

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

    $file = FileOpen("test.txt", 0)
    If $file = -1 Then Exit MsgBox(0, "Error", "Unable to open file.")

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

    $line = FileRead($file)
    $line = StringReplace($line,"VERSION","Test")
    $line = StringReplace($line,"GOTO","Web")
    FileWrite($NeueDatei,$line)
    FileClose($file)

    [/autoit]

    hab den Code mal etwas gekürzt. :D

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hallo Schnuffel,

    ...oh super es klappt endich.
    Ich dachte per Loop, FileReadline...+ kompliziert +1???

    Und wenn ich dann deine 10 Zeilen sehe bin ich
    schon etwas deprimiert!


    Liebe Grüße
    Ilse ;)

  • ...Ein kleines Problem noch:
    Wenn die Zeile so aussieht: Version 443355 ghd 443355322

    Spoiler anzeigen


    $line = StringReplace($line,"VERSION","")


    Wie kann man eine ganze Zeile löschen?
    Es gibt so viele Stringbefehle

    Ich meine wenn das Wort gefunden wurde, daß dann diese
    gelöscht wird.

    ;) Grüße Ilse

  • dann musst Du das doch zeilenweise einlesen und mit StrinInStr prüfen.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hallo Schnuffel,

    noch eine Frage zu Replace

    Wenn mein Text solche Zeilen enthält:

    [autoit]


    web= http://www.web.de/
    web=http://www.gmx.net/

    [/autoit]


    es aber so aussehen sollte

    [autoit]


    _IECreate ("http://www.web.de")
    _IECreate ("http://www.web.net")

    [/autoit]


    dann komme ich so nicht weiter

    [autoit]


    $line = StringReplace($line,"web","$oIE = _IECreate ")
    ;deshalb habe ich das probiert
    $search = _StringBetween($line,"Goto="," ")

    [/autoit]

    komme so nicht weiter...
    die Anführungszeichen und Klammern fehlen!

    das wäre z.B. eine Adresse
    1 http://www.webmail.net
    2.http://www.hotmail.com
    Wie kann man im Text (".........") das mit ersetzen?
    ("http://www.hotmail.com")
    daß aus
    web=http://www.hotmail.com
    das wird
    _IECreate ("http://www.hotmail.com")

    Kannst du mir da helfen?

    Liebe Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (12. April 2011 um 16:34)

  • du solltest dir glaub ich mal die ganzen strin funktionen anschauen dann kommst du vllt mal selber drauf....

    zur info: man kann kann anführungszeichen in einem string mit ' schreiben, so dass diese nicht als ende des strings erkannt werden

    [autoit]


    $var = "web=http://www.hotmail.com"
    $var = StringReplace($var, "web=", "")
    $var = "_IECreate('"& $var & "')"

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

    MsgBox(0,"",$var)

    [/autoit]
  • Hallo elektrikk,

    schön daß du dich meldest.
    Ich lese und probiere schon seit Stunden.

    Kämpfe immer noch mit FileWrite rum
    Vielleicht kannst du mir helfen:
    Wenn meine text.txt so aussieht

    [autoit]


    VERSION BUILD
    TAB T=1
    URL GOTO=http://www.web.de/
    TAG POS=2 TYPE=A ATTR=TXT:FreeMail
    SET !ENCRYPTION NO
    URL GOTO=http://www.gmx.de/

    [/autoit]


    ich aber nur z.B.die Zeile
    1,3 und vier in meiner neuen txt Datei brauche
    aber bereits StringReplace bearbeitet, wie mache ich das?

    [autoit]


    #Include <String.au3>
    #Include <Array.au3>

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

    $file = FileOpen("text.txt", 0)
    $NeueDatei = InputBox("Neu","DateiName","DateiNeu.txt")
    ; Check if file opened for reading OK
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf

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

    While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    ;MsgBox(0, "Line read:", $line)
    $line = StringReplace($line,"VERSION","Ilse")
    $line = StringReplace($line,"URL GOTO=","$oIE = _IECreate ")

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

    FileWrite($NeueDatei,$line & @CRLF)

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

    Wend

    [/autoit]

    In der neuen Datei ist jedesmal der kpl. Code
    und nicht nur die Zeilen die ich brauche!

    huh..
    Liebe Grüße
    Ilse ;)

  • dann schreibe halt nur die zeilen in deine neue datei die du brauchst!!

    also überprüf in der schleife, welche zeile gerade dran ist oder prüf auf den text der zeile und dementsprechend schreibst du die zeile in die neue datei oder eben nicht...

    ein bisschen logisches denken ist gefordert

  • Hallo elektrikk,
    ich versteh's nicht!

    [autoit]


    While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    MsgBox(0, "Line read:", $line)
    $line1 = StringReplace($line,"VERSION","Function")
    $line2 = StringReplace($line,"URL GOTO=","$oIE = _IECreate ")

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

    FileWrite($NeueDatei,$line1 & @CRLF) ; Hier sollte doch die Zeile 1 geschrieben werden!
    FileWrite($NeueDatei,$line2 & @CRLF) ; Hier sollte die Zeile 2 geschrieben werden!
    Wend

    [/autoit]

    Die Msgbox zeigt mir alle Zeilen nacheinander!
    Aber ich schreibe mit FileWrite doch nur 2 Zeilen, wieso stehen im neuen File alle drin!

    Logisches Denken? ?(

    Bitte um Auflösung, sonst muß ich heute noch zum Arzt!
    brr...
    Liebe Grüße
    Ilse :(

  • ich komme nicht weiter!

    Wie kann man eine Zeile nach dem Inhalt abfragen?

    [autoit]


    #Include <String.au3>
    #Include <Array.au3>

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

    $file = FileOpen("test.txt", 0)
    $NeueDatei = InputBox("Neu","DateiName","DateiNeu.txt")
    ; Check if file opened for reading OK
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf

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

    While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop

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

    MsgBox(0, "Line read:", $line)

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

    if $line = StringInStr($line, "Version","ver") > 0 Then
    MsgBox(0, "Version:", $line)
    FileWrite($NeueDatei,$line & @CRLF)
    endif
    Wend

    [/autoit]

    Also wenn die Zeile 1 Version enthält
    dan mach das und das und
    schreibe die Zeile in die neue Datei.
    Enthält die Zeile 2 xxx dann schreibe diese in die neue Datei.

    Muß ich dazu den Befehl StringInStr verwenden?

    :( Ilse

  • Hallo Ilse,

    ich möchte Dich bitten Dich zu entscheiden.
    Nachdem Dir die grundlegeneden Begriffe und Denkweisen nicht geläufig sind ...

    Möchtest Du das programmieren erlernen, oder möchtest Du ein Script erstellt bekommen?
    Wenn wir wissen was Du willst, dann wirst Du auch dem entsprechendes Feedback erhalten.

    Da Du aber die Hilfe gar nicht / falsch / oder nur halbherzig liest wird es wohl auf die 2. Variante herauslaufen ...

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    Einmal editiert, zuletzt von Schnuffel (12. April 2011 um 19:51)

  • Wenn du Zeilenweise vorgehen willst schau dir doch am besten mal _filereadtoarray() und _filewritefromarray() an. Ausserdem interessant:

    [autoit]


    stringinstr()
    stringreplace()
    _arraysearch()
    _arrayfindall()
    ; und sicher noch zig andere Array und String Funktionen siehe Hilfe...

    [/autoit]
  • . Schnuffel..

    klar möchte ich das lernen und ich möchte auch kein Skript erstellt bekommen.

    Habe heute nochmal etliche Befehle, Varianten rauf und runter probiert.
    Auch die Hilfe gelesen, FileWrite, FileWriteline, StringInStr, FileReadLine, StringReplace, If......

    Und nun kommen wieder Varianten dazu
    _filereadtoarray() und _filewritefromarray()

    Mal ehrlich, wenn man dann mit falschem Werkzeug ran geht
    dann dauert das ewig. Ich habe heute zig Stunden damit verbracht
    und weiß offen gesagt immer noch nicht welches Werkzeug ich auspacken, lesen, lernen muß!

    misterspeed
    ...na dann werd ich mal filereadtoarray probieren.
    Danke für den Tipp (Arrays ....meine Freunde)

    Liebe Grüße
    Ilse ;)

  • Hallo Ilse,

    bevor Du mit den einzelnen Funktionen "hantieren" kannst,
    solltest du einige Grundprinzipien lernen.
    Da fehlt noch viel.
    Du möchtest gern ein Auto fahren, verstehst aber bisher noch nicht was ein Zündschloss ist.
    So wird das vermutlich nicht das Ergebnis bringen, dass Du Dir erhoffst ...

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)