| |
| 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: String in Liste ersetzen (1595 mal gelesen)
|
JC Wasti Mitglied Student
Beiträge: 52 Registriert: 10.11.2004 ACADR14 Genius14 ACADM6PP alles auf WinXP
|
erstellt am: 30. Okt. 2006 13:26 <-- editieren / zitieren --> Unities abgeben:
Hallo, Folgendes Problem: In einer Liste mit Strings möchte ich nun einen String durch einen anderen ersetzen. Ich möchte dies nur mit reinen LISP-Funktionen lösen. z.B.: (setq obf (list "A0" "A1" "A2" "A3" "A4")) (subst "A=" "A2" obf) Leider funktioniert die subst-Funktion irgendwie nicht mit Strings! Gibts da nen Zusatz, oder welche Funktion muß ich dafür verwenden? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 30. Okt. 2006 13:33 <-- editieren / zitieren --> Unities abgeben: Nur für JC Wasti
|
JC Wasti Mitglied Student
Beiträge: 52 Registriert: 10.11.2004 ACADR14 Genius14 ACADM6PP alles auf WinXP
|
erstellt am: 30. Okt. 2006 13:43 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Geos: (subst) is für Listen - für Text nimm (substr)
Danke Ernst für deine schnelle Antwort. Ich weiß dass "subst" nur für Listen ist. Aber leider geht das mit der Funktion "substr" nicht, denn ich möchte keine AutoLips-Funktion verwenden. Bitte nur reine Lisp-Funktionen!
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: 30. Okt. 2006 14:12 <-- editieren / zitieren --> Unities abgeben: Nur für JC Wasti
|
JC Wasti Mitglied Student
Beiträge: 52 Registriert: 10.11.2004 ACADR14 Genius14 ACADM6PP alles auf WinXP
|
erstellt am: 30. Okt. 2006 14:23 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von spider_dd: Hallo JC Wasti,Deine Liste enthält die Werte samt Anführungsstriche, dein subst muss dann so aussehen:
Code: (subst '"A=" '"A2" obf)
lg Thomas
Hallo Thomas, danke für die Antwort, nur leider funktioniert das mit der Quote auch nicht. Hab ich auch schon ausgetestet! Hast du vielleicht noch ne andere Idee / Lösung? 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: 30. Okt. 2006 14:23 <-- editieren / zitieren --> Unities abgeben: Nur für JC Wasti
Hallo Wasti, ich bin der Meinung, subst funktioniert auch bei nur Strings in Listen. Ich habe mal 2 Beispiele gemacht, und es klappt mit beiden. Beim ersten habe ich die String erst in eine Liste gepackt, dann gesubst, und dann wieder ausgepackt. Die zweite Funktion zeigt aber, das es eigentlich nicht notwendig ist. Rückgabe in beiden Fällen: ("A0" "A1" "A=" "A3" "A4") Code:
(defun c:test (/) (setq obf (list "A0" "A1" "A2" "A3" "A4")) (mapcar '(lambda (A) (car A)) (subst '("A=") '("A2") (mapcar '(lambda (A) (list A)) obf))))(defun c:test1 (/) (setq obf (list "A0" "A1" "A2" "A3" "A4")) (subst "A=" "A2" obf))
------------------ viele Grüße Jörn 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: 30. Okt. 2006 14:33 <-- editieren / zitieren --> Unities abgeben: Nur für JC Wasti
Hallo Wasti, also bei mit klappt beides, mit und ohne ' (getestet in der Befehlszeile). Mal ein paar Frage: - Deine Variable obf wird bei (setq obf ... ) richtig belegt? - wie sieht sie nach dem subst aus? - gibt es eine Fehlermeldung, wenn ja welche? lg Thomas
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JC Wasti Mitglied Student
Beiträge: 52 Registriert: 10.11.2004 ACADR14 Genius14 ACADM6PP alles auf WinXP
|
erstellt am: 30. Okt. 2006 14:36 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von joern bosse: Hallo Wasti, ich bin der Meinung, subst funktioniert auch bei nur Strings in Listen. Ich habe mal 2 Beispiele gemacht, und es klappt mit beiden. Beim ersten habe ich die String erst in eine Liste gepackt, dann gesubst, und dann wieder ausgepackt. Die zweite Funktion zeigt aber, das es eigentlich nicht notwendig ist.Rückgabe in beiden Fällen: ("A0" "A1" "A=" "A3" "A4") Code:
(defun c:test (/) (setq obf (list "A0" "A1" "A2" "A3" "A4")) (mapcar '(lambda (A) (car A)) (subst '("A=") '("A2") (mapcar '(lambda (A) (list A)) obf))))(defun c:test1 (/) (setq obf (list "A0" "A1" "A2" "A3" "A4")) (subst "A=" "A2" obf))
Hallo Jörn, vielen Dank für deine Antwort. Leider funktionieren deine zwei Funktionen nicht in meinem Listener! (LispWorks) Bei mir kommt immer die originale Liste zurück! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JC Wasti Mitglied Student
Beiträge: 52 Registriert: 10.11.2004 ACADR14 Genius14 ACADM6PP alles auf WinXP
|
erstellt am: 30. Okt. 2006 14:40 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von spider_dd: Hallo Wasti,also bei mit klappt beides, mit und ohne ' (getestet in der Befehlszeile). Mal ein paar Frage: - Deine Variable obf wird bei (setq obf ... ) richtig belegt? Ja die Variable wird richtig belegt! - wie sieht sie nach dem subst aus? nach dem subst sieht sie immer noch so aus wie vorher! - gibt es eine Fehlermeldung, wenn ja welche? Es gibt auch keine Fehlermeldung! Ich erstelle gerade ein eigenes LISP-Programm, also ohne ACAD! Es soll dann unabhängig vom CAD-System funktionieren! lg Thomas
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: 30. Okt. 2006 14:51 <-- editieren / zitieren --> Unities abgeben: Nur für JC Wasti
Hallo Wasti, na ein Versuch noch ohne subst: Code:
(defun c:test2 ( / obf1) (setq obf (list "A0" "A1" "A2" "A3" "A4")) (while obf (if (=(car obf)"A2") (setq obf1 (cons "A=" obf1)) (setq obf1 (cons (car obf) obf1))) (setq obf (cdr obf))) (reverse obf1))
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JC Wasti Mitglied Student
Beiträge: 52 Registriert: 10.11.2004 ACADR14 Genius14 ACADM6PP alles auf WinXP
|
erstellt am: 30. Okt. 2006 15:06 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von joern bosse: Hallo Wasti, na ein Versuch noch ohne subst:
Code:
(defun c:test2 ( / obf1) (setq obf (list "A0" "A1" "A2" "A3" "A4")) (while obf (if (=(car obf)"A2") (setq obf1 (cons "A=" obf1)) (setq obf1 (cons (car obf) obf1))) (setq obf (cdr obf))) (reverse obf1))
Danke Jörn für dein Bemühen. Du hast mich auf ne Idee gebracht. Aber so gehts auch! 10Us4U! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HPW Mitglied Holz-Techniker
Beiträge: 80 Registriert: 11.01.2005 Dell Precision T3610 Autocad 2016
|
erstellt am: 01. Nov. 2006 13:59 <-- editieren / zitieren --> Unities abgeben: Nur für JC Wasti
|
clausb Ehrenmitglied V.I.P. h.c.
Beiträge: 2914 Registriert: 20.12.2000
|
erstellt am: 01. Nov. 2006 17:54 <-- editieren / zitieren --> Unities abgeben: Nur für JC Wasti
|
JC Wasti Mitglied Student
Beiträge: 52 Registriert: 10.11.2004 ACADR14 Genius14 ACADM6PP alles auf WinXP
|
erstellt am: 03. Nov. 2006 08:24 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von clausb: Bei mir tut in Common-Lisp-Dialekten (CLISP, KCL/OneSpace Designer Modeling Lisp) der folgende Code das Gewuenschte:Code:
(setq obf (list "A0" "A1" "A2" "A3" "A4")) (substitute "A=" "A2" obf :test #'string=)
Hi Claus,
Danke für deine Antwort. Das geht echt gut und so werd ichs dann auch machen. 10U's4u. Gruß JC Wasti Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |