array Problem

  • Hi,
    ich habe ein 2 dimensionales Array mit max 11Zeilen. MittelsIniReadSection befülle ich es. Es sind dann z.B. 6 Elemente enthalten. [0][0] = 7, [1][0] = Abfrage1 [1][1] = Wert1. Wenn ich nun einen weiteren wert, also den 8. hinzufügen möchte, dann bekomme ich die Meldung "Error: Array variable has incorrect number of subscripts or subscripts dimension range exceeded". Ich habe es schon mit _ArrayInsert und _ArrayAdd versucht, doch bis auf die Löschung und das erzeugen eines eindimensionalen Arrays ist nichts bei raus gekommen. Nach meinem Verständnis müsste ich den Index erhöhen und den entspr. Wert hinzufügen = Array[0][0] = 8 und Array[8][1]. Klappt aber net
    Idee?

    Danke

    • Offizieller Beitrag

    Versuch mal das :

    [autoit]

    Redim $Arrayname[ubound($Arrayname)+1][ubound($Arrayname,2)]
    $Arrayname[0][0] = Ubound($Arrayname)-1

    [/autoit]


    Einfach $Arrayname gegen deinen ArrayVariablennamen tauschen .Das Array wird um einen Eintrag erweitert und der Index um 1 erhöht.
    Alternativ dazu kannst du auch die Funktion _Array2DInsert von BugFix nehmen https://autoit.de/index.php?page…21161#post21161.

    Edit: Um das so entstandene Arrayfeld zu befüllen kannst du so Vorgehen :

    [autoit]

    $Arrayname[Ubound($Arrayname)-1][0] = "Hier kommst der Wert1"
    $Arrayname[Ubound($Arrayname)-1][1] = "Hier kommst der Wert2"

    [/autoit]


    oder so :

    [autoit]

    $Arrayname[$Arrayname[0][0]][0] = "Hier kommst der Wert1"
    $Arrayname[$Arrayname[0][0]][1] = "Hier kommst der Wert2"

    [/autoit]


    Ich bin bei den beiden Beispielen von 2 Suelementen in deinem Array ausgegangen

  • Mh, ich versteh deine Beispiele, aber irgenwie funktioniert es nicht auf meins angewandt. Hier mal die wichtigsten Zeilen:
    dies steht im case1 der beim Erststart ausgeführt wird

    [autoit]


    $aVerlauf = IniReadSection($file_option,"Sektion2")
    $i = $aVerlauf[0][0] +1

    [/autoit]


    das sieht laut _ArrayDisplay auch gut aus
    case2 wird dann wärend des Programablaufes ausgeführt und soll die Eingabe dem array hinzufügen bzw. wenn das letzte Feld erreicht wurde von vorne beginnen.

    [autoit]


    $aVerlauf[$b][1] = $input

    [/autoit]


    und so wie ich es von deinem abgeleitet habe

    [autoit]


    $aVerlauf[UBound($aVerlauf)-1][$b] = $input
    If $b = 9 Then
    $b = 1
    Else
    $b = $b + 1
    EndIf

    [/autoit]
  • Erhöt deshalb, weil ich dann im case2 ein weiteres Feld fülle. Und das was aus dem Zusammenhang ist, ist ein Teil von case2. ;)
    Ansich läuft in diesem Teil nichts anderes als die ini-Datei auslesen und in ein Array schreiben. Im zweiten wird dann auf dieses Array zugegriffen und in ein Menü im Tray geschrieben. Thats it. Bis jetzt wurde halt vorhandene Werte im Array überschrieben und deshalb wollte ich die Arrayanzahl auslesen und wenn dieses noch nicht voll ist, einen weiteren Eintrag hinzufügen.

    PS: ich kann vorhandene Werte ändern, aber das hinzufügen endete immer im obigen Fehler.

    • Offizieller Beitrag

    Du mußt das Array Redimensionieren , damit du einen Wert reinschreiben kannst , siehe 1. Post Beispiel Redim . Es nutz dir nichts wenn du nur den Index um 1 erhöst. Da ich bis jetzt noch keinen Code von dir geshen habe, wo du das Array Redimensionierst kann ich dir auch nicht helfen. Da dein Code scheinbar ein großes Geheimnis ist und ich meine Hellseherausbildung mit 6 abgeschlossen habe mußt du selber weiterwursteln.

  • Der von dir gezeigte Auschnitt funktioniert ;) Er übergibt $i die Arrayanzahl und erhöht diese für den Eintrag um 1 ;). Ich schau mir mal ubound und redim an.

    edit:
    Sonst beschreibt mir doch bitte wie ihre eine .ini in ein Array einlest, einen Wert hinzufügt, beim erreichen des Limits von 10 Einträgen von vorne beginnt und die alten behält und auslest. Thx

    Einmal editiert, zuletzt von sunghost (21. Januar 2009 um 17:16)

    • Offizieller Beitrag

    Das Redimensionieren des Array kannst du dir eigentlich sparen . Schreibe den neuen Eintrag in die INI Datei und lese sie mittel IniReadSelection wieder aus .

    Zitat

    Sonst beschreibt mir doch bitte wie ihre eine .ini in ein Array einlest, einen Wert hinzufügt, beim erreichen des Limits von 10 Einträgen von vorne beginnt und die alten behält und auslest. Thx

    Was meinst du damit drück dich mal klarer aus . Was altes willst du behalten ? Den Eintrag ? Die INI? Und was willst du auslesen ?