Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

Je cherche à faire une routine pour incrementer un nombre entier, réel, alphabétique ou alphanumérique.

 

Si les nombres ne me posent pas de problème, j'ai plus de dificulté avec les lettres.

Je vous livre le bout de code en ébauche concernant celle-ci, cela "merdouille" à partir de la chaine "azz".

Si quelqu'un avait l'idée d'un algorithme, ou comment modifié le mien ou encore aborder le problème autrement.

Une suggestion ?

(defun inc_str (a_int / )
(cond
	((and (> (ascii a_int) 47) (< (ascii a_int) 57))
		(chr (1+ (ascii a_int)))
	)
	((and (> (ascii a_int) 64) (< (ascii a_int) 90))
		(chr (1+ (ascii a_int)))
	)
	((and (> (ascii a_int) 96) (< (ascii a_int) 122))
		(chr (1+ (ascii a_int)))
	)
	((= (ascii a_int) 57)
		(chr 48)
	)
	((= (ascii a_int) 90)
		(chr 65)
	)
		((= (ascii a_int) 122)
		(chr 97)
	)
	(T nil)
)
)
(defun c:numeroter ( / )
(setq n_ini "a")
(while n_ini
	(setq a_ret (inc_str (substr n_ini (strlen n_ini) 1)) n 0)
	(while (or (= a_ret "A") (= a_ret "a") (= a_ret "0"))
		(setq n (1+ n))
		(if (> (strlen n_ini) n)
			(setq
				l_tmp '()
				n_ini (strcat (substr n_ini 1 (- (strlen n_ini) n)) (apply 'strcat (repeat n (setq l_tmp (cons a_ret l_tmp)))))
				a_ret (inc_str (substr n_ini (- (strlen n_ini) n) 1))
				n_ini (strcat
					(if (> (strlen n_ini) (1+ (length l_tmp))) (substr n_ini 1 (- (strlen n_ini) (1+ (length l_tmp)))) "")
					 a_ret (substr n_ini (strlen n_ini) 1)
					)
				a_ret (if (and (/= a_ret "A") (/= a_ret "a") (/= a_ret "0")) "" a_ret)
			)
			(setq
				l_tmp '()
				n_ini (apply 'strcat (repeat (1+ (strlen n_ini)) (setq l_tmp (cons a_ret l_tmp))))
				a_ret ""
			)
		)
	)
	(if (/= a_ret "")
		(setq n_ini (strcat (substr n_ini 1 (1- (strlen n_ini))) a_ret))
	)
(grread)
	(print n_ini)
)
(prin1)
)

 

Bien sûr à l'achèvement de cette routine (si j'y arrive !), elle sera publiée sur CADxp.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Salut à Toi

c'est dimanche soir, et je te prie de m'excuser si je suis Hors Sujet

mais je tape ça vite fait pour voir si je suis dans le vrai,

je me suis borné à traiter les majuscules,

 

Mais veux tu faire une boucle qui renseigne un tableau

ou bien seulement savoir quelle chaine se trouve à la suite de la chaine connue ?

 

(setq n 65)

(setq tempo (chr n))

(alert tempo)

(while (

(setq n ( + 1 n)

tempo (chr n)

)

(alert tempo)

)

(setq n 65 n1 65)

(setq tempo (strcat (chr n)(chr n1)))

(while (

(setq n1 ( + 1 n1)

tempo (strcat (chr n)(chr n1))

)

(alert tempo)

)

 

(setq n 65 n1 65 n2 65)

 

(setq tempo (strcat (chr n)(chr n1)(chr n2)))

 

(while (

(setq n2 ( + 1 n2)

tempo (strcat (chr n)(chr n1)(chr n2))

)

(alert tempo)

)

 

(setq n 65 n1 65 n2 65 n3 65)

 

(setq tempo (strcat (chr n)(chr n1)(chr n2)(chr n3))

 

(while (

(setq n3 ( + 1 n3)

tempo (strcat (chr n)(chr n1)(chr n3))

)

(alert tempo)

)

 

à bientôt

 

amicalement

 

Posté(e)

Mon but final serait d'incrementer dans la suite logique.

Exemple:

 

pour nombre entier

5-6-7-8-9-10-11- ......

 

pour nombre réel

6.3-6.4-6.5-6.6- ......

25.56-25.57-25.58- ......

 

alphabetique

GH-GI-GJ-GK- ....

AAZ-ABA-ABC-ABD- ....

 

alphanumérique

BC8-BC9-BD0-BD1-BD2- .....

TZ08-TZ09-TZ10-TZ11- ....

 

L'incrementation devra pouvoir se faire en commencant n'importe où et non pas forcément du début.

 

J'ai essayer ton code, mais les transitions après le Z ne me convienne pas:

La suite de Z donne AB au lieu de AA

La suite de AZ donne AAB au lieu de BA

La suite de AAZ donne AAB au lieu de ABA.

 

Merci quand même pour ta reflexion

;)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

j'ai déjà dit coucou, je crois !

 

une deuxième interrogation m'interrogationne,

souhaites tu une valeur incrémentée en rapport à une autre et point final,

par exemple, derrière AZD c'est AZE

ou bien faut il prendre un point de départ quelconque et boucler jusqu'à la Saint Lisp ...

 

merci de me désinterrogationner

Beau Nuss Quad

ami qu'allemand

Posté(e)

Salut Didier

 

A...Z-AA...AZ-BA....BZ-CA....CZ ect..

 

ZZ-AAA......AAZ-ABA....ABZ-ACA....ACZ ect..

 

ZZZ-AAAA ......

 

Je ne veux pas te faire passer un test de QI, mais ceci me semble logique.

 

Un peu comme si on pouvait utiliser la fonction (lsh) avec décalage de bit sur la gauche.

 

Voilà le code tel qu'il est aujourd'hui avec la partie alphabétique qui me donne pas entière satisfaction.

(defun inc_str (a_int / )
(cond
	((and (> (ascii a_int) 47) (< (ascii a_int) 57))
		(chr (1+ (ascii a_int)))
	)
	((and (> (ascii a_int) 64) (< (ascii a_int) 90))
		(chr (1+ (ascii a_int)))
	)
	((and (> (ascii a_int) 96) (< (ascii a_int) 122))
		(chr (1+ (ascii a_int)))
	)
	((= (ascii a_int) 57)
		(chr 48)
	)
	((= (ascii a_int) 90)
		(chr 65)
	)
		((= (ascii a_int) 122)
		(chr 97)
	)
	(T nil)
)
)
(defun c:numeroter ( / )
;pour réinitialiser la commande tapez (setq n_next nil) à la ligne de commande
(setq sv_zp (getvar "dimzin"))
(setvar "dimzin" 4)
(if (not n_next)
	(setq n_ini (getstring "\nIncrementer en débutant à [chiffre/lettre/alphanumérique]: ") xn 1)
	(setq n_ini n_next)
)
(cond
	((eq (type (read n_ini)) 'INT)
		(setq n_next (itoa (1+ (atoi n_ini))))
	)
	((eq (type (read n_ini)) 'REAL)
		(setq nb 0)
		(repeat (strlen n_ini)
			(if (eq (substr n_ini (setq nb (1+ nb)) 1) ".")
				(setq nb_dec (1- (strlen (substr n_ini nb))))
			)
		)
		(setq inc 1.0)
		(repeat nb_dec (setq inc (/ inc 10)))
		(setq n_next (rtos (+ inc (atof n_ini)) 2 nb_dec))
	)
	((eq (type n_ini) 'STR)
		(setq a_ret (inc_str (substr n_ini (strlen n_ini) 1)) n 0)
		(while (or (= a_ret "A") (= a_ret "a") (= a_ret "0"))
			(setq n (1+ n))
			(if (> (strlen n_ini) n)
				(setq
					l_tmp '()
					n_ini (strcat (substr n_ini 1 (- (strlen n_ini) n)) (apply 'strcat (repeat n (setq l_tmp (cons a_ret l_tmp)))))
					a_ret (inc_str (substr n_ini (- (strlen n_ini) n) 1))
					n_ini
						(strcat
							(if (> (strlen n_ini) (1+ (length l_tmp)))
								(substr n_ini 1 (- (strlen n_ini) (1+ (length l_tmp))))
								""
							)
							a_ret (substr n_ini (strlen n_ini) 1)
						)
					a_ret (if (and (/= a_ret "A") (/= a_ret "a") (/= a_ret "0")) "" a_ret)
				)
				(setq
					l_tmp '()
					n_ini (apply 'strcat (repeat (1+ (strlen n_ini)) (setq l_tmp (cons a_ret l_tmp))))
					a_ret ""
				)
			)
		)
		(if (/= a_ret "")
			(setq n_ini (strcat (substr n_ini 1 (1- (strlen n_ini))) a_ret))
		)
		(setq n_next n_ini)
	)
)
(setvar "dimzin" sv_zp)
(print n_next)
(prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Salut

Ca n'a pas été simple pour le mettre au point mais j'ai reussi avec juste un incrément sur le texte de +1.

J'ai regardé pour faire un incrément au choix (de +2, +3 ou autres), mais je n'ai pas encore réussi

 

ex : (inc_txt "AAB") retourne "AAC"

ex : (inc_txt "AAZ") retourne "ABA"

ex : (inc_txt "AZZ") retourne "BAA"

ex : (inc_txt "YZZ") retourne "ZAA"

ex : (inc_txt "ZZZ") retourne "AAAA"

 

@+

 

(defun inc_txt(Txt / Boucle Decalage Val_Txt)
 (setq Boucle 1 Val_txt "")
 (while (<= Boucle (strlen Txt))
   (setq Ascii_Txt (vl-string-elt Txt (- (strlen Txt) Boucle)))
   (if (not Decalage)
     (setq Ascii_Txt (1+ Ascii_Txt))
   )
   (if (= Ascii_Txt 91)
     (setq Ascii_Txt 65 Decalage nil)
     (setq Decalage T)
   )
   (setq Val_Txt (strcat (chr Ascii_Txt) Val_Txt))
   (setq Boucle (1+ Boucle))
 )
 (if (not Decalage)
   (setq Val_Txt (strcat "A" Val_Txt))
 )
 Val_Txt
)

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Un seul mot Patrick_35

 

EXCELLENT!!!!

 

Moi qui m'embrouillais les méninges dans des méandres pas possible, tu as fais un algorithme qui fonctionne à merveille.

 

Je veux bien croire que cela n'a pas été simple.

Merci pour ce GROS coup de pouce.

 

J'ai modifié légèrement ton code pour différencier majuscule, minuscule et chiffre.

 

Donc en final ça donnerait ceci, une bonne base pour faire n'importe quoi par la suite (Attribut de bloc, texte) et ce, dans des domaines multiples.

(defun inc_txt (Txt / Boucle Decalage Val_Txt)
(setq Boucle 1 Val_txt "")
(while (<= Boucle (strlen Txt))
	(setq Ascii_Txt (vl-string-elt Txt (- (strlen Txt) Boucle)))
	(if (not Decalage)
		(setq Ascii_Txt (1+ Ascii_Txt))
	)
	(if (or (= Ascii_Txt 58) (= Ascii_Txt 91) (= Ascii_Txt 123))
		(setq
			Ascii_Txt 
				(cond
					((= Ascii_Txt 58) 48)
					((= Ascii_Txt 91) 65)
					((= Ascii_Txt 123) 97)
				)
			Decalage nil
		)
		(setq Decalage T)
	)
	(setq Val_Txt (strcat (chr Ascii_Txt) Val_Txt))
	(setq Boucle (1+ Boucle))
)
(if (not Decalage)
	(setq Val_Txt (strcat (cond ((< Ascii_Txt 58) "0") ((< Ascii_Txt 91) "A") ((< Ascii_Txt 123) "a")) Val_Txt))
)
Val_Txt
)
(defun c:numeroter ( / sv_zp n_ini nb nb_dec inc)
;;
;;Tapez (setq n_next nil) à la ligne de commande
;;pour faire une autre incrementation
;;
(setq sv_zp (getvar "dimzin"))
(setvar "dimzin" 4)
(if (not n_next)
	(setq n_ini (getstring "\nIncrementer en débutant à [chiffre/lettre/alphanumérique]: "))
	(setq n_ini n_next)
)
(cond
	((eq (type (read n_ini)) 'INT)
		(setq n_next (itoa (1+ (atoi n_ini))))
	)
	((eq (type (read n_ini)) 'REAL)
		(setq nb 0)
		(repeat (strlen n_ini)
			(if (eq (substr n_ini (setq nb (1+ nb)) 1) ".")
				(setq nb_dec (1- (strlen (substr n_ini nb))))
			)
		)
		(setq inc 1.0)
		(repeat nb_dec (setq inc (/ inc 10)))
		(setq n_next (rtos (+ inc (atof n_ini)) 2 nb_dec))
	)
	((eq (type n_ini) 'STR)
		(setq n_next (inc_txt n_ini))
	)
)
(setvar "dimzin" sv_zp)
(print n_next)
(prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Bonjour,

la fonciton numeroter fonctionne très bien, c'est que je recherchais depuis longtemps

 

mais comment l'intégrer à une routine complète avec la valeur d'attribut d'un bloc?

merci

Posté(e)

Les applications pouvant être multiples, j'écris celle-ci (attribut) et c'est tout, à moins que d'autres veulent s'y coller.

 

Il ne faudra pas demander, par la suite pour du texte, un autre pour une cotation de rappel, un autre pour des attributs multiples, un autre pour une indexation de fichier ou que sais-je encore...!

 

Voici l' exemple à améliorer et à tester :

(defun inc_txt (Txt / Boucle Decalage Val_Txt)
(setq Boucle 1 Val_txt "")
(while (<= Boucle (strlen Txt))
	(setq Ascii_Txt (vl-string-elt Txt (- (strlen Txt) Boucle)))
	(if (not Decalage)
		(setq Ascii_Txt (1+ Ascii_Txt))
	)
	(if (or (= Ascii_Txt 58) (= Ascii_Txt 91) (= Ascii_Txt 123))
		(setq
			Ascii_Txt 
				(cond
					((= Ascii_Txt 58) 48)
					((= Ascii_Txt 91) 65)
					((= Ascii_Txt 123) 97)
				)
			Decalage nil
		)
		(setq Decalage T)
	)
	(setq Val_Txt (strcat (chr Ascii_Txt) Val_Txt))
	(setq Boucle (1+ Boucle))
)
(if (not Decalage)
	(setq Val_Txt (strcat (cond ((< Ascii_Txt 58) "0") ((< Ascii_Txt 91) "A") ((< Ascii_Txt 123) "a")) Val_Txt))
)
Val_Txt
)
(defun c:numerotation (/ all_path end_pos id_path pto x y z sv_zp n_ini nb nb_dec inc)
    (if (not (tblsearch "LAYER" "numerotation"))
      (entmake	'((0 . "LAYER")
	  (100 . "AcDbSymbolTableRecord")
	  (100 . "AcDbLayerTableRecord")
	  (2 . "numerotation")
	  (70 . 0)
	  (62 . 7)
	  (6 . "Continuous")
	  (290 . 1)
	  (370 . -3)
	 )
      )
    )
    (if (not (tblsearch "STYLE" "$numerotation"))
     (progn
       (setq all_path (getenv "ACAD") n 0)
       (while (setq end_pos (vl-string-position (ascii ";") all_path))
 (setq id_path (substr all_path 1 end_pos))
 (if (wcmatch (strcase id_path) "*FONTS*")
   (setq fonts_path (strcat id_path "\\"))
 )
        (setq all_path (substr all_path (+ 2 end_pos)))
      )
      (setq file_shx (getfiled "Selectionnez un fichier de police" fonts_path "shx" 8))
      (if (not file_shx) (setq file_shx "txt.shx"))
      (entmake
	(append
	'((0 . "STYLE")
	  (5 . "40")
	  (100 . "AcDbSymbolTableRecord")
	  (100 . "AcDbTextStyleTableRecord")
	  (2 . "$numerotation")
	  (70 . 0)
	  (40 . 0.0)
	  (41 . 1.0)
	  (50 . 0.0)
	  (71 . 0)
	  (42 . 2.5)
	  (4 . "")
	 )
	 (list (cons 3 file_shx))
	)
      )
     )
    )
    (setvar "textstyle" "$numerotation")
    (if (not (tblsearch "BLOCK" "$numero"))
      (progn
 (initget 7)
 (setq ht (getdist "\nEntrez la hauteur du texte: "))
 (entmake
   '((0 . "BLOCK") (2 . "$numero") (70 . 2) (10 0.0 0.0 0.0))
 )
 (entmake
	(append
	    '((0 . "ATTDEF")
	    (67 . 0)
	    (8 . "numerotation")
	    (62 . 0)
	    (10 0.0 0.0 0.0)
	    (40 . 1.0)
	    (1 . "0")
	    (50 . 0.0)
	    (41 . 1.0)
	    (51 . 0.0)
	    (7 . "$numerotation")
	    (210 0.0 0.0 1.0)
	    (3 . "Numéro ?: ")
	    (2 . "NO")
	    (70 . 0)
	   )
	   (list (cons 40 ht))
	)
 )
 (entmake '((0 . "ENDBLK")))
      )

    )
(setq sv_zp (getvar "dimzin"))
(setvar "dimzin" 3)
(if (not n_next)
	(setq n_ini (getstring "\nIncrementer en débutant à [chiffre/lettre/alphanumérique]: ") n_next n_ini)
	(progn
		(initget "Oui Non _Yes No")
		(if (eq (getkword "\nRéinitialiser l'incrémentation [Oui/Non] : ") "Yes")
			(setq n_ini (getstring "\nIncrementer en débutant à [chiffre/lettre/alphanumérique]: ") n_next n_ini)
			(setq n_ini n_next)
		)
	)
)
    (initget 8)
    (while (setq pto (getpoint "\nSpécifiez l'emplacement du numéro: "))
      (setq pto (trans pto 1 0)
     x	 (car pto)
     y	 (cadr pto)
     z	 (caddr pto)
      )
      (entmake
 (append
   '((0 . "INSERT")
     (100 . "AcDbEntity")
     (67 . 0)
     (410 . "Model")
     (8 . "0")
     (100 . "AcDbBlockReference")
     (50 . 0)
     (66 . 1)
     (2 . "$numero")
     (41 . 1.0)
     (42 . 1.0)
     (43 . 1.0)
     (70 . 0)
     (71 . 0)
     (44 . 0.0)
     (45 . 0.0)
     (210 0.0 0.0 1.0)
    )
   (list (cons 10 pto))
 )
      )
      (entmake
 (append
   '((0 . "ATTRIB")
     (100 . "AcDbEntity")
     (67 . 0)
     (410 . "Model")
     (8 . "numerotation")
     (62 . 0)
     (100 . "AcDbText")
     (41 . 1.0)
     (51 . 0.0)
     (7 . "$numerotation")
     (71 . 0)
     (72 . 0)
     (11 0.0 0.0 0.0)
     (210 0.0 0.0 1.0)
     (100 . "AcDbAttribute")
     (2 . "NO")
     (70 . 0)
     (73 . 0)
     (74 . 0)
    )
   (list (cons 1 n_next))
   (list (cons 10 pto))
   (list (cons 40 ht))
   (list (cons 50 (atan (/ (cadr (getvar "UCSXDIR")) (car (getvar "UCSXDIR"))))))
 )
      )
      (entmake '((0 . "SEQEND")))
(setq n_ini n_next)
(cond
	((eq (type (read n_ini)) 'INT)
		(setq n_next (itoa (1+ (atoi n_ini))))
	)
	((eq (type (read n_ini)) 'REAL)
		(setq nb 0)
		(repeat (strlen n_ini)
			(if (eq (substr n_ini (setq nb (1+ nb)) 1) ".")
				(setq nb_dec (1- (strlen (substr n_ini nb))))
			)
		)
		(setq inc 1.0)
		(repeat nb_dec (setq inc (/ inc 10)))
		(setq n_next (rtos (+ inc (atof n_ini)) 2 nb_dec))
	)
	((eq (type n_ini) 'STR)
		(setq n_next (inc_txt n_ini))
	)
)
      (initget 8)
    )
(setvar "dimzin" sv_zp)
 (princ)
)

 

 

[Edité le 13/5/2005 par bonuscad]

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

bonjour,

 

étant débutant dans le lisp, j'aurais juste une petite question.

 

Quelles applications utilisez vous pour développe vos lisp ??

 

bonne journée

 

 

:calim: === ;) ..... CHRIS ..... ;) === :calim:

Posté(e)

Pour cbtrm

Avec l'editeur visual lisp (_vlide sur la ligne de commande) ou avec le bloc note (notepad)

 

Pour Michel66

Pour incrémenter sur des attributs et en reprenant ce qu'a fait Bonus

 

@+

 

(defun c:iat(/ Boucle Ent Js inc n_ini nb nb_dec old_error)

 (defun erriat(msg)
   (if (/= msg "Function cancelled")
     (if (= msg "quit / exit abort")
       (princ)
       (princ (strcat "\nErreur : " msg))
     )
     (princ)
   )
   (setq Boucle 0)
   (while (ssname Js Boucle)
     (redraw (ssname Js Boucle) 4)
     (setq Boucle (1+ Boucle))
   )
   (setq *error* old_error)
   (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
   (princ)
 )

 (defun inc_txt (Txt / Ascii_Tx Boucle Decalage Val_Txt)
   (setq Boucle 1 Val_txt "")
   (while (<= Boucle (strlen Txt))
     (setq Ascii_Txt (vl-string-elt Txt (- (strlen Txt) Boucle)))
     (if (not Decalage)
       (setq Ascii_Txt (1+ Ascii_Txt))
     )
     (if (or (= Ascii_Txt 58) (= Ascii_Txt 91) (= Ascii_Txt 123))
       (setq
         Ascii_Txt 
         (cond
           ((= Ascii_Txt 58) 48)
           ((= Ascii_Txt 91) 65)
           ((= Ascii_Txt 123) 97)
         )
         Decalage nil
       )
       (setq Decalage T)
     )
     (setq Val_Txt (strcat (chr Ascii_Txt) Val_Txt))
     (setq Boucle (1+ Boucle))
   )
   (if (not Decalage)
     (setq Val_Txt (strcat (cond ((< Ascii_Txt 58) "0") ((< Ascii_Txt 91) "A") ((< Ascii_Txt 123) "a")) Val_Txt))
   )
   Val_Txt
 )

 (defun Trouve(Tbl Ent / Boucle Rech)
   (setq Boucle 0 Rech nil)
   (while (ssname Tbl Boucle)
     (if (eq (ssname Tbl Boucle) Ent)
       (setq Rech T Boucle (1+ (sslength Tbl)))
     )
     (setq Boucle (1+ Boucle))
   )
   Rech
 )

 (defun select (Js / Ajout Boucle Ent Texte)
   (setq Ent "" Ajout T)
   (while Ent
     (initget "Ajouter Retirer Supprimer")
     (if Ajout
       (setq Texte (strcat "\nSélectionner les attributs (" (itoa (sslength Js)) " sélectionné(s)) : "))
       (setq Texte (strcat "\nRetirer les attributs (" (itoa (sslength Js)) " sélectionné(s)) : "))
     )
     (if (setq Ent (nentsel Texte))
       (cond
         ((= Ent "")
           (setq Ent nil)
         )
         ((= Ent "Ajouter")
           (setq Ajout T)
         )
         ((or (= Ent "Retirer")(= Ent "Supprimer"))
           (setq Ajout nil)
         )
         ((= (cdr (assoc 0 (entget (car ent)))) "ATTRIB")
           (if Ajout
             (progn
               (if (not (Trouve Js (car Ent)))
                 (progn
                   (setq Js (ssadd (car Ent) Js))
                   (redraw (car Ent) 3)
                 )
               )
             )
             (progn
               (if (Trouve Js (car Ent))
                 (progn
                   (setq Js (ssdel (car Ent) Js))
                   (redraw (car Ent) 4)
                 )
               )
             )
           )
         )
       )
     )
   )
   Js
 )

 (vl-load-com)
 (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
 (setq Old_Error *error* *error* erriat)
 (setq Js (select (ssadd)))
 (if (setq n_ini (getstring "\nIncrementer en débutant à [chiffre/lettre/alphanumérique] : "))
   (progn
     (setq Boucle 0)
     (while (ssname Js Boucle)
       (setq Ent (entget (ssname Js Boucle)))
       (setq Ent (subst (cons 1 n_ini) (assoc 1 Ent) Ent))
       (entmod Ent)
       (redraw (cdr (assoc -1 Ent)) 4)
       (entupd (cdr (assoc -1 Ent)))
       (cond
         ((eq (type (read n_ini)) 'INT)
           (setq n_ini (itoa (1+ (atoi n_ini))))
         )
         ((eq (type (read n_ini)) 'REAL)
           (setq nb 0)
           (repeat (strlen n_ini)
             (if (eq (substr n_ini (setq nb (1+ nb)) 1) ".")
               (setq nb_dec (1- (strlen (substr n_ini nb))))
             )
           )
           (setq inc 1.0)
           (repeat nb_dec (setq inc (/ inc 10)))
           (setq n_ini (rtos (+ inc (atof n_ini)) 2 nb_dec))
         )
         ((eq (type n_ini) 'STR)
           (setq n_ini (inc_txt n_ini))
         )
       )
       (setq Boucle (1+ Boucle))
     )
   )
 )
 (setq *error* Old_Error)
 (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
 (princ)
)

 

[Edité le 17/5/2005 par Patrick_35]

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

  • 1 an après...
Posté(e)

Helas, ceci n'est pas un script mais un lisp, cela ne fonctionne pas sur LT :(

L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
"Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok.
"ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana

Ma bibliothèque de blocs électrique :symbole elec.dwg

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité