abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 
abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 
BIM Coordinator Program (INT) April 22, 2024
Gehen Sie den nächsten Schritt Ihrer Karriere als zertifizierter Graphisoft BIM Koordinator!
Programmierung
Alles über Programmierung in GDL und Python

Tabellenwerte (Excel) im GDL als Parameter

graber
Booster
Hallo,

Ich möchte Excel-Daten (gerne auch aus Excel exportiert via csv/txt...) über GDL in ein Objekt einlesen. Am Feinsten als "Ansammlungswerte" eines Parameters in entsprechender tabellarischer Form.
Kann mir hier evtl. unter die Arme greifen (oder hat gar schon sowas programmiert...)?

Vielen Dank schon mal.
11 ANTWORTEN 11
graber
Booster
So, bin am Basteln:
Wenn ich es richtig sehe, sollt es so irgendwie möglich sein:
https://www.selfgdl.de/addons/data-io/input/
Allerdings: Wie kann ich ohne datensatzID in eine neue/bestimmte Zeile springen?

Banal stelle ich mir vor:

For zeile=1 to maxzeile
For spalte=1 to maxspalte
input(ch,zeile,spalte,sys[zeile][spalte])
next spalte
next zeile
Anonymous
Nicht anwendbar
Hier ein Test-Beispiel (vielleicht hilft das weiter):

	filename = "test_x.txt"	
ch = OPEN( "DATA" , filename , "MODE=RO, SEPARATOR='|', LIBRARY" )

DIM cage_infos [][]
ay = 1
searchfield = "test*material_info"
nr = INPUT(ch, searchfield, 1, cage_infos[ay][1], cage_infos[ay][2], cage_infos[ay][3], cage_infos[ay][4], cage_infos[ay][5], cage_infos[ay][6],
cage_infos[ay][7], cage_infos[ay][8], cage_infos[ay][9], cage_infos[ay][10], cage_infos[ay][11], cage_infos[ay][12],
cage_infos[ay][13], cage_infos[ay][14], cage_infos[ay][15], cage_infos[ay][16] )

TEXT2 ay, 0.1 * 1, searchfield
TEXT2 ay, -0.1 * 0, cage_infos[ay][1]
TEXT2 ay, -0.1 * 1, cage_infos[ay][2]
TEXT2 ay, -0.1 * 2, cage_infos[ay][3]
TEXT2 ay, -0.1 * 3, cage_infos[ay][4]
TEXT2 ay, -0.1 * 4, cage_infos[ay][5]
TEXT2 ay, -0.1 * 5, cage_infos[ay][6]
TEXT2 ay, -0.1 * 6, cage_infos[ay][7]
TEXT2 ay, -0.1 * 7, cage_infos[ay][8]
TEXT2 ay, -0.1 * 8, cage_infos[ay][9]
TEXT2 ay, -0.1 * 9, cage_infos[ay][10]
TEXT2 ay, -0.1 * 10, cage_infos[ay][11]
TEXT2 ay, -0.1 * 11, cage_infos[ay][12]
TEXT2 ay, -0.1 * 12, cage_infos[ay][13]
TEXT2 ay, -0.1 * 13, cage_infos[ay][14]
TEXT2 ay, -0.1 * 14, cage_infos[ay][15]
TEXT2 ay, -0.1 * 15, cage_infos[ay][16]

FOR ay = 2 TO 4

searchfield = "test*cage_infos[" + STR(ay-1,1,0) + "]"
nr = INPUT(ch, searchfield, 1, cage_infos[ay][1], cage_infos[ay][2], cage_infos[ay][3], cage_infos[ay][4], cage_infos[ay][5], cage_infos[ay][6],
cage_infos[ay][7], cage_infos[ay][8], cage_infos[ay][9], cage_infos[ay][10], cage_infos[ay][11], cage_infos[ay][12],
cage_infos[ay][13], cage_infos[ay][14], cage_infos[ay][15], cage_infos[ay][16] )

