Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Liste in Textstring umwandeln

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:  Liste in Textstring umwandeln (2749 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: 08. Dez. 2011 14: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

((-82.0702 81.1789) (-76.3061 79.6117) (-73.6783 77.0703))

ich möchte diese Zeile inform einer Liste haben

;-82.0702;81.1789
;-76.3061;79.6117
;-73.6783;77.0703

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

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: 08. Dez. 2011 14:31    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

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



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

Beiträge: 1111
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 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

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




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 08. Dez. 2011 14: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

(princ
(apply
  'strcat
  (mapcar
  '(lambda(X)
      (strcat(apply 'strcat(mapcar '(lambda(Y) (strcat ";" (vl-princ-to-string Y)))X))"\n")
    ) 
  '((-82.0702 81.1789) (-76.3061 79.6117) (-73.6783 77.0703))
  )
)
)

??

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

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: 08. Dez. 2011 14: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

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




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 08. Dez. 2011 15:53    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

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: 09. Dez. 2011 08:10    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

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



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: 11. Dez. 2011 13:53    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:
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
良い精神




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: 12. Dez. 2011 10:49    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

cadplayer, hast du dein PM´s gecheckt ?

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

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: 12. Dez. 2011 11:13    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 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




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 12. Dez. 2011 11:31    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

warum (setq ss (ssget '((0 . "LWPOLYLINE,POLYLINE"))))
wenn dein Prog eh bloß LWPOLYLINE kann ??

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

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: 12. Dez. 2011 11:33    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

Ja POLYLINE (alte Polyline) kann man löschen. Ich habe der übersicht wegen, das erstmal weggelassen, die im code einzubeziehen.

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

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: 12. Dez. 2011 12: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

Zitat:
Mir ist nun klar, das 'strcat nicht im eigentlichen Sinn strcat ist sondern nur eine selbternannte Funktion "strcat"


  Was ist das denn nu wieder für ein xxxxxsinn ?

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

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: 12. Dez. 2011 12:47    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

@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

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