File aktualisieren/speichern

  • Guten Morgen zusammen,

    Schnuffel
    ich weiß, aber ich lerne jeden Tag ein paar % mehr!

    misterspeed
    Hier meine Versuche mit Arrays

    Ich kann zwar immer noch nicht die gewünschte Zeile
    in die neue Datei schreiben aber
    vielleicht könnt Ihr ja mal drübersehen und mir sagen
    was da falsch ist und ob ich vom Ansatz her jetzt auf dem richtigen Weg bin!

    Mein Code

    [autoit]


    #include <Array.au3>
    #include <file.au3>

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

    Global $aZeile, $sPathFile = 'test.txt'

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

    $NeueDatei = InputBox("Neu","DateiName","DateiNeu.txt")
    _FileReadToArray($sPathFile, $aZeile) ; txt einlesen in Array
    ;_ArrayDisplay($aZeile)
    $Version = "Version" ; das gesuchte Wort im Text
    $GoTo = "Goto=" ; ein weiteres gesuchte Wort im Text

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

    For $i = 1 To UBound($aZeile)
    MsgBox(0,"",$aZeile[$i]);Test Zeilen anzeigen

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

    $iIndex = _ArraySearch($aZeile, $Version, 0, 0, 0, 1); nach "Version"suchen
    If @error Then
    MsgBox(0, "Nicht gefunden", '"' & $Version & '" Version nicht gefunden.')
    Else
    MsgBox(0, "Gefunden", '"' & $Version & '" Version gefunden und ersetzen ' & $iIndex & ".")

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

    $line = StringReplace($aZeile[$i],"VERSION","Ilse Version");wurde gefunden
    ;MsgBox(0,"",$line)
    _FileWriteFromArray($NeueDatei,$line); hier sollte die abgeänderte Zeile in die neue Datei!

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

    EndIf

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

    Next

    [/autoit]

    Was ich auch noch nicht verstehe, wieso wird die Msgbox bei jeder Zeile angezeigt!

    Liebe Grüße
    Ilse ;)


  • Was ich auch noch nicht verstehe, wieso wird die Msgbox bei jeder Zeile angezeigt!

    Ähm weil du all deine msgbox in deiner for Schleife anzeigen lässt? Ist doch wohl klar dass du da dann für jede Zeile mindestens 2 msgboxen zusehn bekommst.

    Nun zu deinen Fehlern:

    1. Arraysearch macht keinen Sinn wenn du dich Zeilenweise über deine Forschleife durch das Array arbeitest. Entweder mit einer Schleife arbeiten oder Arraysearch verwenden
    2. Wenn du in einem Array etwas ändern willst musst du auch das Feld des Arrays überschreiben und nicht eine Variable ($line ???).
    3. Wenn du das mit $line so machen willst dann darfst du nicht filewritefromarray zum schreiben nutzen, denn er schreibt dann ja nur den Array inhalt den du garnicht verändert hast
    4. line ist kein Array deswegen kann das sowieso nicht klappen mit filewritefromarray, wenn dann müsstest du filewriteline oder sowas verwenden

    So hier mal 2 Varianten die dir alle ungewünschten Strings ersetzen. Ich weiss nicht ob du noch mehr rauskürzen wolltest, so genau hab ich den Thread nicht verfolgt.

    Ohne Arraysearch()

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #include <file.au3>

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

    Global $aZeile, $sPathFile = 'test.txt' ; sicher dass du hier nicht vielleicht besser einen vollständigen Pfad angeben solltest?
    $NeueDatei = InputBox("Neu","DateiName","DateiNeu.txt") ; same here...

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

    _FileReadToArray($sPathFile, $aZeile) ; txt einlesen in Array
    _ArrayDisplay($aZeile)
    $Version = "Version" ; das gesuchte Wort im Text
    $GoTo = "Goto=" ; ein weiteres gesuchte Wort im Text

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

    For $i = 1 To UBound($aZeile)
    if StringInStr($aZeile[$i],$Version) Then
    $aZeile[$i] = StringReplace($aZeile[$i],$Version,"Ilse Version")
    EndIf
    if StringInStr($aZeile[$i],$GoTo) Then
    $aZeile[$i] = StringReplace($aZeile[$i],$GoTo,"MeinText")
    EndIf
    Next
    ; so und nun da wir das Array von allem Unrat befreit haben schreiben wir erst in die Datei:
    _ArrayDisplay($aZeile)
    _FileWriteFromArray($NeueDatei,$aZeile)

    [/autoit]

    Mit _arraysearch()

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #include <file.au3>

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

    Global $aZeile, $sPathFile = 'test.txt' ; sicher dass du hier nicht vielleicht besser einen vollständigen Pfad angeben solltest?
    $NeueDatei = InputBox("Neu","DateiName","DateiNeu.txt") ; same here...

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

    _FileReadToArray($sPathFile, $aZeile) ; txt einlesen in Array
    _ArrayDisplay($aZeile)
    $Version = "Version" ; das gesuchte Wort im Text
    $GoTo = "Goto=" ; ein weiteres gesuchte Wort im Text

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

    $treffer = 0
    While $treffer <> -1
    $treffer = _ArraySearch($aZeile,$Version,0,0,0,1)
    if $treffer = -1 Then
    $treffer = _ArraySearch($aZeile,$GoTo,0,0,0,1) <> -1
    if $treffer <> -1 Then
    $aZeile[$treffer] = StringReplace($aZeile[$treffer],$GoTo,"MeinText")
    EndIf
    Else
    $aZeile[$treffer] = StringReplace($aZeile[$treffer],$Version,"Ilse Version")
    EndIf
    WEnd
    ; so und nun da wir das Array von allem Unrat befreit haben schreiben wir erst in die Datei:
    _ArrayDisplay($aZeile)
    _FileWriteFromArray($NeueDatei,$aZeile)

    [/autoit]

    3 Mal editiert, zuletzt von misterspeed (13. April 2011 um 13:52)

  • Hallo Misterspeed,

    irgendwie ist da der Wurrm drin.

    Wenn ich den Code Starte:

    [autoit]


    #include <Array.au3>
    #include <file.au3>

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

    Global $aZeile, $sPathFile = 'test.txt' ; sicher dass du hier nicht vielleicht besser einen vollständigen Pfad angeben solltest?
    $NeueDatei = InputBox("Neu","DateiName","DateiNeu.txt") ; same here...

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

    _FileReadToArray($sPathFile, $aZeile) ; txt einlesen in Array
    _ArrayDisplay($aZeile)
    $Version = "Version" ; das gesuchte Wort im Text
    $GoTo = "Goto=" ; ein weiteres gesuchte Wort im Text

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

    For $i = 1 To UBound($aZeile)
    if StringInStr($aZeile[$i],$Version) Then
    $aZeile[$i] = StringReplace($aZeile[$i],$Version,"Ilse Version")
    EndIf
    if StringInStr($aZeile[$i],$GoTo) Then
    $aZeile[$i] = StringReplace($aZeile[$i],$GoTo,"MeinText")
    EndIf
    Next
    ; so und nun da wir das Array von allem Unrat befreit haben schreiben wir erst in die Datei:
    _ArrayDisplay($aZeile)
    _FileWriteFromArray($NeueDatei,$aZeile)

    [/autoit]

    nach der Msgbox komm ja _ArrayDisplay
    hier wird alles unverändert angezeigt und die DateiNeu.txt bleibt leer!

    Da wurde nichts hineingeschrieben!
    Meine Text der gelesen wird = test.txt
    Die neue Datei=DateiNeu.txt und diese bleibt nachwievor leer!

  • Dann musst du halt mal die Fehlermeldungen vom Scite Editor lesen. Versuchs mit ubound - 1 oder auch $azeile[0] und dann klappt das auch. Ausserdem solltest du beim filewritefromarray noch den Startindex auf 1 setzen.
    Beim 2. Script mit arraysearch ist btw auch ein fataler Fehler drin der zu einer endlosschleife führt. Aber den darfst du selbst finden. :P

  • oh Misterspeed
    wie ist das Leben schön....

    Zitat

    Dann musst du halt mal die Fehlermeldungen vom Scite Editor lesen.

    Scite wirft keine Fehlermeldung aus!
    Habe alles geändert, klappt aber immer noch nicht!

    [autoit]


    #include <Array.au3>
    #include <file.au3>

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

    Global $aZeile, $sPathFile = 'test.txt' ; sicher dass du hier nicht vielleicht besser einen vollständigen Pfad angeben solltest?
    $NeueDatei = InputBox("Neu","DateiName","DateiNeu.txt") ; same here...

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

    _FileReadToArray($sPathFile, $aZeile) ; txt einlesen in Array
    _ArrayDisplay($aZeile)
    $Version = "Version" ; das gesuchte Wort im Text
    $GoTo = "Goto=" ; ein weiteres gesuchte Wort im Text

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

    For $i = 1 To UBound($aZeile[0])-1
    if StringInStr($aZeile[$i],$Version) Then
    $aZeile[$i] = StringReplace($aZeile[$i],$Version,"Ilse Version")
    EndIf
    if StringInStr($aZeile[$i],$GoTo) Then
    $aZeile[$i] = StringReplace($aZeile[$i],$GoTo,"MeinText")
    EndIf
    Next
    ; so und nun da wir das Array von allem Unrat befreit haben schreiben wir erst in die Datei:
    _ArrayDisplay($aZeile)
    _FileWriteFromArray($NeueDatei,$aZeile,1)

    [/autoit]

    ...ich bin wirklich kurz vorm wahnsinnig werden. ;(
    Das ist ja schlimmer als die Folterei im Mittelalter...

    Grüße
    Ilse


  • Das ist ja schlimmer als die Folterei im Mittelalter...

    So ist es. Nun bei deinem neuen Versuch kommt zwar keine Fehlermeldung mehr, aber da du ubound falsch anwendest kann das ja nix werden.
    Vielleicht nochmal den Umgang mit Arrays und ubound in der Hilfe nachlesen? Die Fehlermeldung in der Scite Console die ich vorhin meinte

    Code
    F:\xxx\_forumsupport\filewriteIlse.au3 (13) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    if StringInStr($aZeile[$i],$Version) Then
    if StringInStr(^ ERROR

    Wenn die bei dir nicht zusehen war solltest du villeicht mal die Einstellungen deines Editors prüfen. (View->Output oder auch F8 Taste)

  • :rock: For $i = 1 To UBound($aZeile,1)-1

    Es läuft (ich verbeuge mich) ;)

    In der neuen Datei sind alle Zeilen drin!
    Eigentlich sollten da doch nur die 2 neuen Zeilen rein! ?(


    Mein Scite-Editor hatte bei keinem Durchlauf eine Fehlermeldung ausgegeben.
    In der Konsole war alles ok! SciTE Version 2.25

    Wie schon in dem anderen Thread erwähnt,
    diese Schreibweisen bringen mich wirklich durcheinander.
    Wenn ich was über Arrays lese dann steht da immer
    $aZeile[1]...
    UBound ($aZeile,1)
    aber das weiß ich ja jetzt. Ich versuche jetzt mehr mit Arrays zu machen,
    dann kapier ich das bestimmt mal.


    Liebe Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (13. April 2011 um 15:36)

  • Naja wenn du nur die beiden Zeilen willst erstell dir halt ein temp array zu dem du dann jeden überarbeiteten treffer mit _array_add hinzufügst. Am Ende schreibst du dann eben dein temp array in eine Datei anstelle des Ursprungs arrays.
    EDIT: Ja mit mit filewriteline gehts natürlich auch, hat aber den nachteil dass du permanent in die Datei schreibst, anstatt nur einmal, was eben dann langsamer ist bei sehr vielen Durchläufen.

  • das probiere ich mal.
    Muß jetzt leider wieder los...

    Naja, ein neuer Autoit-Tag wartet Morgen auf mich
    und nochmals...., ich bin froh und dankbar für die tolle Hilfe!

    ;) Ilse