TEXT2 ay, 0.1 * 1, searchfield
TEXT2 ay, -0.1 * 0, cage_infos[ay][1]
TEXT2 ay, -0.1 * 1, cage_infos[ay][2]
TEXT2 ay, -0.1 * 2, cage_infos[ay][3]
TEXT2 ay, -0.1 * 3, cage_infos[ay][4]
TEXT2 ay, -0.1 * 4, cage_infos[ay][5]
TEXT2 ay, -0.1 * 5, cage_infos[ay][6]
TEXT2 ay, -0.1 * 6, cage_infos[ay][7]
TEXT2 ay, -0.1 * 7, cage_infos[ay][8]
TEXT2 ay, -0.1 * 8, cage_infos[ay][9]
TEXT2 ay, -0.1 * 9, cage_infos[ay][10]
TEXT2 ay, -0.1 * 10, cage_infos[ay][11]
TEXT2 ay, -0.1 * 11, cage_infos[ay][12]
TEXT2 ay, -0.1 * 12, cage_infos[ay][13]
TEXT2 ay, -0.1 * 13, cage_infos[ay][14]
TEXT2 ay, -0.1 * 14, cage_infos[ay][15]
TEXT2 ay, -0.1 * 15, cage_infos[ay][16]

NEXT ay


close ch
graber
Booster
erste Frage dazu: In welches Script kommt der Code?
Wenn ich den befehl open um dialog erweitere, so scheint dies nur im UI_Skript zu funktionieren (leider aber auch nicht immer...)
graber
Booster
Hab bis dato folgendes:
UI_BUTTON UI_FUNCTION, "Import", 10, 30, 50, 20, 11
im UI-Script

If GLOB_UI_BUTTON_ID=11 then

dat_sep='\t'
ch=OPEN("DATA","test.txt","MODE=RO,SEPARATOR=dat_sep, DIALOG")

FOR i=1 TO zeile
FOR j=1 TO spalte
nr=INPUT(ch,i,j,inh)
parameters feld[i][j]=inh
feld[i][j]=inh
NEXT j
NEXT i
CLOSE ch


Bedeutet: ich muß in der 1.Spalte die jeweilge Zeilennummer haben

Aber leider funktionierts trotzdem nicht:

Habe ich zweites Script im UI-Script, dann funktioniert die Zuweisung mittels parameters nicht. Setze ich es ins Master dann liest er gleich gar nix aus.
Und das Dialog-Menü wird sowieso nicht (bzw. anfangs alle heiligen Zeiten?) aufgerufen.
Anonymous
Nicht anwendbar
erste Frage dazu: In welches Script kommt der Code?

Ich habe den im 2D-Script, weil ich das zum Testen als Text ausgegeben hatte.
Es geht aber auch Master. Parameter-Script und UI würde ich nicht empfehlen).
Wenn ich den befehl open um dialog erweitere, so scheint dies nur im UI_Skript zu funktionieren (leider aber auch nicht immer...)

Ich meine mich zu erinnern, dass das DATA Addon mit DILAOG nicht korrekt funktioniert, bin mir aber nicht sicher.
Anonymous
Nicht anwendbar
Im UI-Script kannst Du nicht mit Parameters arbeiten.
Bau doch ertsmal Dein Script ohne User Interface fertig und wenn es funktioniert,
schreibst Du das UI-Script dazu.

Was sind "alle heiligen Zeiten" ? 🙂 Erklär mal .....
graber
Booster
@heilige Zeiten: der "Dialog"-Dialog poppt nur bei ca. 1 von 20 Versuchen (jedenfalls gaaaanz selten) auf, ansonsten werden zwar die Daten eingelesen, aber mit der zuletzt eingestellten Datei.

@Dialog mit Data: Gibt's eine "einfache", "generelle" Methode im UI-Script eine Datei (also mit vollem Pfad) auswählen zu lassen?
Anonymous
Nicht anwendbar
Versuch es mal mit dem Filemanager-Addon:
https://www.selfgdl.de/addons/filemanager-io/input-3/
(hat aber auch so seine Tücken)
graber
Booster
Folgende Porblem habe ich mittlerweile eruiert:

1.) DIALOG funktioniert nur dann und wann... -> am besten ausweichen auf LIBRARY
2.) Die doppelte Schleife dürfte das Addon Data nicht packen ->
Alle Spalten direkt abfragen (Spaltenanzahl ist fixiert):
nr=INPUT(ch,searchfield,1,feld[i][1],feld[i][2],feld[i][3],feld[i][4],feld[i][5])

Aber 3.) -konnte ich bis dato nicht lösen- :
parameters feld[i][1]=feld[i][1],feld[i][2]=feld[i][2],feld[i][3]=feld[i][3],feld[i][4]=feld[i][4],feld[i][5]=feld[i][5]
bringt das masterscript zum absturz? (Feld ist eine Ansammlung von Strings)
Einschreiben und zertifiziert werden!