| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Liste in Textstring umwandeln (2893 mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 08. Dez. 2011 14:04 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 08. Dez. 2011 14:31 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Muß man das Posting rückwärts lesen ? Zum Schluß hast du Zeile(n) und davor hast du eine Liste, schreibst aber du möchstest aus der Zeile eine Liste machen die untere Zeilen.. was soll das sein ? ein String, 3 string, Zeilen einer Textdatei ? Lispfunktionen die man nutzen könnte, je nach dem was man denn eigentlich machen möchte: mapcar um die vorhandenen Listenelemente zu bearbeiten lambda um eine komplexe Bearbeitung durchzuführen strcat um Strings aneinander zu hängen, falls das überhaupt erwünscht ist ? rtos um aus einer Zahl einen string zu machen Semikolon-getrennt?, cool. ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1144 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 08. Dez. 2011 14:32 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo Cadplayer, wie nun Liste als Text oder Zeile als Liste? Wo kommen die Zahlenpaare her? Z. B. Punktkoordinaten von sagen wir mal P1, P2, P3? Schau Dir mal (strcat ... )an. z.B. so (strcat ";" (car P1) ";" (cadr P1) ";" ....) Ansonsten wäre ein paar mehr Infos (wo kommt das her, wo soll es hingehen) hilfreich zum helfen. Gruß Thomas
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. Dez. 2011 14:38 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 08. Dez. 2011 14:43 <-- editieren / zitieren --> Unities abgeben:
Entschuldigung, etwas verwirrend - ich habe eine Liste aus Koordinaten ((....) (...) (...)) Die möchte ich gern nach Excel auslesen, d.h. also "..." ; "..." ; "..." Code:
(defun GetPlineVertexPoints ( ename / edata Punktliste) (setq edata (entget ename)) (cond ;neue Polylinie ((= (cdr (assoc 0 edata)) "LWPOLYLINE") (foreach n1 edata (if (= (car n1) 10) (setq Punktliste (cons (cdr n1) Punktliste))) ) ) ; alte Polylinie ((= (cdr (assoc 0 edata)) "POLYLINE") (while (setq ename (entnext ename)) (setq edata (entget ename)) (if (assoc 10 edata) (setq Punktliste (cdr (assoc 10 edata))) ) ) ) ) (if Punktliste (reverse Punktliste) nil) )(setq ss (ssget '((0 . "LWPOLYLINE,POLYLINE")))) (setq i1 0) (setq csvf (strcat (getvar "dwgprefix") (vl-filename-base (getvar "dwgname")) ".csv")) (setq z (open csvf "w")) (write-line (strcat ";" "Definition" ";" "X-koord" ";" "Y-koord") z) (repeat (sslength ss) (setq entpl (ssname ss i1)) (setq PunktListe (GetPlineVertexPoints entpl)) (setq i1 (1+ i1)) (progn (princ Punktliste) ;;; (write-line ;;; (strcat (itoa i) ";" ";" xkoor ";" ykoor) z) ;;; ) ;;; ) ) ) (close z) (getstring "\nPress Enter: ") (startapp "C:\\Program Files (x86)\\Microsoft Office\\Office12\\EXCEL.EXE" (strcat "\"" csvf "\"")) (princ)
Die Koordinaten kommen aus der var Punktliste, übergeben nach Excel möchte ich sie gern in der Zeile, wo ich zunächst (princ Punktliste) geschrieben - die soll natürlich später versschwinden ------------------ Gruss Dirk 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. Dez. 2011 15:53 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 09. Dez. 2011 08:10 <-- editieren / zitieren --> Unities abgeben:
ja ich muss deine Funktion ersteinmal verstehen. Ich weiss nicht genau was da eigentlich passiert (apply 'strcat (mapcar ; line 1 '(lambda (X) (strcat (apply 'strcat(mapcar ; line 2 '(lambda (Y) (strcat ";" ; line 3 (vl-princ-to-string Y)))X))"\n") ; line 4 Theoretisch ist mir bekannt was strcat, mapcar und lambda ist. Die Kombination fällt mir etwas schwer nachzuvollziehen? Kann mir das vielleicht jemand verständlich machen - wie man das liest und versteht? Fängt man so an line 4 erzeugt einen String aus liste x & y line 3 (Funktion y-wert (verbinde die Strings x & y mit einem ";" line 2 (Funtion x-wert (verbinde x mit y line 1 (verbinde ?
[Diese Nachricht wurde von cadplayer am 09. Dez. 2011 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: 11. Dez. 2011 13:53 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: ja ich muss deine Funktion ersteinmal verstehen. Ich weiss nicht genau was da eigentlich passiert(apply 'strcat (mapcar ; line 1 '(lambda (X) (strcat (apply 'strcat(mapcar ; line 2 '(lambda (Y) (strcat ";" ; line 3 (vl-princ-to-string Y)))X))"\n") ; line 4 Theoretisch ist mir bekannt was strcat, mapcar und lambda ist. Die Kombination fällt mir etwas schwer nachzuvollziehen? Kann mir das vielleicht jemand verständlich machen - wie man das liest und versteht? Fängt man so an line 4 erzeugt einen String aus liste x & y line 3 (Funktion y-wert (verbinde die Strings x & y mit einem ";" line 2 (Funtion x-wert (verbinde x mit y line 1 (verbinde ? [Diese Nachricht wurde von cadplayer am 09. Dez. 2011 editiert.]
Das vielfältige Aufrufen von STRCAT ist in dem Code tatsächlich etwas verwirrend und v.a. wohl unnötig. Wenn Du einen Punkt als Liste pt=(x y z) hast, dann kannst Du die drei Werte darin mit (mapcar 'vl-prin1-to-string pt) in Strings umwandeln. Wenn Du eine Liste lpt von Punkten derselben Form hast, kannst Du diese mit (mapcar 'wandlejedenpunktum lpt) umwandeln. Wenn Du diese dann als flache Liste haben willst (x1 y1 z1 x2 y2 z2 x3 ...), dann geht das mit (apply 'append Punktstringliste). Und wenn das dann noch ein einziger String werden soll, dann geht das mit (apply 'strcat ...). Vorsicht: da sind dann keine Leerzeichen als Trenner drin :-)) Und man kann das dann natürlich in einen einzigen Lisp-Ausdruck zusammenfassen ... Wie soll Dein Ergebnis denn aussehen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 12. Dez. 2011 10:49 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 12. Dez. 2011 11:13 <-- editieren / zitieren --> Unities abgeben:
Danke für deinen Beitrag (write-line (apply 'strcat (mapcar '(lambda(X) (strcat (apply 'strcat (mapcar '(lambda(Y) (strcat ";" (vl-princ-to-string Y)))X))"\n")) Punktliste))z) macht eigentlich genau das was ich brauche ;x1;y1;x2;y2;x3;y3... Mir ist nun klar, das 'strcat nicht im eigentlichen Sinn strcat ist sondern nur eine selbternannte Funktion "strcat" Nun zu meinem eigentlichen Problem; Ich möchte von mehreren Polylinien die Stützpunkte mit dem Block "koordinatpunkt" markieren und diese dann nach Excel auslesen. Wobei ich noch die Verbindungsart zwischen den Punkten also Bogenradius oder Linie einfügen möchte. Der beigefügte Code markiert und liest den Polylinien doppelt, obwohl var i1 richtig gesetzt ist Code:
(setq num (getint "\nSelect start number: ")); fortlaufende Linienpunktnummer (setq num (- num 1)) (setq ss (ssget '((0 . "LWPOLYLINE,POLYLINE")))) (setq i1 0) (setq csvf (strcat (getvar "dwgprefix") (vl-filename-base (getvar "dwgname")) ".csv")) (setq z (open csvf "w")) (write-line (strcat ";" "Nr" ";" "Definition" ";" "X-koord" ";" "Y-koord") z) (repeat (sslength ss) (setq ename (ssname ss i1)) (setq edata (entget ename)) (cond ((= (cdr (assoc 0 edata)) "LWPOLYLINE") (foreach n1 edata (cond ((= (car n1) 10) (setq Punktliste (cons (cdr n1) Punktliste)) (setq num (1+ num)) (command "insert" "koordinatpunkt" (car Punktliste) 1 1 0 (itoa NUM)) ) ) ) ) ) (progn (write-line (apply 'strcat (mapcar '(lambda(X) (strcat (apply 'strcat (mapcar '(lambda(Y) (strcat ";" (vl-princ-to-string Y)))X))"\n") ) Punktliste ) ) z) ) (setq i1 (1+ i1)) ) (close z) (getstring "\nPress Enter: ") (startapp "C:\\Program Files (x86)\\Microsoft Office\\Office12\\EXCEL.EXE" (strcat "\"" csvf "\""))
------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 12. Dez. 2011 11:31 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 12. Dez. 2011 11:33 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 12. Dez. 2011 12:32 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 12. Dez. 2011 12:47 <-- editieren / zitieren --> Unities abgeben:
@cadffm Ja Quatsch mit Sosse... bestimmt geht mir heute noch ein Licht auf @cadmium In dem code mit vl-princ-to-string würde ich gern noch den Wert von Var. num mit einfügen ? ------------------ Gruss Dirk [Diese Nachricht wurde von cadplayer am 12. Dez. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |