abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 
abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 
Programmierung
Alles über Programmierung in GDL und Python

Dynamischer Array Fehlermeldung

Anonymous
Nicht anwendbar
Hallo zusammen,

ich bekomme ich eine Fehlermeldung die wie folgt lautet:

Nicht initialisiertes Datenfeldelement bei Index: [1][1] bei Zeile XY im 2D-Script der Datei XY.


bei folgendem Code (Der Code ist lediglich zu Testzwecke ohne viel Sinn):


dim _Array[][]

!_Array[1][1] = 0
!_Array[1][2] = 1
_Array[2][1] = 0
_Array[2][2] = 3

_ArrayRows = VARDIM1 (_Array)
_ArrayCols = VARDIM2 (_Array)

print _Array


Sobald ich die Felder [1][1] und [1][2] mit Werten fülle, verschwindet die Fehlermeldung. Felder in einem Array in GDL, welche keine zugeordneten Werte haben, sind doch eigentlich mit 0 definiert, oder etwa nicht? Wieso diese Fehlermeldung? Das Objekt funktioniert weiter, es ist allerdings sehr nervig mit dieser Meldung.
5 ANTWORTEN 5
Anonymous
Nicht anwendbar
Seit etlichen ArchiCAD-Versionen müssen Variablen in GDL initialisiert werden.
Das gilt auch für Arrays.
Willst Du die Fehlermeldung weghaben, musst Du das tun.
Die Arraywerte sind zwar automatisch Null, aber trotzdem nicht initialisiert.
Ich mache das Initialisieren meist mit einer Schleife, falls nicht sämtliche Werte sowieso woanders definiert werden.
Anonymous
Nicht anwendbar
Na ja, scheint wohl so zu sein. Sinn macht das aber nicht wirklich.
Wie du schon schreibst, Variablen müssen initialisiert werden. Das hätte ich durch die automatische Vergabe des Wertes 0 eigentlich vermutet. Da dies so nicht der Fall ist, sind Arrays in GDL eigentlich nicht wirklich dynamisch. Sei's drum, mit kleinen Workarounds klappt es ja trotzdem. Vielen Dank für die schnelle Antwort!! Habe so zumindest die Fehlermeldung wegbekommen 🙂
Hmooslechner
Moderator
@ Jochen: mit welcher Schleife initialisiert man ein Datenfeld richtig? (Ich bin zu blöd dazu.)


	

dim kuko[][]


.....

for i = 1 to counter

kuko[i][1] = get (1) !y
kuko[i][2] = get (1) !y
kuko[i][3] = ku[i][5] !z
next i
.....




Ich bekomm die Fehlermeldung für die Zeile kuko[3] = ku[5] !z

Es kann also entweder kuko[3] oder ku[5] betreffen. Aber wie?? Und was muss ich genau tun??
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Anonymous
Nicht anwendbar
Initialisieren heisst ja nur, dass Du einen Grundwert vorgibst, welcher später im Script dynamisch geändert werden kann.
eps initialisierst Du z.B. als : eps = 0.00001
Bei einem Array kannst Du schreiben:
DIM arr[][]
FOR i = 1 TO 5
FOR j I 1 TO 10
arr[i][j] = 0
NEXT j
NEXT i

Bei Deinem Beispiel nehme ich an, dass ku[5]
nicht initialisiert wurde.
Dazu machst Du es wie oben:

FOR i = 1 TO counter
FOR j I 1 TO 5
ku[i][j] = 0
NEXT j
NEXT i

Was Du gemacht hast ist ja an sich keine Initialisierung, sondern schon ein endgültige oder dynamische Wertezuweisung.
Wenn Du diese lückenlos machst, brauchst Du im Prinzip keine Initialisierung.
Nur wenn z.B. ku[1][1] nicht initialisiert wurde, kann es bei höheren Indizes oder VARDIMs eine Fehlermeldung geben.
Hmooslechner
Moderator
Danke, ich bin innerlich schon ganz verrückt geworden... na ja - fast. Nun gibts endlich keine Fehlermeldungen mehr im Script. Es (die Bezierkurven-Polygon-Tube-Sache) funktioniert. Nun kann ich mich an die Aufhübschung der Längenschnitt-Darstellungen machen.
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia