_Arraydisplay an Textdatei anfügen

  • Hallo,

    wie kann man die Werte v. _Arraydisplay an eine Textdatei anfügen.
    Beispiel:
    Bei jedem Loopvorgang werden unterschiedliche Werte m. _Arraydisplay angezeigt!
    Und genau diese Werte sollen in einer Textdatei jedesmal angehängt werden!
    Ein _Arraydisplay landet in der Textdatei. Aber beim nächsten Loop wird dieses übeschrieben.
    Welchen Befehl gibt es fürs anhängen?

    (Sorry, aber ich kann nur diesen Beispielcode posten. Https...)

    [autoit]


    #include <file.au3>
    #include <array.au3>
    dim $Name[14]

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

    $sFile = @ScriptDir & "\Namen.txt"

    For $i = 1 to $Seite Step 1

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

    $Name = StringRegExp($Daten,'"name">\s\s(.*?)</span>\s\s</a>',3)

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

    _ArrayDisplay($Name) ; zeigt z.B. 10 Einträge beim ersten Durchlauf
    ; zeigt z.B. 13 Einträge beim zweiten Durchlauf, die sollten ngehängt werden!

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

    Next

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

    _FileWriteFromArray($sFile, $Test, 1); hier sollen alle Loopwerte angefügt werden!

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

    Würde mich über eure Hilfe freuen.

    Viele Grüße
    Ilse

  • Hallo,
    ich denke, das du ein @CR und ein @LF schreiben/senden musst, bevor du erneut Daten in die Datei schreiben willst.

    Gruß
    Homer J. S.

    ...wenn die Donuts auch nur halb so gut schmecken wie sie aussehen, dann sehen sie doppelt so gut aus wie sie schmecken...

  • Hallo,

    merci für deine Hilfe.
    Das war's leider auch nicht!
    Auch wenn ich den Parameter änder (1-2)

    [autoit]


    _FileWriteFromArray($sFile, $Test, 2& @CRLF)

    [/autoit]

    Beispiel: Im ersten Durchlauf sind es COL 0 - 14 Einträge (15 Namen)
    Im zwiten Durchlauf sind es COL 0 - 1 Einträge (2 Namen)

    Und die Textdatei besteht aus 13 Einträgen!
    Sollten aber 17 sein!

    EDIT

    [autoit]


    For $i = 1 to $Seite
    ...
    _ArrayDisplay($test)

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

    _FileWriteFromArray($sFile, $Name, -1 &@CRLF)
    Run("notepad.exe " & $sFile); Kontrolle
    next

    [/autoit]

    Also jeder Durchlauf wird geschrieben, nur nicht angehängt!

    Einmal editiert, zuletzt von Ilse (16. November 2014 um 16:16)

  • Hy,

    Das in deinem ersten Post ist wohl ein Scriptausschnitt - das kann so nicht funktionieren... Wo steht eigentlich das '_FileWriteFromArray()' an das Dateiende anhängen kann, das wäre mir neu! Du musst mit den File-Befehlen Arbeiten, schau mal in die Hilfe. Und wo weist du der Variable '$Test Daten' zu??
    Überprüfe nochmal deinen Code, weise der richtigen Variable entsprechende Daten zu und schreibe alles mit 'FileWrite()' auf deiner HDD. Bei dem 'FileOpen()' Befehl kannst du anweisen das die Daten angehängt werden sollen.

    Grüsse!

  • Hallo Techmix,

    Deine Variante hatte ich auch schon probiert!
    Mit Filewrite....

    [autoit]


    For $i = 1 to $Seite Step 1

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

    $Name = StringRegExp($Daten,'"name">\s\s(.*?)</span>\s\s</a>',3)

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

    _ArrayDisplay($Name) ; zeigt z.B. 10 Einträge beim ersten Durchlauf
    ; zeigt z.B. 13 Einträge beim zweiten Durchlauf, die sollten ngehängt werden!
    _FileWriteFromArray($sFile, $Name, -1 &@CRLF)
    Next

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


    $Name ist ein Array! (wird mit rexex ermittelt!
    Wie kann ich diese Arrays (es sind ja mehrere) pro Loop (_Arraydisplay z. 13)
    in die textdatei schreiben?

    [autoit]


    FileWriteLine($file, $Name[$i] & @CRLF)

    [/autoit]


    Im Loop noch ein Loop... ich weiß nicht wo ich da ansetzen muß!

  • [autoit]

    $datei = "test.txt"
    Dim $array[5] = [0, 1, 2, 3, 4]

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

    For $in In $array ;alle items im array
    FileWrite($datei, $in & @CRLF) ;in Datei schreiben
    Next

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

    ShellExecute($datei)

    [/autoit]

    mehrmals starten...
    WENN man Funktionen verwendet, sollte man sich per strg+j wenigstens die Funktionen mal anschauen!
    Und wenn die Funktion nicht das Ergebnis liefert, was man erwartet, dann sollte man wenigstens die 2 Handgriffe hinbekommen, um die geänderte Funktion umzuschreiben und mit neuem Namen hier zu posten!

    [autoit]

    _FileAppendFromArray()

    [/autoit]

    wäre das dann gewesen...

    Oder mal die Hilfe lesen, denn da steht, dass der FileOpen()-Modus das Schreiben beeinflusst. Dann noch das Filehandle an _FileWriteFromArray() übergeben und alles funktioniert wie gewünscht!

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    2 Mal editiert, zuletzt von Andy (16. November 2014 um 17:48)

  • Hallo Andy,

    merci für die Tipps.
    Das verwirrt mich etwas:

    [autoit]


    Dim $array[5] = [0, 1, 2, 3, 4]

    [/autoit]


    Ich ermittle meine Arrays mit regex

    [autoit]


    $Test = StringRegExp($text,'"name">\s\s(.*?)</span>\s\s</a>',3)

    [/autoit]


    muß ich das dann auch mit dim machen?


    Liebe Grüße
    Ilse :)

  • muß ich das dann auch mit dim machen?

    nein, nur die 3 Zeilen mit dem For/In anfügen

  • Hallo Andy,
    erstmal Danke. Es klappt mit einer Suche.
    Wenn ich jedoch mehrere Ergebnisse Verknüpfe dann nicht!

    [autoit]


    $Name = StringRegExp($text,'"name">\s\s(.*?)</span>\s\s</a>',3)
    $Strasse = StringRegExp($text,'"streetAddress">(.*?)</span>',3)
    $Plz = StringRegExp($text,'"postalCode">(.*?)</span>',3)
    $Ort = StringRegExp($text,'"addressLocality">(.*?)</span>',3)

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

    $datei = "test.txt"

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

    $Adresse = $Name&";"&$Strasse&";"&$Plz&";"&$Ort

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

    For $in In $Adresse ;alle items im array
    FileWrite($datei, $in & @CRLF) ;in Datei schreiben
    Next

    [/autoit]

    Kannst du mir da noch bitte helfen.

    Liebe Grüße
    Ilse

    Einmal editiert, zuletzt von Ilse (17. November 2014 um 11:36)

  • Hallo Oscar,

    ich habe mal ein Beispielscript gemacht (Sorry, ging anders leider nicht)
    Ich fasse mal alles zusammen:

    1. Es gibt mehrere RegEx Suchpattern.
    2. Die müssen in eine Zeile geschrieben werden. (CSV m. Trenner)

    Ich denke dass man das jetzt nachvollziehen kann.

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

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>

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

    $Form1 = GUICreate("Form1", 440, 256, 422, 225)
    $btnDatei = GUICtrlCreateButton("Textdatei generieren", 216, 152, 123, 41)
    GUISetState(@SW_SHOW)

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

    $Text = "Suche1Hans MüllerEnde1,Suche2HauptstrasseEnde2,Suche366554Ende3,Suche4HamelnEnde4"; hier kommen die Ergebnisse her!

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

    $Name = StringRegExp($text,'Suche1(.*?)Ende',3)
    $Strasse = StringRegExp($text,'Suche2(.*?)Ende',3)
    $Plz = StringRegExp($text,'Suche3(.*?)Ende',3)
    $Ort = StringRegExp($text,'Suche4(.*?)Ende',3)

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

    $datei = "test.txt"
    ;~ _ArrayDisplay($Name)
    ;~ _ArrayDisplay($Strasse)
    ;~ _ArrayDisplay($Plz)
    ;~ _ArrayDisplay($Ort)

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

    $Adresse = $Name&";"&$Strasse&";"&$Plz&";"&$Ort ; Diese Felder sollen alle in die Textdatei in einer Zeile!

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $btnDatei

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

    For $in In $Adresse ;alle items im array
    FileWrite($datei, $in & @CRLF) ;in Datei schreiben
    Next
    ShellExecute($datei)

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

    EndSwitch
    WEnd

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

    Liebe Grüße
    Ilse

    • Offizieller Beitrag

    Du kannst die Arrays nicht einfach mit "&" verketten. Das funktioniert nur mit Strings.
    Ich verstehe aber auch nicht, warum Du das nicht gleich mit StringRegExpReplace machst.
    Beispiel:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>

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

    $Form1 = GUICreate("Form1", 440, 256, 422, 225)
    $btnDatei = GUICtrlCreateButton("Textdatei generieren", 216, 152, 123, 41)
    GUISetState(@SW_SHOW)

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

    $Text = "Suche1Hans MüllerEnde1,Suche2HauptstrasseEnde2,Suche366554Ende3,Suche4HamelnEnde4"; hier kommen die Ergebnisse her!

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

    $Adresse = StringRegExpReplace($Text, 'Suche1(.*?)Ende1,Suche2(.*?)Ende2,Suche3(.*?)Ende3,Suche4(.*?)Ende4', '$1;$2;$3;$4')
    $datei = "test.txt"

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $btnDatei
    FileWrite($datei, $Adresse & @CRLF) ;in Datei schreiben
    ShellExecute($datei)

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

    EndSwitch
    WEnd

    [/autoit]
  • Hi,
    das kann doch niemals klappen!

    _ArrayDisplay($Name) ; zeigt z.B. 10 Einträge beim ersten Durchlauf
    ; zeigt z.B. 13 Einträge beim zweiten Durchlauf, die sollten ngehängt werden!

    Wenn mehrere Adressfelder gefunden werden, dann muss man je nach Anzahl der vom RegEx gefundenen Ergebnisse den Text aufbauen!
    Jedenfalls ist suboptimal, dass im 11. Post plötzlich von ADRESSEN gesprochen wird, im 1. Post steht nur was von NAMEN! Und wenn ich dann lese

    $Text = "Suche1Hans MüllerEnde1,Suche2HauptstrasseEnde2,Suche366554Ende3,Suche4HamelnEnde4"; hier kommen die Ergebnisse her!
    $Name = StringRegExp($text,'Suche1(.*?)Ende',3)
    $Strasse = StringRegExp($text,'Suche2(.*?)Ende',3)
    $Plz = StringRegExp($text,'Suche3(.*?)Ende',3)
    $Ort = StringRegExp($text,'Suche4(.*?)Ende',3)

    dann ist das ehrlich gesagt QUARK, denn offensichtlich gibt es mehrere Adressdaten im zu durchsuchenden Text!
    Somit ist Oskars Beispiel zwar richtig, aber für den von Ilse gesuchten Anwendungsfall nur eine "Speziallösung" (bei genau EINER gefundenen Adresse! )
    Also Ilse, bitte beim nächsten Mal nicht nach mehreren Lösungsvorschlägen mit dem "Problem" rausrücken, sondern schon im Startpost, das macht es allen Beteiligten wesentlich einfacher!

    Letzter Versuch, zusammengeklaubt aus den vorliegenden Informationen....

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $Daten = '"name"> NAME1</span> </a>....."streetAddress">STRASSE1</span>..."postalCode">PLZ1</span>...."addressLocality">ORT1</span>' & _
    '"name"> NAME2</span> </a>....."streetAddress">STRASSE2</span>..."postalCode">PLZ2</span>...."addressLocality">ORT2</span>' & _
    '"name"> NAME3</span> </a>....."streetAddress">STRASSE3</span>..."postalCode">PLZ3</span>...."addressLocality">ORT3</span>' & _
    '"name"> NAME4</span> </a>....."streetAddress">STRASSE4</span>..."postalCode">PLZ4</span>...."addressLocality">ORT4</span>'

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

    $Name = StringRegExp($daten, '"name">\s\s(.*?)</span>\s\s</a>', 3)
    $Strasse = StringRegExp($daten, '"streetAddress">(.*?)</span>', 3)
    $Plz = StringRegExp($daten, '"postalCode">(.*?)</span>', 3)
    $Ort = StringRegExp($daten, '"addressLocality">(.*?)</span>', 3)

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

    $text=""
    For $i = 0 To UBound($Name) - 1 ;hoffentlich werden alle anderen Adressdaten gefunden ^^
    $text &= $Name[$i] & ";" & $Strasse[$i] & ";" & $Plz[$i] & ";" & $Ort[$i] & @CRLF ;Trenner je nach Gusto!
    Next

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

    MsgBox(0, "Adressen", $text)

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

    $filehandle = FileOpen("test.txt", 1) ;append
    FileWrite($filehandle, $text)
    FileClose($filehandle)
    ShellExecute("test.txt")

    [/autoit]