- Offizieller Beitrag
Die Fehlermeldung sagt doch, wo das Problem ist: $entries[$i]
Der Index $i überschreitet die Indexgröße des Arrays, liegt im Nirgendwo.
Die Fehlermeldung sagt doch, wo das Problem ist: $entries[$i]
Der Index $i überschreitet die Indexgröße des Arrays, liegt im Nirgendwo.
Hi,
vorab:
Ich habe selten ein Script gesehen, bei dem ein "Fehler" vom Programmierer erst in diesem Stadium auftaucht
Wenn ich Scripte, dann binde ich reihenweise Debug-Informationen in Form von Kontrollen (Consolewrite, Msgboxen, ab und zu mal Traces usw. ) ein.
So weiss ich jederzeit, nachdem ich auf F5 gehauen habe, was los ist und was mein Script macht / oder nicht macht.
Ist richtig dimensioniert, stimmen die Variablen(inhalte), sind die Arrays richtig ausgefüllt? Wer diese grundlegenden Informationen in seinem Programm nicht kennt, aber fleissig hunderte Zeilen "drauflosprogrammiert", braucht sich im Nachhinein nicht zu wundern...
Btw. ist das "Fehlersuchen" Sache des Programmierers! Wenn DIR "langweilig" ist, dann hast du genug Zeit, in DEINEM Script die von DIR verursachten Fehler zu finden und musst dir nicht hier im Forum andere deine Arbeit machen lassen!
Nun zum "Problem":
Woher weisst du, dass dein 3D-Array richtig ausgefüllt bzw. erstmal richtig dimensioniert ist?
Die AutoIt-Funktionen geben ALLE im Fall der Fälle einen Fehlercode
@error
[/autoit]zurück, im gesamten Script ist nicht ein einziger dieser Fehlercodes ausgewertet!
[autoit]_arraydisplay()
[/autoit]stellt nur bis 2D dar, soviel steht fest! Hast du ein "Anzeigetool" für 3D- bzw. mehrdimensionale Arrays? Ich hab eins...
[autoit]ubound()
[/autoit]hat einen 2. Parameter, welcher die Rückgabe der Größe der Dimensionierung beeinflusst!
[autoit]_arraysearch()
[/autoit]sucht auch nur in 2-dimensionalen Arrays.
Die Fehlermeldung sagt doch, wo das Problem ist: $entries[$i]
Der Index $i überschreitet die Indexgröße des Arrays, liegt im Nirgendwo.
Und wie kann das passieren? $i geht doch von 0 bis zum letzten Index.
Andy Die Arrays sind alle richtig befüllt und sämtlicher anderer Kram ist auch getestet.
Und wie kann das passieren? $i geht doch von 0 bis zum letzten Index.
Eben nicht, du adressierst ohne zu prüfen ob das Array existiert/diese Größe hat. Ich habe dein Skript nicht auseinandergepflückt. Aber glaub mir: Indexfehler sind reine schlampige Fehler. Auch wenn du meinst, das Array existiere in der Größe, solltest du das in der Verarbeitung prüfen und ein Error-Handling einbauen.
Da ich mich die ganze Zeit gefragt habe wie man darauf kam, dass das hier ein 3D Array sein soll und ichs nun auch endlich gesehn hab:
[autoit]
$key = _ArraySearch ($entries[$i], $categories[$i_1][1])
If $key Then
$val &= $entries[$i][$key][1]
Was nun? Ist $entries ein 1D Array oder ein 3D Array? Da es in der oberen Zeile zum Absturz kommt wird es wohl mehr als eine Dimension haben und du sprichst das Array an dieser Stelle falsch an. Sofern es ein 3D Array ist siehe auch die Anmerkungen von meinen Vorpostern bezüglich Einschränkungen der maximalen Dimensionen für die meisten Array Funktionen.
Hi,
ZitatAndy Die Arrays sind alle richtig befüllt und sämtlicher anderer Kram ist auch getestet.
naja, wenn alles andere getestet ist, dann liegt der "Fehler" bei AutoIt?
Was ist denn an diesen Zeilen
$key = _ArraySearch ($entries[$i], $categories[$i_1][1])
If $key Then
$val &= $entries[$i][$key][1]
EndIf
"getestet"? Schreib einfach einen validen Wert in die Variable $key und guck dir das Ergebnis an!
[autoit]$key = $i_1 ;_ArraySearch ($entries[$i], $categories[$i_1][1])
If $key Then
$val &= $entries[$i][$key][1]
EndIf
keine Fehlermeldung, also liegt das "Problem" wohl in der Funktion _arraysearch() (wohl eher nicht ^^) oder in DEINEN Parametern!
Mal abgesehen davon, dass es den "Parameter" $entries[$i] garnicht geben kann, da $entries[] 3-dimensional ist....
//EDIT
wenn für das Listview sowieso pipe-getrennte Strings verwendet werden, wieso nimmst du dieses Format nicht direkt für deine "Datenbank" als Textdatei?
NAME|VORNAME|EMAIL|bla|blub
Dann wäre das Lesen der Datei in einer Zeile erledigt, und das Füllen der Listview in 3 Zeilen.
Die Suche wäre incl. Schleife in drei Zeilen erledigt...
"teste" mal
[autoit]$key = $i_1 ;_ArraySearch ($entries[$i], $categories[$i_1][1])
;~ If $key Then
$val &= $entries[$i][$key][1]
;~ EndIf
EndIf
Next
; MsgBox (0, 0, $val)
$item1 = GUICtrlCreateListViewItem($val, $ctrl_main[2])
damit habe ich sämtliche Einträge aus einer erweiterten Datei dargestellt bekommen