| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Liste (1498 mal gelesen)
|
RoyCAD Mitglied Dipl-Ing Energietechnik
Beiträge: 206 Registriert: 24.05.2004 Win XP AutoCAD2008-2010 Inventor 2008-2010 Productstream Compass P4 3,0GHz 512MB Ram
|
erstellt am: 19. Okt. 2006 16:27 <-- editieren / zitieren --> Unities abgeben:
Hallo Ich habe so eine Liste (("249.0/31.4") ("79.4/31.4") ("90.2/31.4") ("238.2/31.4") ("169.6/31.4") ("158.8/31.4") ("249.0/31.4") ("79.4/31.4") ("90.2/31.4") ("238.2/31.4") ("169.6/34.8") ("158.8/34.8")) was soll ich machen das ich so ein Rückgabewehr bekomme: 2 x 249.0/31.4 2 x 79.4/31.4 2 x 90.2/31.4 usw. DANKE!! 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: 19. Okt. 2006 17:31 <-- editieren / zitieren --> Unities abgeben: Nur für RoyCAD
Hi, sowas?
Code: (progn (mapcar '(lambda (arg) (princ (strcat "2 x " arg)) (princ "\n") ) (mapcar 'car '(("249.0/31.4") ("79.4/31.4") ("90.2/31.4") ("238.2/31.4") ("169.6/31.4") ("158.8/31.4") ("249.0/31.4") ("79.4/31.4") ("90.2/31.4") ("238.2/31.4") ("169.6/34.8") ("158.8/34.8") ) ) ) (princ) )
Aber wozu braucht man das? Gruß CADchup
------------------ CADmaro.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 ich hab eh keine Probleme damit...
|
erstellt am: 19. Okt. 2006 17:54 <-- editieren / zitieren --> Unities abgeben: Nur für RoyCAD
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 19. Okt. 2006 20:54 <-- editieren / zitieren --> Unities abgeben: Nur für RoyCAD
Also sowas: (defun Countmembers(LISTE / RETURNLISTE) (mapcar '(lambda(Z) (princ (strcat "\n" (itoa(car Z))" x" (vl-princ-to-string(cdr Z))) ) ) (mapcar '(lambda(x) (cons (length(vl-remove-if-not '(lambda(Y)(equal Y X)) LISTE)) X ) ) (foreach ELEMENT LISTE (if(not(member ELEMENT RETURNLISTE)) (setq RETURNLISTE (cons ELEMENT RETURNLISTE)) ) ) ) ) (princ) ) (countmembers '(("249.0/31.4") ("79.4/31.4") ("90.2/31.4") ("238.2/31.4") ("169.6/31.4") ("158.8/31.4") ("249.0/31.4") ("79.4/31.4") ("90.2/31.4") ("238.2/31.4") ("169.6/34.8") ("158.8/34.8") ) ) ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." 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: 19. Okt. 2006 22:17 <-- editieren / zitieren --> Unities abgeben: Nur für RoyCAD
|
RoyCAD Mitglied Dipl-Ing Energietechnik
Beiträge: 206 Registriert: 24.05.2004 Win XP AutoCAD2008-2010 Inventor 2008-2010 Productstream Compass P4 3,0GHz 512MB Ram
|
erstellt am: 20. Okt. 2006 09:13 <-- editieren / zitieren --> Unities abgeben:
|
RoyCAD Mitglied Dipl-Ing Energietechnik
Beiträge: 206 Registriert: 24.05.2004 Win XP AutoCAD2008-2010 Inventor 2008-2010 Productstream Compass P4 3,0GHz 512MB Ram
|
erstellt am: 20. Okt. 2006 09:16 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von tunnelbauer: @CADchup:Ich denke er sucht/will ein Tool das seine vorhandene Liste durchsucht und dann nachschaut, wieoft ein Listenelement vorkommt und dies dann entsprechend ausgibt...
Genau das brauche ich!!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 20. Okt. 2006 09:22 <-- editieren / zitieren --> Unities abgeben: Nur für RoyCAD
Zitat: Original erstellt von RoyCAD: Genau das brauche ich!!!
und? Code mal angesehen? ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoyCAD Mitglied Dipl-Ing Energietechnik
Beiträge: 206 Registriert: 24.05.2004 Win XP AutoCAD2008-2010 Inventor 2008-2010 Productstream Compass P4 3,0GHz 512MB Ram
|
erstellt am: 20. Okt. 2006 12:00 <-- editieren / zitieren --> Unities abgeben:
so richtig nicht aber das ist meine Schuld, weil die Liste siecht so aus (("249.0/31.4" <Objektname: 7edaa870> ) ("79.4/31.4" <Objektname: 7edaa8e0> ) ("90.2/31.4" <Objektname: 7edaa9b8> ) ("238.2/31.4" <Objektname: 7edaaa28> ) ("169.6/31.4" <Objektname: 7edaab00> ) ("158.8/31.4" <Objektname: 7edaab70> ) ("249.0/31.4" <Objektname: 7edaac88> ) ("79.4/31.4" <Objektname: 7edaacf8> ) ("90.2/31.4" <Objektname: 7edaadd0> ) ("238.2/31.4" <Objektname: 7edaae40> ) ("169.6/34.8" <Objektname: 7edaaf18> ) ("158.8/34.8" <Objektname: 7edaaf88> )) und als Rückgabewert brauche ich z.B ( “2 x 249.0/31.4" <Objektname: 7edaa870> <Objektname: 7edaac88> ) ( “2 x 79.4/31.4" <Objektname: 7edaa8e0> <Objektname: 7edaacf8> ) usw. Ich hoffe es ist machbar, weil mir gehen die Ideen aus. Ich probiere mit repeat die Listen zu knacken aber es funk nicht!!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoyCAD Mitglied Dipl-Ing Energietechnik
Beiträge: 206 Registriert: 24.05.2004 Win XP AutoCAD2008-2010 Inventor 2008-2010 Productstream Compass P4 3,0GHz 512MB Ram
|
erstellt am: 20. Okt. 2006 12:58 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 20. Okt. 2006 13:41 <-- editieren / zitieren --> Unities abgeben: Nur für RoyCAD
.. na der obige Code liefert dir doch schon alles .. ich habs mal minimal modifiziert .. ob du das princ brauchst, oder die Objektnamen als Unterliste.. das fürfte ja nicht das Problem sein (defun Countmembers(LISTE / RETURNLISTE) (mapcar '(lambda(Z) (princ (strcat "\n" (itoa(car Z))" x" (vl-princ-to-string(cadr Z))(vl-princ-to-string(caddr Z))) ) ) (mapcar '(lambda(x / SUB) (list (length(setq SUB(vl-remove-if-not '(lambda(Y)(equal (car Y) X)) LISTE))) X (mapcar 'cadr SUB) ) ) (foreach ELEMENT LISTE (if(not(member (car ELEMENT) RETURNLISTE)) (setq RETURNLISTE (cons (car ELEMENT) RETURNLISTE)) ) ) ) ) (princ) ) Zum Testen hab ich mal die objektnamen als String genommen :
(COUNTMEMBERS '(("249.0/31.4" "<Objektname: 7edaa870>" ) ("79.4/31.4" "<Objektname: 7edaa8e0>" ) ("90.2/31.4" "<Objektname: 7edaa9b8>" ) ("238.2/31.4" "<Objektname: 7edaaa28>" ) ("169.6/31.4" "<Objektname: 7edaab00>" ) ("158.8/31.4" "<Objektname: 7edaab70>" ) ("249.0/31.4" "<Objektname: 7edaac88>" ) ("79.4/31.4" "<Objektname: 7edaacf8>" ) ("90.2/31.4" "<Objektname: 7edaadd0>" ) ("238.2/31.4" "<Objektname: 7edaae40>" ) ("169.6/34.8" "<Objektname: 7edaaf18>" ) ("158.8/34.8" "<Objektname: 7edaaf88>" )) ) liefert 1 x158.8/34.8(<Objektname: 7edaaf88> ) 1 x169.6/34.8(<Objektname: 7edaaf18> ) 1 x158.8/31.4(<Objektname: 7edaab70> ) 1 x169.6/31.4(<Objektname: 7edaab00> ) 2 x238.2/31.4(<Objektname: 7edaaa28> <Objektname: 7edaae40> ) 2 x90.2/31.4(<Objektname: 7edaa9b8> <Objektname: 7edaadd0> ) 2 x79.4/31.4(<Objektname: 7edaa8e0> <Objektname: 7edaacf8> ) 2 x249.0/31.4(<Objektname: 7edaa870> <Objektname: 7edaac88> ) ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1734 Registriert: 11.10.2004 Window 10 ACAD 2021 CIVIL 2021 BricsCAD V14-V22 Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz 16.0GB RAM NVIDIA GeForce GTX 1050<P>
|
erstellt am: 20. Okt. 2006 14:04 <-- editieren / zitieren --> Unities abgeben: Nur für RoyCAD
Hallo, ich habe auch nochmal gebastelt, bei mir werden aber, im Gegensatz zu CADmium, nur die Strings ausgegeben: Code:
(defun Countmembers (LISTE / RETURNLISTE A) (mapcar '(lambda (A) (if (not (assoc (car A) RETURNLISTE)) (setq RETURNLISTE (cons (cons (car A) 1) RETURNLISTE)) (setq RETURNLISTE (subst (cons (car A) (+ (cdr (assoc (car A) RETURNLISTE)) 1)) (assoc (car A) RETURNLISTE) RETURNLISTE)))) liste) (mapcar '(lambda (A) (strcat (itoa (cdr A)) "x " (car A))) RETURNLISTE))
Ausgabe: ("1x 158.8/34.8" "1x 169.6/34.8" "1x 158.8/31.4" "1x 169.6/31.4" "2x 238.2/31.4" "2x 90.2/31.4" "2x 79.4/31.4" "2x 249.0/31.4") Ein schönes Wochenende wünsche ich.
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoyCAD Mitglied Dipl-Ing Energietechnik
Beiträge: 206 Registriert: 24.05.2004 Win XP AutoCAD2008-2010 Inventor 2008-2010 Productstream Compass P4 3,0GHz 512MB Ram
|
erstellt am: 20. Okt. 2006 16:05 <-- editieren / zitieren --> Unities abgeben:
alles Perfekt aber noch eine Frage wie bekomme ich die Objekname als String Zum Testen hab ich mal die objektnamen als String genommen : (COUNTMEMBERS '(("249.0/31.4" "<Objektname: 7edaa870>" ) ("79.4/31.4" "<Objektname: 7edaa8e0>" ) ("90.2/31.4" "<Objektname: 7edaa9b8>" ) ("238.2/31.4" "<Objektname: 7edaaa28>" ) ("169.6/31.4" "<Objektname: 7edaab00>" ) ("158.8/31.4" "<Objektname: 7edaab70>" ) ("249.0/31.4" "<Objektname: 7edaac88>" ) ("79.4/31.4" "<Objektname: 7edaacf8>" ) ("90.2/31.4" "<Objektname: 7edaadd0>" ) ("238.2/31.4" "<Objektname: 7edaae40>" ) ("169.6/34.8" "<Objektname: 7edaaf18>" ) ("158.8/34.8" "<Objektname: 7edaaf88>" )) ) liefert 1 x158.8/34.8(<Objektname: 7edaaf88> ) 1 x169.6/34.8(<Objektname: 7edaaf18> ) 1 x158.8/31.4(<Objektname: 7edaab70> ) 1 x169.6/31.4(<Objektname: 7edaab00> ) 2 x238.2/31.4(<Objektname: 7edaaa28> <Objektname: 7edaae40> ) 2 x90.2/31.4(<Objektname: 7edaa9b8> <Objektname: 7edaadd0> ) 2 x79.4/31.4(<Objektname: 7edaa8e0> <Objektname: 7edaacf8> ) 2 x249.0/31.4(<Objektname: 7edaa870> <Objektname: 7edaac88> ) [/B][/QUOTE] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RoyCAD Mitglied Dipl-Ing Energietechnik
Beiträge: 206 Registriert: 24.05.2004 Win XP AutoCAD2008-2010 Inventor 2008-2010 Productstream Compass P4 3,0GHz 512MB Ram
|
erstellt am: 20. Okt. 2006 16:48 <-- editieren / zitieren --> Unities abgeben:
|
RoyCAD Mitglied Dipl-Ing Energietechnik
Beiträge: 206 Registriert: 24.05.2004 Win XP AutoCAD2008-2010 Inventor 2008-2010 Productstream Compass P4 3,0GHz 512MB Ram
|
erstellt am: 27. Okt. 2006 15:11 <-- editieren / zitieren --> Unities abgeben:
Warum Funktioniert diese Funktion mit so eine Eingangswert (COUNTMEMBERS '( ("249.0/61.0" <Objektname: 7e9cbda8> ) ("166.0/60.0" <Objektname: 7e9cbef8> ) ("166.0/60.0" <Objektname: 7e9cbf68> ) ("83.0/60.0" <Objektname: 7e738080> ) ("249.0/60.0" <Objektname: 7e7380f0> ) ("249.0/60.0" <Objektname: 7e7381c8> ) ("83.0/60.0" <Objektname: 7e738238> ) ("166.0/60.0" <Objektname: 7e738310> ) ("166.0/60.0" <Objektname: 7e738380> ) ("83.0/60.0" <Objektname: 7e738498> ) ("249.0/60.0" <Objektname: 7e738508> ) ("249.0/61.0" <Objektname: 7e7385e0> ) ("83.0/61.0" <Objektname: 7e738650> )) ) und mit dem schon nicht mehr??? (COUNTMEMBERS '( ("249.0/61.0" <Objektname: 7e9cbda8> ) ("83.0/61.0" <Objektname: 7e9cbe20> ) ("166.0/60.0" <Objektname: 7e9cbef8> ) ("166.0/60.0" <Objektname: 7e9cbf68> ) ("83.0/60.0" <Objektname: 7e738080> ) ("249.0/60.0" <Objektname: 7e7380f0> ) ("249.0/60.0" <Objektname: 7e7381c8> ) ("83.0/60.0" <Objektname: 7e738238> ) ("166.0/60.0" <Objektname: 7e738310> ) ("166.0/60.0" <Objektname: 7e738380> ) ("83.0/60.0" <Objektname: 7e738498> ) ("249.0/60.0" <Objektname: 7e738508> ) ("249.0/61.0" <Objektname: 7e7385e0> ) ("83.0/61.0" <Objektname: 7e738650> )) ) Sorry das ich noch einmal Frage aber das möchte ich schon verstehen
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 27. Okt. 2006 22:07 <-- editieren / zitieren --> Unities abgeben: Nur für RoyCAD
mal ohne mapcar zum leichter debuggen (defun Countmembers(LISTE / RETURNLISTE R) (foreach ELEMENT LISTE (if(not(member (car ELEMENT) RETURNLISTE)) (setq RETURNLISTE (cons (car ELEMENT) RETURNLISTE)) ) ) (foreach ELEMENT RETURNLISTE (setq SUB (vl-remove-if-not '(lambda(Y)(equal (car Y) ELEMENT)) LISTE)) (setq R (cons (list (length SUB) ELEMENT (mapcar 'cdr SUB)) R)) ) ) die princ-ausgabe hab ich gleich weggelassen ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |