| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Zusammengesetzte Variablennamen ? (1236 mal gelesen)
|
Gerd_Ecke Mitglied Bergbauingenieur
Beiträge: 141 Registriert: 28.08.2002 Civil 3D 2020, GeoCAD BricsCAD 18
|
erstellt am: 04. Jul. 2014 10:01 <-- editieren / zitieren --> Unities abgeben:
Hallo Ihr Wissenden Ich habe Variablen im Stile von Hoehe1, Hoehe2 , Hoehe3. Und eine Laufvariable Index. Wie geht (setq (strcat "Hoehe" (itoa Index)) 152.88) ? will also den Variablennamen zusammensetzen und der Variable dann etwas zuweisen. MfG GE Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 04. Jul. 2014 10:14 <-- editieren / zitieren --> Unities abgeben: Nur für Gerd_Ecke
setq Q Q=Quote=nicht evaluieren set ist die gesuchte Funktion: (progn (setq n 1) (repeat 4 (terpri) (princ(set (read (strcat "Hoehe" (rtos n 2 0))) 152.88)) (setq n (1+ n)) ) ) Aber immer schön sicherstellen das die "Namen" auch für symbole geeignet sind (snvalid und extnames) ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3329 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 04. Jul. 2014 10:19 <-- editieren / zitieren --> Unities abgeben: Nur für Gerd_Ecke
Hi, oder diese Variante: Code: (setq i '("1" "2" "3")) (mapcar '(lambda (x) (set (read (strcat "Hoehe" x)) 152.88) ) i )
Wobei eine Variable, der eine Liste mit den Höhen zugewiesen wird, eigentlich viel besser und flexibler wäre... Gruß CADchup ------------------ CADmaro.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Gerd_Ecke Mitglied Bergbauingenieur
Beiträge: 141 Registriert: 28.08.2002 Civil 3D 2020, GeoCAD BricsCAD 18
|
erstellt am: 04. Jul. 2014 10:25 <-- editieren / zitieren --> Unities abgeben:
|
neurosis Mitglied dipl.ing.
Beiträge: 222 Registriert: 22.08.2006
|
erstellt am: 04. Jul. 2014 11:14 <-- editieren / zitieren --> Unities abgeben: Nur für Gerd_Ecke
moin, zum thema mit der liste von cadchup aufzunehmen: schaffe dir zum beispiel eine solche liste Code: (setq lst (list (cons 'HOEHE1 10.0) (cons 'HOEHE2 20.0) (cons 'HOEHE3 nil)))
bzw., wenn alle hoehen einen wert haben sollen, Code: (setq lst (list (cons 'HOEHE1 10.0) (cons 'HOEHE2 20.0) (cons 'HOEHE3 0.0)))
werteabfrage fuer HOEHE2 z.b. so:
Code: (cdr (assoc 'HOEHE2 lst)) oder (cdr (nth 1 lst))
wert von HOEHE2 der variablen hoehe2 zuweisen z.b. so:
Code: (set (car (nth 1 lst)) (cdr (nth 1 lst)))
gruss marco ------------------ Marco Heuer www.arc-aachen.de Airport Office Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3329 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 04. Jul. 2014 11:29 <-- editieren / zitieren --> Unities abgeben: Nur für Gerd_Ecke
Hi marco, Variablen zusammenbasteln macht man i.d.R. ja nur, wenn die Anzahl unbekannt ist, insofern müsste man bei deinem Vorschlag auch mit set arbeiten müssen. Ich dachte eher an eine Liste wie diese (setq hoehen '(152.88 nil 155.22 156.20 nil nil)) Bei Abarbeitung der Liste über beispielsweise nth kann dann mit einer simplen Prüfung herausgefunden werden, ob an der jeweiligen Stelle ein Wert gegeben ist, und weitergearbeitet werden soll. Einfaches Beispiel: (if (nth 0 hoehen)(Machwas)) Gruß CADchup ------------------ CADmaro.de [Diese Nachricht wurde von CADchup am 04. Jul. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neurosis Mitglied dipl.ing.
Beiträge: 222 Registriert: 22.08.2006
|
erstellt am: 04. Jul. 2014 12:04 <-- editieren / zitieren --> Unities abgeben: Nur für Gerd_Ecke
hallo cadchup, ich gebe dir vollkommen recht, dass man das am einfachsten so machen kann. mein ansinnen war zu zeigen, wie man die struktur der liste flexibler gestalten kann. es ist ja leider nichts ueber den input der daten und was spaeter damit gemacht werden soll geschrieben worden. z.b. wenn es nicht nur hoehendaten, sondern auch zugehoerige breiten daten geben sollte, koennte man eine liste wie folgt erstellen:
Code:
(setq lst (list (cons 'H (list (cons 'H1 1.0) (cons 'H2 2.0))) (cons 'B (list (cons 'B1 1.0) (cons 'B2 2.0)))))
oder Code:
(setq lst (list (cons 'BT1 (list (cons 'H1 1.0) (cons 'B1 2.0))) (cons 'BT2 (list (cons 'H2 1.0) (cons 'B2 2.0)))))
ueber setter und getter funktionen kann man dann die liste flexibel mit unterschiedlicher datentiefe aufbauen, aendern und auf die werte zugreifen. gruss marco ------------------ Marco Heuer www.arc-aachen.de Airport Office Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1356 Registriert: 11.01.2006 WIN 10 ACAD 2022
|
erstellt am: 07. Jul. 2014 10:25 <-- editieren / zitieren --> Unities abgeben: Nur für Gerd_Ecke
Hallo Gerd, wenn du nicht weist wieviele Daten du speichern musst ist eine Liste sicher die beste Lösung. Hier mal ein Vorschlag wie du mit solchen Listen beliebig viele Daten mit einem Namen speichern kannst.
Code: (defun set_varlist (liste name wert) (if (assoc name liste) (subst (list name wert) (assoc name liste) liste) (cons (list name wert) liste) ) )(defun get_varlist (liste name) (cadr (assoc name liste)) ) ;;; Beispiel (setq x-list (set_varlist x-list "xyz" 123)) (setq x-list (set_varlist x-list "abc" '("abc" 456 "def" 789))) (get_varlist x-list "abc")
Gewöhne dich auch bitte mal daran nicht für alles eine Variable zu verwenden, das brauchst du nicht. Wenn du im Beispiel den Wert von "xyz" zum Rechnen brauchst, kannst du den Ausdruck (get_varlist x-list "xyz") direkt in eine Formel einbauen. Du musst den Rückgabewert nicht erst in einer Variablen speichern. Schon gar nicht wen du nicht weist wie viele Variablen du brauchst. Stell dir mal vor du möchtest Attribute von Blöcken auswerten und du hast 100 Blockeinfügungen mit je 5 Attributen. Wenn du dafür 500 Variablen füttern möchtest kommst du sicher auch auf den Gedanken dass das nicht das Gelbe vom Ei ist. Aber allen nach und nach. Probier mal die beiden Funktionen aus, das hilft sicher. ------------------ Geht nicht, gibts nicht Gruß Andreas http://kraus-cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |