Werte in Array prüfen und ändern ?

  • Hallo,

    in meinem Array stehen folgende Informationen

    [Blockierte Grafik: http://www.hasenmueller.de/files4forum/Bild-002-2013-05-29.jpg]

    Ich möchte jetzt gerne, bevor das Array die Listview befüllt, das Array abfragen.
    Am konkreten Beispiel.

    AKTIV: kann 0 oder 1 sein, wenn 1 dann ersetzen mit dem Wort "JA", wenn 0 dann "NEIN"
    DEAKTIVIERT: wenn NULL dann ersetzen mit dem Wort "NEIN", wenn ein Wert vorhanden, dann "JA"

    Wie prüfe und manipuliere ich das Array ?

    Danke

    Einmal editiert, zuletzt von HassanMullah (29. Mai 2013 um 16:32) aus folgendem Grund: Problem war das ich die 2. Dimension im Array ignoriert hatte

  • Scriptschnipsel helfen mehr als so ein Screenshot ;)
    Kommt darauf an wie dein Array aussieht. Aber im Normalfall musst du einfach nur den Wert prüfen (mit if oder switch) und ersetzen.
    So in etwa nach dem Schema:

    [autoit]

    If $array[6] = 1 Then
    $array[6] = 'JA'
    ElseIf ;...

    [/autoit]
  • Hallo Schnitzel,

    danke für die schnelle Antwort.

    Hier natürlich auch die Codeschnipsel :)

    [autoit]


    Local $SQLQuery = _MSSQL_Query($sqlCon, "select b.begleitschein_id, b.bgsnr, tr.KUERZEL, t.behoerdliche_nummer, t.NAME, b.RELEVANT, b.DEAKTIVIERT_AM, b.GELOESCHT_AM, b.STORNIERT from begleitschein b left join teilnehmer t on b.teilnehmer_id = t.teilnehmer_id left join teilnehmerrolle tr on t.teilnehmerrolle_id = tr.teilnehmerrolle_id where b.begleitschein_id = " & $Suchbegriff & ";")
    $aSQLQueryErgebnis = $SQLQuery.GetRows; Array wird befüllt
    If Not IsArray($aSQLQueryErgebnis) Then; Prüfung ob Array Daten enthält
    MsgBox(48, 'Information', 'Die Suche enthält keine Daten')
    Else
    For $i = 1 To $Spaltenanzahl ; Spalten der Listview werden mit definierten Spaltennamen bestückt
    _GUICtrlListView_InsertColumn($listview, $i, $aSpaltenNamen[$i], 50)
    Next
    _GUICtrlListView_AddArray($listview, $aSQLQueryErgebnis); Inhalt des Array wird unterhalb der Spaltennamen in die Listview eingetragen
    _ArrayDisplay($aSQLQueryErgebnis[6]); Testeintrag: hier fliegt das Script auf die Schnauze mit "==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:"
    If $aSQLQueryErgebnis[6] = 0 Then; Prüfung ob Relevant/Aktiv 0 oder 1 ist
    $aSQLQueryErgebnis[6] = "NEIN"
    Else
    $aSQLQueryErgebnis[6] = "JA"
    EndIf

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

    _ArrayDisplay($aSQLQueryErgebnis, "Das Ergebnis im Array","","","","","INDEX|" & $TabelleBGS); nur als Testausgabe gedacht

    [/autoit]


    Was mache ich denn in Zeile 10 falsch, das es mir das Script mit "==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:" wegfliegt ?

  • Was mache ich denn in Zeile 10 falsch, das es mir das Script mit "==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:" wegfliegt ?

    [autoit]


    _GUICtrlListView_AddArray($listview, $aSQLQueryErgebnis); Inhalt des Array wird unterhalb der Spaltennamen in die Listview eingetragen
    _ArrayDisplay($aSQLQueryErgebnis[6]); Testeintrag: hier fliegt das Script auf die Schnauze mit "==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:"
    If $aSQLQueryErgebnis[6] = 0 Then; Prüfung ob Relevant/Aktiv 0 oder 1 ist
    $aSQLQueryErgebnis[6] = "NEIN"
    Else
    $aSQLQueryErgebnis[6] = "JA"
    EndIf

    [/autoit]

    Du übergibst kein Array an _arraydisplay(), sondern den Wert des Arrays an Index 6. Diesen Index scheint es auch nicht zu geben, da sonst vermutlich keine derartige Fehlermeldung erscheinen würde. Dein zweiter Fehler ist im übrigen, dass du die Werte im array erst veränderst, nachdem du die alten Werte ins Listview eingefügt hast, das war ja denke ich nicht der Sinn der Sache oder?


    EDIT:

    Ahja und deinem Screenshot nach hast du ein 2D Array, daher wird dein Script natürlich immer dann abstürzen, wenn du es nicht korrekt ansprichst. 2D arrays werden immer so genutzt:

    [autoit]


    $a2D[$zeile][$spalte] = "..."

    [/autoit]
  • misterspeed

    Ich schreibe die Listview mit den "alten" Werten, manipuliere dann und möchte dann "zum Test" die neuen Werte mit _ArrayDisplay ausgeben. So kann ich optisch kurz vergleichen, ob die Lösung zieht.
    Wenn ich z.B. mit

    [autoit]

    _ArrayDisplay($aSQLQueryErgebnis)

    [/autoit]


    mit folgendes Ergebnis
    [Blockierte Grafik: http://www.hasenmueller.de/files4forum/Bild-003-2013-05-29.jpg]
    ausgeben lasse, mit welche Befehl kann ich dann z.B. die rot umrandete Zelle abfragen ?
    Selbst mein Consolewrite fliegt auf die Nase

  • Steht in meinem Edit. Du hast ein 2D Array, also musst du auch angeben wo im Array der Wert steht, den du ändern willst, also welche Zeile und welche Spalte du im Array ändern willst, bei dir eben Zeile 0 und Spalte 6. Bei einem 1D Array müsstest du nur die Zeile angeben, da es eben dort nur eine Spalte gibt. Wenn du bei einem 2D Array jetzt nur die Zeile 6 angibst, dann kann Autoit nicht wissen, welchen Wert aus welcher Spalte du ändern willst, davon ab hat dein Array auch keine 6 Zeilen, daher eben der Absturz.

    Wenns dir immernoch nicht klar ist wie Arrays aufgebaut sind und wie man sie verwendet schau dir bitte das Tutorial von BugFix an, du kommst ohne dieses Grundwissen jedenfalls nicht wirklich weiter: http://www.bug-fix.info/array_tut.htm

    Einmal editiert, zuletzt von misterspeed (29. Mai 2013 um 13:07)