| |
| 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: Nummern hochzählen (1600 mal gelesen)
|
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1146 Registriert: 20.12.2002 Autocad 2021/64B Win10 WORKSTATION Intel(R) CPU E5-1620 3.60GHz 32 GB Ram 64 Bit-Betriebssystem HP Designjet T7200 Grafik NVIDIA Quadro P4000 ZWCAD2021
|
erstellt am: 19. Okt. 2005 15:17 <-- editieren / zitieren --> Unities abgeben:
Hallo Lispler ich wieder Habe mir ein Lisp gepastel einfach (bin noch Anfänger) aber se funkt. Hat nur einen Hacken ich kann geade bis Hochzählen. (defun textzahler (aus) (setq copytext (entget aus)) (setq txt (cdr (assoc 1 copytext))) (setq txt1 (substr txt 1 1)) (setq txt2 (itoa(1+(1+(atoi(substr txt 2 1)))))) (setq txt3 (substr txt 3 1)) (setq txt4 (itoa(1+(1+(atoi(substr txt 4 1)))))) (setq txtzu (strcat txt1 txt2 txt3 txt4)) (setq neuedxf (subst (cons 1 txtzu) (assoc 1 copytext) copytext)) (entmod neuedxf) )
(defun c:text-nummer() (setvar "cmdecho" 0) (setq aus (car (entsel))) (setq elll (entget aus)) (setq txtpt (getpoint "\n neuer Textpunkt: ")) (command "_copy" (ssadd aus) "" (cdr (assoc 10 elll)) txtpt) (textzahler(entlast)) (prin1) )
mach das mit Zeichenkette und substr bitte um Hilfe wie ich das anders machen kann, das ich weiter als bis 9 Zählen kann. danke
------------------ Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 19. Okt. 2005 15:54 <-- editieren / zitieren --> Unities abgeben: Nur für Dober Heinz
|
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 19. Okt. 2005 15:58 <-- editieren / zitieren --> Unities abgeben: Nur für Dober Heinz
Zitat: Original erstellt von Dober Heinz: Hallo Lispler ich wieder Habe mir ein Lisp gepastel einfach (bin noch Anfänger) aber se funkt. Hat nur einen Hacken ich kann geade bis Hochzählen. (defun textzahler (aus) (setq copytext (entget aus)) (setq txt (cdr (assoc 1 copytext))) (setq txt1 (substr txt 1 1)) (setq txt2 (itoa(1+(1+(atoi(substr txt 2 1)))))) (setq txt3 (substr txt 3 1)) (setq txt4 (itoa(1+(1+(atoi(substr txt 4 1)))))) (setq txtzu (strcat txt1 txt2 txt3 txt4)) (setq neuedxf (subst (cons 1 txtzu) (assoc 1 copytext) copytext)) (entmod neuedxf) )
(defun c:text-nummer() (setvar "cmdecho" 0) (setq aus (car (entsel))) (setq elll (entget aus)) (setq txtpt (getpoint "\n neuer Textpunkt: ")) (command "_copy" (ssadd aus) "" (cdr (assoc 10 elll)) txtpt) (textzahler(entlast)) (prin1) )
mach das mit Zeichenkette und substr bitte um Hilfe wie ich das anders machen kann, das ich weiter als bis 9 Zählen kann. danke
irgendwie verstehe ich dein Lisp nicht ganz du holst dir aus dem gc1 eines elementes (attribut nehme ich an) den text, der scheint 4 stellig zu sein. dann splittest du ihn auf die 4 stellen auf txt1 txt2 txt3 txt4 wobei du die 1. stelle belässt, die 2. stelle um 2 erhöst, die 3. belääst du wieder und die 4. wird wieder um 2 erhöht. ??????????????????????????????? erklär uns doch bitte, was steht in dem Attribut drin, und was soll bei jedem Lisp-Aufruf passieren ????? ------------------ Ing. Anton Fuchs WWW.FFZELL.AT.TC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1146 Registriert: 20.12.2002
|
erstellt am: 19. Okt. 2005 16:06 <-- editieren / zitieren --> Unities abgeben:
@ Fuchsi Habe einen Text "M1/2" und der soll erhöht werden auf "M3/4" .... "M5/6" und so weiter, funktioniert auch so nur kann ich gerade bis Nummer 9 Hochzählen ich will aber weiter Hochzählen. Kann auch sein das ich von "M12/13" auf "M14/15" hochzählen muss. also ich nehme einen Vorhanden Text und Zähle von der vorgegebenen Zahl weiter. danke ------------------ Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 19. Okt. 2005 16:20 <-- editieren / zitieren --> Unities abgeben: Nur für Dober Heinz
z.B.: so setzt voraus, dass der string immer Mx/y lautet, wobei x und y beliebige intergerwerte sein können Code:
(setq text "M1/2") (repeat 50 (print text) (setq text (erhoehe text)) ) (defun erhoehe (text / pos zahl1 zahl2 ) (setq pos (vl-string-position (ascii "/") text)) ; wo kommt denn der / vor ??
(setq zahl1 (atoi (substr text 2 (1- pos)))) ; alles nach M und vor / (setq zahl2 (atoi (substr text (+ 2 pos)))) ; alles nach / (setq zahl1 (+ 2 zahl1)) ; erhöhen (setq zahl2 (+ 2 zahl2)) (strcat "M" (itoa zahl1) "/" (itoa zahl2)) ; und wieder zusammenbauen )
lässt man das laufen kommt folgendes raus "M1/2" "M3/4" "M5/6" "M7/8" "M9/10" "M11/12" "M13/14" "M15/16" "M17/18" "M19/20" "M21/22" "M23/24" "M25/26" "M27/28" "M29/30" "M31/32" "M33/34" "M35/36" "M37/38" "M39/40" "M41/42" "M43/44" "M45/46" "M47/48" "M49/50" "M51/52" "M53/54" "M55/56" "M57/58" "M59/60" "M61/62" "M63/64" "M65/66" "M67/68" "M69/70" "M71/72" "M73/74" "M75/76" "M77/78" "M79/80" "M81/82" "M83/84" "M85/86" "M87/88" "M89/90" "M91/92" "M93/94" "M95/96" "M97/98" "M99/100" "M101/102 [EDIT] PS.: wennst in Zukunft gleich so erklärst, tun wir uns um eineiges leichter als einen undurchschaubaren Code-Schnippsel. ------------------ Ing. Anton Fuchs WWW.FFZELL.AT.TC
[Diese Nachricht wurde von fuchsi am 19. Okt. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1146 Registriert: 20.12.2002
|
erstellt am: 19. Okt. 2005 16:23 <-- editieren / zitieren --> Unities abgeben:
|
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 19. Okt. 2005 16:29 <-- editieren / zitieren --> Unities abgeben: Nur für Dober Heinz
Zitat: Original erstellt von Dober Heinz: @ Fuchsi Habe einen Text "M1/2" und der soll erhöht werden auf "M3/4" .... "M5/6" und so weiter, funktioniert auch so nur kann ich gerade bis Nummer 9 Hochzählen ich will aber weiter Hochzählen. Kann auch sein das ich von "M12/13" auf "M14/15" hochzählen muss. also ich nehme einen Vorhanden Text und Zähle von der vorgegebenen Zahl weiter.
Hallo Heinz, Dein Problem ist schwerer zu lösen, als Du es auf den ersten Blick für wahrscheinlich hältst - außer, wenn Deine Texte immer eine sehr festgelegte Struktur haben. Das Problem ist, dass Dein LISP-Programm erkennen muss, welche Zahlen wo innerhalb Deines Textes stehen. Wenn es immer so ist, dass der Aufbau so ist: "beliebiger Text ohne Ziffern" + Ganzzahl + "/" + Ganzzahl dann ist es einfach zu lösen. Dann zerlegst Du den String in eine Liste von einzelnen Zeichen (dazu gibt's irgend eine fertige vl-??? - Funktion, vermutlich heisst sie vl-string-to-list oder so ähnlich), und die bastelst Du in Deine Komponenten zusammen, also z.B. wird aus "ABCM13/14" erst ("A" "B" "C" "M" "1" "3" "/" "1" 4") und daraus dann ("ABCM" "13" "/" "14"). Diese Teile kannst Du nun manipulieren, wobei dann via (itoa (1+ (read element))) z.B. auch aus "99" korrekt "100" wird, und dann kannst Du diese manipulierte Liste von Strings wieder mit einem simplen (apply 'STRCAT stringliste) wieder zu einem neuen String zusammen führen. Ich hoffe, das hilft Dir ein wenig - trotzdem musst Du aber in diese für einen Anfänger schon ziemlich schwere Problematik sicher noch eine Menge Hirnschmalz investieren. Gruß Tom Berger
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1146 Registriert: 20.12.2002
|
erstellt am: 19. Okt. 2005 18:26 <-- editieren / zitieren --> Unities abgeben:
|