| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Grösste Zahl in einer Liste (1299 mal gelesen)
|
Steff179 Mitglied Geomatiker
Beiträge: 266 Registriert: 09.08.2007 AutoCAD 2014
|
erstellt am: 08. Mrz. 2009 20:57 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen Ich habe mal das hir zusammen gebastelt: ------------------------------------------------- (defun c:gg() (setq vSET (ssget)) (setq vLaenge (sslength vSET)) (setq vLaenge (- vLaenge 1)) (setq vPosit 0) (while (<= vPosit vLaenge) (setq vEintrag (cdr (assoc 1 (entget (ssname vSET vPosit))))) (setq vEintrag (atoi vEintrag)) (setq vListe (cons vEintrag vListe)) (setq vPosit (+ vPosit 1)) ) (setq Groesste (max vListe)) ) ------------------------------------------------- was ich damit erreichen will ist das mir die grösste zahl der gewählten ausgegeben wird. die liste kommt zu stande ect. aber das mit dem (max blabla) haut irgendwie nicht hin. kann mir einer den fehler sagen? gruss steff Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 08. Mrz. 2009 21:02 <-- editieren / zitieren --> Unities abgeben: Nur für Steff179
|
Steff179 Mitglied Geomatiker
Beiträge: 266 Registriert: 09.08.2007 AutoCAD 2014
|
erstellt am: 08. Mrz. 2009 21:06 <-- editieren / zitieren --> Unities abgeben:
|
Steff179 Mitglied Geomatiker
Beiträge: 266 Registriert: 09.08.2007 AutoCAD 2014
|
erstellt am: 08. Mrz. 2009 21:57 <-- editieren / zitieren --> Unities abgeben:
und schon wider plagt mich eine unbeantwortete frage auf die ich nichts gefunden habe... ich würde gerne eine liste nach doppelten zahlen durchsuchen... habe auch nach 30min suchen keinnen passenden befehl gefunden... und bevor ich jetzt die liste eins nach dem anderen lese und mit jedem eintrag vergleiche muss ich doch nochmal fragen ob das einfacher geht... beispiel:
liste: 11 22 33 44 55 44 66 also haben wir den eintrag 4 und 6 dopplet... ergebniss 44 irgendwie so... gruss steff ps.: so wie es aussieht muss man die wohl ausslesen nach anderen forentreads
[Diese Nachricht wurde von Steff179 am 08. Mrz. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 09. Mrz. 2009 06:26 <-- editieren / zitieren --> Unities abgeben: Nur für Steff179
|
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 09. Mrz. 2009 08:01 <-- editieren / zitieren --> Unities abgeben: Nur für Steff179
Hallo, folgende Funktion passt zum Thema finde ich, es wird eine Liste zurückgegeben, die jeweils die Anzahl der vorhandenen Listenelemente mit wiedergibt: Code:
(defun test (/ LISTE LISTE1) (setq liste '(11 22 33 44 55 44 66)) (mapcar '(lambda (A) (if (not (assoc A liste1)) (setq liste1 (cons (list A (length (vl-remove-if '(lambda (B) (/= A B)) liste))) liste1)))) liste) liste1)
=>'((66 1) (55 1) (44 2) (33 1) (22 1) (11 1))------------------ viele Grüße Jörn http://www.bosse-engineering.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Steff179 Mitglied Geomatiker
Beiträge: 266 Registriert: 09.08.2007 AutoCAD 2014
|
erstellt am: 09. Mrz. 2009 08:03 <-- editieren / zitieren --> Unities abgeben:
|
Steff179 Mitglied Geomatiker
Beiträge: 266 Registriert: 09.08.2007 AutoCAD 2014
|
erstellt am: 09. Mrz. 2009 08:47 <-- editieren / zitieren --> Unities abgeben:
hmmm ich beanspruche dieses forum ja gerade ein wenig intesnsiv ich hoffe nicht zu intensiv... (nentsel) "gewährt Zugriff auf die Definitionsdaten, die in einem komplexen Objekt enthalten sind." (ssname) leider nicht wie ich das sehe... das heisst ich lege mir ein set an mit (ssget) und würde dann aber gerne wie mit (nentsel) auf die einzelnen elemente zugreifen... kann mir da einer einen tipp geben? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 09. Mrz. 2009 09:36 <-- editieren / zitieren --> Unities abgeben: Nur für Steff179
|
gmk Mitglied Dipl.-Ing.(FH) Vermessung
Beiträge: 669 Registriert: 23.10.2002 Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM
|
erstellt am: 09. Mrz. 2009 09:49 <-- editieren / zitieren --> Unities abgeben: Nur für Steff179
Servus! Schau' Dir mal in der Hilfe zu nentsel die Return Values an, da ist es eigentlich ganz gut beschrieben was der Unterschied zwischen nentsel und entsel (entspricht in Deinem Fall SSGET) ist. Die Elemente des "komplexen Elements" stehen in der Datenbank hintereinander. Mit einer Schleife bis sequend und entnext kommst Du an die Elemente des "komplexen Elements". Im Auswahlsatz (SSGET) selbst stehen nur die "komplexen Elemente", nicht die "Unterelemente", wie z.B. Attribute oder Polylinienstützpunkte. Ciao Georg
------------------ http://www.xx-tausend.info Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Steff179 Mitglied Geomatiker
Beiträge: 266 Registriert: 09.08.2007 AutoCAD 2014
|
erstellt am: 09. Mrz. 2009 09:51 <-- editieren / zitieren --> Unities abgeben:
besten dank ich schau mal ob ich damitt weiter komme.... yes yes yes entnext war wirklich das zauberwort... hey besten dank ich habe mich schon fast aufgegeben... [Diese Nachricht wurde von Steff179 am 09. Mrz. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 09. Mrz. 2009 21:08 <-- editieren / zitieren --> Unities abgeben: Nur für Steff179
Zitat: Original erstellt von Steff179: hmmm ich beanspruche dieses forum ja gerade ein wenig intesnsiv ich hoffe nicht zu intensiv...(nentsel) "gewährt Zugriff auf die Definitionsdaten, die in einem komplexen Objekt enthalten sind." (ssname) leider nicht wie ich das sehe... das heisst ich lege mir ein set an mit (ssget) und würde dann aber gerne wie mit (nentsel) auf die einzelnen elemente zugreifen... kann mir da einer einen tipp geben?
Ein Auswahlsatz ist kein "komplexes Zeichnungsobjekt". Mit NENTSEL kannst Du Elemente innerhalb einer Blockreferenz oder innerhalb einer alten Polylinie auswählen. Auf die Elemente innerhalb eines Auswahlsatzes kannst Du mit (ssname <idx>) zugreifen. Sehr viel "besser", weil LISP-gemäßer ist es, wenn Du statt mit Auswahlsätzen mit Listen von einzelnen Elementen arbeitest. Da kannst Du dann mit allen Listenfunktionen auf die einzelnen Elemente zugreifen und hast auch nicht mehr mit dummen Seiteneffekten der Auswahlsätze zu kämpfen (Auswahlsätze sind sowas wie Handles auf offene Dateien und keine echten Datenstrukturen). Du benötigst zwei Funktionen - eine, um Auswahlsätze in Listen von Entities umzuwandeln, und eine andere, die das wieder rückgängig macht. Hier sind sie: Code:
(defun ss2e (sset / eset counter) (if (= 'PICKSET (type sset)) (repeat (sslength sset) (if (not counter) (setq counter 0) (setq counter (1+ counter)) ) (setq eset (cons (cdr (assoc -1 (entget (ssname sset counter)))) eset) ) ) ) eset ) (defun e2ss (eset / sset) (setq sset (ssadd)) (if (= 'LIST (type eset)) (mapcar '(lambda (x) (if (= 'ENAME (type x)) (setq sset (ssadd x sset)) ) ) eset ) ) sset )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |