| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Reelle Zahl in Vor- und Nachkommastelle aufspalten (549 mal gelesen)
|
j.belzner Mitglied Tischler
Beiträge: 9 Registriert: 27.06.2006
|
erstellt am: 30. Jun. 2006 15:47 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen! Um bestimmte Zeichnungselemente an einen Postprozessor zu übergeben, müssen diese auf einem Layer liegen in dessen Name Werte enthalten sind, die vom Programm ausgelesen werden. Als Dezimaltrennzeichen muß "_" verwendet werden. Bisher habe ich folgende Lösung: (setq w (getreal "\nWert: ")) (setq g (fix w)) (setq d (* 10 (- w g))) (setq df (fix d)) (setq g (itoa g)) (setq df (itoa df)) (command "-layer" "Machen" (strcat "Bauteil_"g"_"df)"") Leider wird hier irgendwo etwas falsch gerundet. Im Test stimmen die Ergebnisse manchmal - manchmal ist df um 1 zu klein. Erkennt jemand den Fehler? Gruß, Jörg
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
danielboukreev Mitglied
Beiträge: 27 Registriert: 10.03.2005
|
erstellt am: 30. Jun. 2006 16:09 <-- editieren / zitieren --> Unities abgeben: Nur für j.belzner
Hallo ich hab auf die schnelle mal eine kleine umwandlungsfunktion geschrieben:
Code:
(defun replacedotwith_ ;;;(replacedotwith_ 1.123211) (number / strnumber counter pos retval) (setq strnumber (rtos number)) (setq counter 1) (repeat (strlen strnumber) (if (= (substr strnumber counter 1) ".") (setq pos counter) ) (setq counter (1+ counter)) ) (setq retval (strcat (substr strnumber 1 (1- pos)) "_" (substr strnumber (1+ pos)))) retval )
ohne garantie auf fusion - und natürlich zum selberanpassen (z.b. Kommastellen mit rtos anpassen, etc) gruß danielEine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
j.belzner Mitglied Tischler
Beiträge: 9 Registriert: 27.06.2006
|
erstellt am: 30. Jun. 2006 16:15 <-- editieren / zitieren --> Unities abgeben:
|
spider_dd Mitglied
Beiträge: 1111 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 30. Jun. 2006 16:43 <-- editieren / zitieren --> Unities abgeben: Nur für j.belzner
@Daniel Den Tausch eines Zeichens (z. B. Komma gegen Punkt) habe ich früher auch so gemacht, bis ich auf das hier gestoße bin Code: (setq zeichenkette (vl-string-translate "," "." zeichenkette)))
@Jörg Wenn ich es recht überblicke willst Du aber nicht das Zeichen ersetzen, sondern die einzelnen Teile fassen. Probier mal dieses
Code:
(setq strnumber (rtos number)) (setq dezipos (vl-string-position (ascii ".") strnumber)) (setq q (substr strnumber 1 dezipos)) (setq df (substr strnumber (+ 2 dezipos))) ; fuer alle Nachkommastellen bzw. (setq df (substr strnumber (+ 2 dezipos) 1)) ; fuer nur die erste Nachkommastelle
lg und Schönes WE Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
j.belzner Mitglied Tischler
Beiträge: 9 Registriert: 27.06.2006
|
erstellt am: 30. Jun. 2006 17:54 <-- editieren / zitieren --> Unities abgeben:
|
j.belzner Mitglied Tischler
Beiträge: 9 Registriert: 27.06.2006
|
erstellt am: 01. Jul. 2006 08:34 <-- editieren / zitieren --> Unities abgeben:
|
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: 01. Jul. 2006 09:38 <-- editieren / zitieren --> Unities abgeben: Nur für j.belzner
Hallo Thomas, hallo Jörg, ich würde die Funktion von Thomas noch in 2 Punkten erweitern: 1. Ich würde den Trennstring nicht auf ein Zeichen begrenzen. 2. Ich würde eine while Schleife einbauen, damit man ein String in soviele Teile +1 zerlegen kann, wie oft der Trennstring enthalten ist. Code:
(defun string_trennen_zeichen (string trennzeichen / pos liste) (if (vl-string-search trennzeichen string) (progn (while (setq pos (vl-string-search trennzeichen string)) (setq liste (cons (substr string 1 pos) liste) string (substr string (+ pos (+ (strlen trennzeichen) 1))))) (setq liste (cons string liste)))) (reverse liste))
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |