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

IF Query on Dim String

Anonymous
Nicht anwendbar
Hallo.
Kann mir jemand helfen?
Ich versuche ein Test auf ein String parameter zu machen

Hier habe ich den Parameters in einen DIM array gespeichert:


DIM RobVars[2][7]
RobVars[1][1]=R1_Model
RobVars[1][2]=R1_Gravitor
RobVars[1][3]=R1_Pitside
RobVars[1][4]=R1_Distance
RobVars[1][5]=R1_SlabLength
RobVars[1][6]=R1_RRefX
RobVars[1][7]=R1_RRefY

RobVars[2][1]=R2_Model
RobVars[2][2]=R2_Gravitor
RobVars[2][3]=R2_Pitside
RobVars[2][4]=R2_Distance
RobVars[2][5]=R2_SlabLength
RobVars[2][6]=R2_RRefX
RobVars[2][7]=R2_RRefY


Die Parameter R1_Pitside ( RobVars[1][3]) ist ein text Parameter, wahlliste:
VALUES "R1_Pitside","Right","Left"

Wenn ich durch ein GOSUB call versuche ein test auf diesen Array variable zu machen bekomme ich den fehler:
"Numerische Variable erorderlich"

Gosub Call: (vereinfacht)


"Robots":
For n= 1 TO 2

Print RobVars[n][3],"\n"
IF RobVars[n][3] = "Right" THEN
!Do something
ENDIF
next n
return



Das Print output ist ein String "Right", also müsste funktionieren.

Was habe ich falsch gemacht?

Vielen Dank für Ihre Hilfe 🙂

Freundliche Grüsse
5 ANTWORTEN 5
Anonymous
Nicht anwendbar
Prüfe folgendes:
- Hast Du eine END vor den Subroutinen
- Verwendest Du CALL im Script? Das ist nicht zulässig, da ein reservierter Befehl
- In welchem Script arbeitest Du? Im Master-Script darfst Du kein END vor den Subroutinen verwenden, dafür benötigst Du aber eine GOTO "Masterend"
- hast Du wirklich alle Parameter als STRING angelegt, die Du in Deinen Zuweisungen verwerndest?

Ich bekomme mit Deinem Script im 2D-Script keinen Fehler.

Hier habe ich den Parameters in einen DIM array gespeichert:

Du meinst: Du hast die Parameter in Arrays gespeichert (Parameters ist ein Befehl)?
Anonymous
Nicht anwendbar
Hallo Jochen,
Danke für deine Rückmeldung.
1) Ja, Ich habe ein END vor dem Subroutine
2)Nein, Call verwende ich nicht
3)Ich arbeite in 3D Script
4)Die Parameters sind nicht alle Strings.. can dies das problem sein? Muss alle eintrage einen Array in GDL die selber typ sein (Enweder strings oder numerisch, aber nicht gemischt?)

5) Ja, Ich möchte mehrere gleichige teilen "Robots" in diesem Objekt hinzufügen in verschiedenen benutzer definierten positionen. "R1_xxx" parameters sind die für den ersten Robot, "R2_xxx" sind für den 2ten usw.
Um den Script grösse etwas zu veringern, möchte dies mit ein Array und subroutine lösen. Sonst muss ich die konditionen (die immer gleiche sind) x mal kopieren für jeden roboter.

.... Ich hoffe das meine erklärung so verständlich ist 🙂

Vielen Dank für deine Hilfe
mfg
Brent
Anonymous
Nicht anwendbar
Array-Variablen können in GDL gemischt sein vom TYp her.
Das wird zwar nicht empfohlen von GS, funktioniert aber.
Es kann jetzt sein, wenn Du in einer Schleife gemischte Arrays abfragt,
dass der Interpreter beim ersten Mal annimt, dass die Arrayvarible immer den selben Typ hat,
und dann einen Fehler ausgibst, wenn der Typ iinerhalb der Schleife wechselt.
Versuche es mal mit einer Fallunterscheidung innerhalb der Schleife, indem Du mit
VARTYPE den Typ abfragst. Das könnte funktionieren, bin mir aber nicht sicher.
Frank Beister
Moderator
GS hat mir da mal ganz eindeutig mitgeteilt, dass es eher ein bug als ein feature ist, dass gemischte Typen innerhalb eines Skriptes keinen Prüffehler des Skripts ergibt. Unterschiedliche Typen sollten in unterschiedliche Arrays abgelegt werden, was in der Regel ja auch nicht das Problem ist. Da legt man halt 2 an.
Die Aussage von GS bedeutet, dass das Skript mit 22 funktioniert, vielleicht aber kommentarlos mit 23 nicht mehr.
bim author since 1994 | bim manager since 2018 | author of selfGDL.de | openGDL | skewed archicad user hall of fame | author of bim-all-doors.gsm
Anonymous
Nicht anwendbar
Vielen Dank für eure Hilfe
Ich habe 2 Arrays eingerichtet, eine für strings und eine für numerische variablen.
Funktioniert einwandfreie.
Gruss
Brent