Array einlesen + bearbeiten

  • Hallo! Ich hab mir mal gedacht, dass ich mich diesmal etwas mehr mit Arrays auseinander setze, aber ich komme irgendwie nicht wirklich klar... Habs noch nie gemacht und die Hilfe hat mir diesmal auch nicht so ganz weiter geholfen.

    Ich habe eine Textdatei namens ansii.txt in der ein code drin steht wie z.B. "Chr(54) & Chr(55) & Chr(53)".
    Nun dachte ich mir, dass ich NUR die zahlen haben will und diese dann mit einem Komma trennen und dann per Msgbox beispielsweise so anzeigen lassen könnte "54,55,53".

    Was ich bisher habe:

    [autoit]

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

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

    Dim $decode

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

    _FileReadToArray( @ScriptDir & "\ansii.txt", $decode)
    $array = StringSplit($decode, ") & Chr(", 1)

    [/autoit]

    Wenn ich jetzt z.B "_ArrayDisplay($array)" noch dazufüge, dann zeigt es mir mir nur "[0] = 1" und "[1] = " <-- nichts

    Dann interessiert mich noch wie ich hier "Chr(54) & Chr(55) & Chr(53)" vor der "54" das "Chr(" wegkrieg x_X ( 2x string split?)
    Und ich würd noch gern wissen wie ich dann nach jeder zweiten Zahl ein Komma einfügen kann Oo (bei der der "53" soll kein Komma DAHINTER)

    Kann mir vllt jemand weiter helfen? An Beispielen verstehe ich sowas recht schnell ;) Wäre euch also dankbar, wenn ihr mirn komplettes Beispiel dafür geben könnten^^

    Einmal editiert, zuletzt von Sora White Dragon (5. Januar 2010 um 23:40)

  • Sooo.. Hab jetzt das:

    [autoit]

    #include <file.au3>

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

    $datei = FileOpen(@ScriptDir & "\ansii.txt", 0)

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

    $decode = FileRead($datei, 1)
    $split = StringSplit($decode, ") & Chr(")
    MsgBox(0,"", $split)
    FileClose($datei)

    [/autoit]

    Leider glaube ich, dass mit Stringsplit in diesem Falle garnicht hilft..., da ich ja einfach nur alle ") & Chr(" rausschneiden und durch nen Komma ersetzen will >-<

  • Wenn du etwas ersetzen willst, benutze StringReplace.
    Die Überreste kannst du mit der selben Funktion raushauen.

  • [autoit]


    #include <file.au3>

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

    $datei = FileOpen(@ScriptDir & "\ansii.txt", 0)

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

    $decode = FileRead($datei, 1)
    $split = StringReplace($decode,") & Chr(",",")
    MsgBox(0,"", $split)
    FileClose($datei)

    [/autoit]


    So müsste es gehen.

  • [autoit]


    #include <file.au3>

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

    $datei = FileOpen(@ScriptDir & "\ansii.txt", 0)

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

    $decode = FileRead($datei, 1)
    $split = StringReplace($decode,") & Chr(",",")
    MsgBox(0,"", $split)
    FileClose($datei)

    [/autoit]


    So müsste es gehen.

    Hmm.. wenn ich es nach deinem Beispiel mache, kommt das bei der MsgBox immer nur ein C. Wahrscheinlich von "Chr(54)"

  • Hier mein Vorschlag:

    [autoit]


    #include <Array.au3>
    Global $decoded, $string, $array, $i
    $string = "Chr(54) & Chr(52) & Chr(53)" & @CRLF & "Chr(6) & Chr(57) & Chr(58)"
    $array = StringRegExp($string, "\d+", 3)
    For $i = 0 To UBound($array) - 2
    $decoded &= $array[$i] & ", "
    Next
    $decoded &= $array[UBound($array) - 1]
    MsgBox(0, "Test", $decoded)

    [/autoit]

    Gruß,
    UEZ

    PS: mein erster StringRegExp Einsatz 8o

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • [autoit]

    $datei = FileOpen(@ScriptDir & "\ansii.txt", 0)

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

    $decode = ""
    while 1
    $decode &= FileRead($datei, 255)
    If @error = -1 Then ExitLoop
    Wend
    FileClose($datei)
    $split = StringReplace($decode, ") & Chr(", ",")
    $split = StringReplace($split, ")" ,"")
    $split = StringReplace($split, "Chr(" ,"")
    MsgBox(0,"", $split)

    [/autoit]
  • Wow, danke. Es funktioniert :D


    Sieht interessant aus Oo Mit FileRead hab ich es bei deinem Beispiel nicht hinbekommen, aber mit InputBox^^ Danke :)

  • Mit Fileread:

    [autoit]


    Global $decoded, $string, $array, $i, $file

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

    $file = FileOpen(@ScriptDir & "\ansii.txt", 0)
    While 1
    $string &= FileReadLine($file)
    If @error = -1 Then ExitLoop
    Wend
    FileClose($file)
    $array = StringRegExp($string, "\d+", 3)
    For $i = 0 To UBound($array) - 2
    $decoded &= $array[$i] & ", "
    Next
    $decoded &= $array[UBound($array) - 1]
    $file = FileOpen(@ScriptDir & "\ansii_converted.txt", 1)
    FileWrite($file, $decoded)
    FileClose($file)
    MsgBox(0, "Test", $decoded)

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    Einmal editiert, zuletzt von UEZ (5. Januar 2010 um 23:56)

  • Noch kürzer:

    [autoit]


    $s = "Chr(54) & Chr(55) & Chr(53)"
    MsgBox(0, '', StringRegExpReplace($s, 'Chr\((\d.)\)( \& )*', '$1, '))

    [/autoit]

    Ist zwar am kürzesten, aber erzeugt am Ende noch ein Komma!

    Wenn die Kommas egal sind, dann ist MsgBox(0, "", StringRegExpReplace($s, '\D+', '$1, ')) noch kürzer!

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