| |
| 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: \ durch \\ ersetzen (2289 mal gelesen)
|
tappenbeck Mitglied Vermessungsingenieur
Beiträge: 1217 Registriert: 30.05.2002 AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net
|
erstellt am: 22. Okt. 2004 12:56 <-- editieren / zitieren --> Unities abgeben:
hi ! ich möchte aus einer dos-pfadangabe eine LISP-konforme schreibweise machen und hierfür aus \ => \\ zu machen ! hierfür nutze ich eine replace-funktion (siehe unten), die eigentlich funktioniert. vielmehr habe ich das problem mit den \-zeichen. wäre klasse, wenn mir jemand von euch weiterhelfen könnte. Gruß Jan :-) hier der code (DEFUN rprof$replstr ;suchen und ersetzen eines Strings (line ;Zeichenkette oldstr ;alter String newstr ;neuer String / iline idx ;Replace Old String with New long olong nlong str1 str2 tmp1 tmp2 ) (SETQ iline line) (SETQ long (STRLEN iline) olong (STRLEN oldstr) nlong (STRLEN newstr) ) (SETQ idx 1) (IF (> olong long) (SETQ long 0) ) ; gesuchter String länger als line (WHILE (<= idx long) (IF (= (SUBSTR iline idx olong) oldstr) (PROGN (SETQ tmp1 (1- idx)) (SETQ tmp2 (+ idx olong)) (IF (<= tmp1 0) (SETQ str1 "") ; da 1. Zeichen (SETQ str1 (SUBSTR iline 1 tmp1)) ; String bis oldstr ) (SETQ str2 (SUBSTR iline tmp2)) ; String nach oldstr (SETQ iline (STRCAT str1 newstr str2)) (SETQ long (STRLEN iline)) (SETQ idx (+ idx nlong)) ) (SETQ idx (1+ idx)) ) ) (SETQ iline iline) ) ------------------ jan :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 22. Okt. 2004 13:49 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
|
tappenbeck Mitglied Vermessungsingenieur
Beiträge: 1217 Registriert: 30.05.2002 AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net
|
erstellt am: 22. Okt. 2004 14:03 <-- editieren / zitieren --> Unities abgeben:
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 24. Okt. 2004 05:45 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
|
tappenbeck Mitglied Vermessungsingenieur
Beiträge: 1217 Registriert: 30.05.2002 AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net
|
erstellt am: 25. Okt. 2004 09:16 <-- editieren / zitieren --> Unities abgeben:
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 25. Okt. 2004 09:36 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Hallo Jan, ich weiß nicht, was jetzt eine Pfadangabe im DOS-Format von einer Pfadangabe im WIN-Format (bis auf die Zeichenenzahl) unterscheidet. Die Frage war auch, wie kommt diese Pfadangabe in das Programm - eintippen/getfiled/read-line??? Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 25. Okt. 2004 11:46 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
Ich sehe das Problem immer noch nicht. Der Backslash ist in Lisp-Zeichenketten das Steuerzeichen: "c:\test" ist der Text "C:est" mit einem Tab-Vorschub nach dem Doppelpunkt, und "c:\\test" ist eine gültige Pfadangabe. Der springende Punkt ist aber der, dass Lisp durchaus in der Lage ist, einen Backslash zu lesen: *** Datei test.dat *** c:\folder\myfile.txt *** Ende Datei *** (defun test( / fhand) (setq fhand(open(findfile"test.dat")"r")) (read-line fhand) ) (test) => "c:\\folder\\myfile.txt" Wie man sieht, entsteht da überhaupt kein Problem, genausowenig wie bei (getfiled) usw., und selbst mit Scripting Host und was-weiss-ich nicht. Das einzige, was wirklich schiefgehen kann, ist das Eintippen auf der Kommandozeile oder im Code. Wenn man da ein "\t" eintippt, geht Lisp natürlich davon aus, dass man auch einen Tab meint. Ungültige Steuerzeichen werden einfach geschluckt: (setq var "c:\anyfolder") => "c:anyfolder" "\a" ist kein Steuerzeichen! Also nochmal: Dein Programm ist einfach überflüssig. In allen Fällen des Einlesens sowieso, und im Fall des Eintippens nutzt es auch nix. Gruß, Axel Strube-Zettler ------------------ (defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tappenbeck Mitglied Vermessungsingenieur
Beiträge: 1217 Registriert: 30.05.2002 AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net
|
erstellt am: 29. Okt. 2004 14:31 <-- editieren / zitieren --> Unities abgeben:
hallo axel, meine frage ist glaube ich nicht ganz sinnlos - ich hole einwenig weiter aus ! ich habe eine parameterdatei mit folgendem aufbau: (setq para1 9 para2 "Otto" para3 "c:\\mein_programm\\test.txt" .... ) diese datei wird beim programmstart gelesen mit LOAD. wenn das programm nun zuende geht, dann werden die aktuellen parameter wieder in diese datei geschrieben u.a. mit (write-line "para3" para3 fileno) im ergebnis sieht das ganze dann aber wieder so aus: ... para3 "c:\mein_programm\test.txt" ... nach dem einlesen wird nämlich intern der o.g. string durch die sonderzeichenauswertung in "c:\mein_programm\test.txt" umgewandelt ! diesen string kann ich wieder in die para-datei schreiben und sieht dann so aus "c:\mein_programm\test.txt" bis jetzt ist auch alles gut ! beim nächsten programmstart dann kommt wieder die sonderzeichenkonvertierung zu tragen und dann wird aus "c:\mein_programm\test.txt" => "c:mein_programmtest.txt" und spätestens jetzt geht alles nachfolgende den bach runter !!! ich hoffe du verstehst jetzt meine ansatz warum ich aus "\" => "\\" mit einer art suche und ersetzen machen will ! oder hast du für diesen fall eine bessere idee ??? ansonsten ein schönes wochenende. gruß Jan :-) ------------------ jan :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 29. Okt. 2004 17:55 <-- editieren / zitieren --> Unities abgeben: Nur für tappenbeck
|