Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Dictionary, mehrere Items ablegen

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:  Dictionary, mehrere Items ablegen (1714 mal gelesen)
cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 20. Jun. 2013 10:02    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

Da sich der Thread "Variablen dauerhauft speichern" ziehmlich überladen hat, wollte ich hier nochmal ein feedback zum Anlegen von Dictionary´s geben.
Visual bietet Funktionen, die eigentlich sehr komfortabel alles anbietem zum Anlegen, Speichern, Editieren und Löschen von D.

Man kann es eigentlich alles nachlesen, aber ich habe hier mal ein kleines Tutorial zusammengstellt, wie man ein Lispfunktion in einem Dictionary und damit in der Zeichendatenbank ablegen kann.

Code:
; Testfunktionen
(vlax-ldata-test "(quote (defun c:test (/) (entsel \" Wähle etwas \")))")

; Durch diese Funktion können beliebig viele Items in einem Dictionary
; abgelegt werden
(vlax-ldata-put "dict2" "function" "(defun c:test (/) (entsel \" Wähle etwas \")))")
_$"(defun c:test (/) (entsel \" Wähle etwas \")))"

; Damit können die Dictionary abgefragt werden
(vlax-ldata-list "dict2" )
_$ (("function" . "(defun c:test (/) (entsel \" Wähle etwas \")))"))

; Damit kann man das entsprechende Item abfragen
(vlax-ldata-get "dict2" "function")
_$"(defun c:test (/) (entsel \" Wähle etwas \")))"

; Und hier als Beispiel die Funktion ausführen
(eval (read (vlax-ldata-get "dict2" "function")))
_$(c:test)


------------------
Gruss Dirk

http://cadplayerlounge.blogspot.se

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

Windows 10
64bit system
Autocad Civil3d 2020 ENGLISH
Visual Studio 2019
OpenDCL.Runtime.9<P>

erstellt am: 21. Jun. 2013 08:21    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

Hi!

Kann mir eigentlich jemand sagen, was der Unterschied zwischen ldata und xdata ist - beides sind dictionary und legen aber in unterschiedlichen GC´s im dictionary-objekt ab.
In anderen foren lass ich, dass ldatas nicht so "beliebt" sind, aber nicht warum.

------------------
Gruss Dirk

http://cadplayerlounge.blogspot.se

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

reltro
Mitglied
student


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

Beiträge: 125
Registriert: 08.11.2009

Acad 2012 - VBA,Lisp
Revit 2012
3dsMax 2012
Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3

erstellt am: 21. Jun. 2013 09:32    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 cadplayer 10 Unities + Antwort hilfreich

Zum Unterschied kann ich nichts sagen...

Zu Ldata: Hier im Forum


Schade dass man Ldata vermeiden sollte, denn folgendes würde auch funktionieren...

Code:

(vlax-ldata-put "dict2" "function" '(defun c:test (/) (entsel "Wähle etwas")))


Man kann dort auch Listen eintragen!

Aber laut Erfahrung von Erfahreneren ist davon abzuraten...
Desshalb ja auch die Diskussion über die geforderte Struktur der Daten von XData, Xdictionary, Dictionary

lg

[Diese Nachricht wurde von reltro am 21. Jun. 2013 editiert.]

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 29. Jun. 2013 14:24    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

Danke reltro für den Link, der hat mich wachgerüttelt - ich dachte weniger kritisch, warum die ldatas nicht hernehmen, wenn sie einfacher zu händeln sind.

Ein andere Sache ist, passt jetzt vllt nicht unbedingt zum Thema: ich find es ziehmlich clever, wie du den variablen immer gleich ganze Funktionen zuweisst und damit ein variablenGeschwürr abwendest.

Gewisserweise Übersicht schaffst, ohne viele Subfunktionen anzulegen.
Das ist häufig mein Problem, wenn eine Subfunktion nur einmal durchlaufen wird, warum getrennt progn. Es macht ja den Code unleserlich und ist später schwer nachzuvollziehen.

Deshalb mehr von deinen Codes, anfangs schwer nachzuvollziehen aber mittlerweile finde ich gefallen daran.

------------------
Gruss Dirk

http://cadplayerlounge.blogspot.se

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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 29. Jun. 2013 17:28    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 cadplayer 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadplayer:
Danke reltro für den Link, der hat mich wachgerüttelt - ich dachte weniger kritisch, warum die ldatas nicht hernehmen, wenn sie einfacher zu händeln sind.

Nun, ich denke, dass die LData-Probleme mittlerweile behoben sein sollten, und dass Autodesk sich hüten wird, nochmals solches Chaos anzurichten. Andererseits haben wohl die meisten Programmierer mittlerweile Bibliotheksfunktionen zum Schreiben von Dictionaries, die exakt denselben Zweck wie die LData erfüllen.

Was für mich aber eine dauerhafte Lehre aus der ganzen Angelegenheit war und ist: niemals, unter keinen Umständen, nie, nie, nie sollte man Mitglied im Autodesk Developer Network werden, solange man damit auch nur teilweise Rechte an seinen Sourcen aufgibt, oder Pflichten für Offenlegung o.ä. seiner Sourcen übernimmt.

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 01. Jul. 2013 09:22    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

archtools: Danke für den Tip!

------------------
Gruss Dirk

http://cadplayerlounge.blogspot.se

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

Windows 10
64bit system
Autocad Civil3d 2020 ENGLISH
Visual Studio 2019
OpenDCL.Runtime.9<P>

erstellt am: 03. Jul. 2013 14:11    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

Nun vermische ich wiedermal Äpfel mit Birnen, mal sehen was raus kommt...

Im vorangegangenen Teil ersteinmal der Hinweis, ich habe von ldata-dictionary gesprochen, bei denen wahrscheinlich alle Mängel von Autodesk beseitigt wurden.

Jetzt komme ich aber nochmal auf die xdata-dictionary zurück. Da ich mir jetzt einige Funktionen geschrieben habe, zum Anlegen, Lesen, Editieren, Löschen... von dictionary und zum Anlegen, Lesen von Items im dictionary.

Mein Problem ist jetzt beim Löschen eines Items, die betreffende liste aus dem dictionary rauszuschmeissen.
Ich kann die Liste zwar in der Funktionsausführung löschen, aber wie schreibe ich die Änderung in den dictionary,

So eine simple Funktion wie "dictremove" gibt es nicht auch für Items oder?

------------------
Gruss Dirk

http://cadplayerlounge.blogspot.se

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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 03. Jul. 2013 16:43    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 cadplayer 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadplayer:
Nun vermische ich wiedermal Äpfel mit Birnen, mal sehen was raus kommt...

Im vorangegangenen Teil ersteinmal der Hinweis, ich habe von ldata-dictionary gesprochen, bei denen wahrscheinlich alle Mängel von Autodesk beseitigt wurden.

Jetzt komme ich aber nochmal auf die xdata-dictionary zurück. Da ich mir jetzt einige Funktionen geschrieben habe, zum Anlegen, Lesen, Editieren, Löschen... von dictionary und zum Anlegen, Lesen von Items im dictionary.

Mein Problem ist jetzt beim Löschen eines Items, die betreffende liste aus dem dictionary rauszuschmeissen.
Ich kann die Liste zwar in der Funktionsausführung löschen, aber wie schreibe ich die Änderung in den dictionary,

So eine simple Funktion wie "dictremove" gibt es nicht auch für Items oder?


Sowas wie ein xdata-dictionary gibt's nicht. Es gibt Xdata und es gibt Xdictionaries und es gibt Dictionaries. Und natürlich gibt's außerdem noch Ldata.

Ich nehme an, Du meinst ein Xdictionary. Wenn Du da einzelne Daten ändern willst, dann löschst Du das XDictionary und schreibst die geänderten Daten komplett neu rein.

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 03. Jul. 2013 17:34    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

Genau, du hast mich richtig verstanden - danke. Dann muss ich, wenn bereits 10 items in dem dictionary enthalten sind, alle wiederherstellen, bis auf den, den ich gelöscht haben will. Ist es so richtig, wie ich es aufzäume (cooler Audruck - geht auf den Feierabend hin)

------------------
Gruss Dirk

http://cadplayerlounge.blogspot.se

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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 04. Jul. 2013 13:38    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 cadplayer 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadplayer:
Genau, du hast mich richtig verstanden - danke. Dann muss ich, wenn bereits 10 items in dem dictionary enthalten sind, alle wiederherstellen, bis auf den, den ich gelöscht haben will. Ist es so richtig, wie ich es aufzäume (cooler Audruck - geht auf den Feierabend hin) 


Um Verwirrungen zu vermeiden: wenn Du ein Xdictionary meinst, dann nenne es nicht Dictionary. Das gibt's nämlich auch.

Bezüglich der Daten wiederhole ich mich: beim Schreiben eines (X)Dictionarys musst Du ALLE Daten angeben. Eine Modifizierungsfunktion nur eines Teils der gespeicherten Daten gibt es nicht, und sie wäre auch unsinnig, weil damit eine Struktur der speicherbaren Daten verbindlich vorgeschrieben wäre.

Du musst Dir sowas also selbst schreiben. Ich habe beispielsweise eigene "Systemvariablen", die ich in einem Dictionary in der DWG ablege. Diese Variablen und deren Werte werden in einer simplen ASSOC-Liste geführt, und diese komplette Liste wird z.B. unter dem Appnamen "MYAPP" und dem Key "MYSYSVARS" gespeichert. Wenn nur eine einzige Variable geändert werden soll, dann lese ich die komplette Liste aus, packe den neuen Wert mittels SUBST in diese Liste rein, und speichere die komplette Liste wieder ab.

Da ich meine Datenstrukturen dabei selbst kontrolliere, kann ich also problemlos Funktionen wie (mysetvar "MYVAR1" 123) oder (mygetvar "MYVAR1") nutzen. Dass dabei immer die ganze Liste aller Systemvariablen komplett neu ins Dictionary geschrieben werden muss, interessiert mich von da an nicht mehr.

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



Maschinenbauingenieur (m/w/d)
<...
Anzeige ansehenMaschinenbau
cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 05. Jul. 2013 12:41    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

Danke, komme heute nicht dazu - hoffentlich am WE.

------------------
Gruss Dirk

http://cadplayerlounge.blogspot.se

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