Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Zusammengesetzte Variablennamen ?

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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 ? (1237 mal gelesen)
Gerd_Ecke
Mitglied
Bergbauingenieur


Sehen Sie sich das Profil von Gerd_Ecke an!   Senden Sie eine Private Message an Gerd_Ecke  Schreiben Sie einen Gästebucheintrag für Gerd_Ecke

Beiträge: 141
Registriert: 28.08.2002

Civil 3D 2020, GeoCAD
BricsCAD 18

erstellt am: 04. Jul. 2014 10:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 04. Jul. 2014 10:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Gerd_Ecke 10 Unities + Antwort hilfreich

setqQ 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.




Sehen Sie sich das Profil von CADchup an!   Senden Sie eine Private Message an CADchup  Schreiben Sie einen Gästebucheintrag für CADchup

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Gerd_Ecke 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Gerd_Ecke an!   Senden Sie eine Private Message an Gerd_Ecke  Schreiben Sie einen Gästebucheintrag für Gerd_Ecke

Beiträge: 141
Registriert: 28.08.2002

Civil 3D 2020, GeoCAD
BricsCAD 18

erstellt am: 04. Jul. 2014 10:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Boah, das ging aber fix 

Das mit der Liste hatte ich mir auch überlegt, aber es werden nicht allen Variablen ein Wert zugewiesen.

Danke für Eure superschnelle Hilfe.

Schönes WE 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

neurosis
Mitglied
dipl.ing.


Sehen Sie sich das Profil von neurosis an!   Senden Sie eine Private Message an neurosis  Schreiben Sie einen Gästebucheintrag für neurosis

Beiträge: 222
Registriert: 22.08.2006

erstellt am: 04. Jul. 2014 11:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Gerd_Ecke 10 Unities + Antwort hilfreich

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.




Sehen Sie sich das Profil von CADchup an!   Senden Sie eine Private Message an CADchup  Schreiben Sie einen Gästebucheintrag für CADchup

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Gerd_Ecke 10 Unities + Antwort hilfreich

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.


Sehen Sie sich das Profil von neurosis an!   Senden Sie eine Private Message an neurosis  Schreiben Sie einen Gästebucheintrag für neurosis

Beiträge: 222
Registriert: 22.08.2006

erstellt am: 04. Jul. 2014 12:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Gerd_Ecke 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 07. Jul. 2014 10:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Gerd_Ecke 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz