array problem, datei auslesen und in array schreiben.

  • huhu...

    vorweg, ich bin neu und muss mich erstmal an euren umgang gewöhnen,... jedes forum ist da anders...

    ähm.. ja ^^also ich bin auch allgemein neu in der programmierung mit autoit... ^^ deswegen könnten die probleme die ich habe n bisschen anforderungslos sein,... ^^ ich hoffe ma man kann mir trotzdem helfen.. :D

    vorweg erstmal der code:

    [autoit]


    ; Script Start - Add your code below here
    #Include <Array.au3>
    $file = FileOpen("kiste_map.txt", 0)
    local $map[11][12]
    ; 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 1 character at a time until the EOF is reached
    $i = 0
    $o = 1
    While 1
    $chars = FileRead($file, 1)
    If @error = -1 Then ExitLoop
    $i = $i + 1
    If $i = 12 Then $o = $o + 1
    If $i = 12 Then $i = 1

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

    $map[$i][$o] = $chars
    Wend
    _ArrayDisplay($map, "Array")
    FileClose($file)

    [/autoit]

    und hier die fehler meldung die unten im SciTE4AutoIt3 steht... des is iwie das programm name... ^^

    Zitat

    >"C:\Program Files\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Users\Benutzername\Desktop\kiste_map auslesen.au3"
    C:\Users\username\Desktop\kiste_map auslesen.au3 (31) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    $map[$i][$o] = $chars
    ^ ERROR
    >Exit code: 1 Time: 0.315


    Die Datei: kiste_map.txt
    ist auf dem desktop und vorhanden... ich hatte das ganze vorher mit nem normalem array probiert, also local $map[132]

    da hats funktioniert...

    mein ziel ists, dass ich die "map" auslese das is immer entweder ne 0 oder ne 1 ... und die soll für $i und $o also 1 bis 11 und 1 bis 12 in das array geschrieben werden. daraus möchte ich dann die information für ein weiteres teilprogramm, was ich dann probieren möchte, erhalten wo etwas ist und wo nichts ist.

    ich hoffe es ist rüber gekommen was ich will ^^ falls nicht bitte nachhaken.. danke :)

    Edit: ich glaube es ist das gleiche wie dort:
    [ offen ] multidimensionale arrays
    oder? ^^

    2 Mal editiert, zuletzt von revetr (28. Januar 2010 um 20:58)

  • Der Fehler kommt daher das dein Array zu klein ist. Du solltest es mit ReDim redimensionieren

    Spoiler anzeigen
    [autoit]

    ; Script Start - Add your code below here
    #Include <Array.au3>
    $file = FileOpen("kiste_map.txt", 0)
    local $map[11][12]
    ; 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 1 character at a time until the EOF is reached
    $i = 0
    $o = 1
    While 1
    $chars = FileRead($file, 1)
    If @error = -1 Then ExitLoop
    $i = $i + 1
    If $i = 12 Then $o = $o + 1
    If $i = 12 Then $i = 1
    ;Redimensioniere Array:
    Redim $map[$i+1][$o+1]

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

    $map[$i][$o] = $chars
    Wend
    _ArrayDisplay($map, "Array")
    FileClose($file)

    [/autoit]

    Ähh aber deinen Code versteh ich net ganz... Wenn dein $i wieder auf 1 zurückgesetzt wird dann werden ja die alten Inhalte wieder überschrieben?!

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

    Einmal editiert, zuletzt von FireFlyer (6. Dezember 2009 um 00:23)

  • Der Fehler kommt daher das dein Array zu klein ist.

    AHHH !! das ist es.. ^^ *kurz ausprobier*

    mit local $map[12][13]

    läufts... stimmt,... die auflösung liegt dadrin, weil ich die 0er reihe weggelassen habe... :D:D



    Ähh aber deinen Code versteh ich net ganz... Wenn dein $i wieder auf 1 zurückgesetzt wird dann werden ja die alten Inhalte wieder überschrieben?!


    und das mit dem $i zurück setzten wäre so, aber:

    If $i = 12 Then $o = $o + 1
    If $i = 12 Then $i = 1

    er rutscht somit einmal wieder nach links und andermal eine zeile runter, soll ich dir mal die map datei reineditieren, dann kannste dir das ansehen, dann weißte was raus kommt ;)

    das ReDim funktioniert das dann so ähnlich wie Function _ArrayAdd ?

  • Naja wenn du Dim $array[1] deklarierst dann kannst du mit ReDim $array[2] oder ReDim $array[3210] diese deklaration ändern ohne den alten inhalt zu löschen.

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • man bekommt ja mit _ArrayDisplay($map, "Array") ein fenster ne? nur um sich die arrays mal grafisch und bildlich darzustellen, werden die mit ReDim hinzugefügten felder dann rechts und unten dazugefügt?

  • öhm auch wenn das hier schon gelöst ist aber wenn dus brauchst würde es dafür auch schon eine funktion geben ;)

    [autoit]

    #include <Array.au3>
    #include <File.au3>
    Global $filearray

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

    _FileReadToArray(FileOpenDialog("Wähle die Datei", "", "Alle Dateien (*.*)"), $filearray)
    _ArrayDisplay($filearray)

    [/autoit]
  • Schnitzel:
    Nicht ganz. Er wollte daraus ein 2D Array erstellen.
    $Array[11][12] ( oder [12][11] ? is ja auch egal ) Auf jeden Fall sollte der Array nach dieser Strukur aufgebaut werden (wenn ich den Startpost nicht falsch verstanden habe)

    0 1 0 1 0 1 0 0 0 1 1 1
    1 1 1 0 1 0 0 1 1 0 1 1
    0 1 0 0 1 0 1 1 0 1 0 1
    0 1 0 1 0 1 0 0 0 1 1 1
    1 1 1 0 1 0 0 1 1 0 1 1
    0 1 0 0 1 0 1 1 0 1 0 1
    0 1 0 1 0 1 0 0 0 1 1 1
    1 1 1 0 1 0 0 1 1 0 1 1
    0 1 0 0 1 0 1 1 0 1 0 1
    0 1 0 1 0 1 0 0 0 1 1 1
    1 1 1 0 1 0 0 1 1 0 1 1

    Aber du hast schon recht. Recht einfach würde das hiermit gehen
    https://autoit.de/index.php?page…26160#post26160

    FileReadToArray2D

    Ich liebe die UDF's von Bugfix :thumbup: