Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Reelle Zahl in Vor- und Nachkommastelle aufspalten

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:  Reelle Zahl in Vor- und Nachkommastelle aufspalten (549 mal gelesen)
j.belzner
Mitglied
Tischler

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

Beiträge: 9
Registriert: 27.06.2006

erstellt am: 30. Jun. 2006 15: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

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



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

Beiträge: 27
Registriert: 10.03.2005

erstellt am: 30. Jun. 2006 16:09    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 j.belzner 10 Unities + Antwort hilfreich

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

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

j.belzner
Mitglied
Tischler

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

Beiträge: 9
Registriert: 27.06.2006

erstellt am: 30. Jun. 2006 16:15    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

Vielen Dank erstmal

...sieht für mich Anfänger erst mal nach chinesisch aus - werd mich aber mal reindenken! Ich melde mich wieder wenns so weit ist!

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: 30. Jun. 2006 16: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 Nur für j.belzner 10 Unities + Antwort hilfreich

@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

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

Beiträge: 9
Registriert: 27.06.2006

erstellt am: 30. Jun. 2006 17:54    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

Das Zeichen ersetzen reicht eigentlich aus - werde jetzt erst mal probieren - Danke euch allen!
Jörg

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

j.belzner
Mitglied
Tischler

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

Beiträge: 9
Registriert: 27.06.2006

erstellt am: 01. Jul. 2006 08:34    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

Hallo spider_dd,

deine Lösung war genau das was ich gesucht habe - kurz und schmerzlos!
Die anderen Tips helfen bestimmt beim nächsten Problem.
Danke euch allen!!
Jörg

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

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 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 j.belzner 10 Unities + Antwort hilfreich

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

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