(gile) Posté(e) le 13 février 2008 Posté(e) le 13 février 2008 Salut, Dans un soucis de plus grande polyvalence, j'ai un peu peaufiné la routine donnée ici.L'argument alpha, qui permet de déterminer quels caractères doivent être considérés comme suffixe, accepte désormais comme valeur un entier de 1 à 7 : la somme des codes binaires suivant:1 pour les caractères numériques [0-9]2 pour les caractères alphabétiques majuscules [A-Z]4 pour les caractères alphabétiques minuscules [a-z] Ceci permet donc toutes les combinaisons possibles. Un exemple d'utilisation est joint après la routine.INCSUF (avec un seul F), qui permet d'incrémenter les suffixes de textes, mtextes et attributs sélectionnés en fonctions des paramètres courant (modifiables évidemment). EDIT : le changement des paramètre se fait dans une petite boite de dialogue. EDIT 2 : améliorations de l'interface de INCSUF. EDIT 3 : Nouvelle boite de dialogue pour les modifications de paramètres ;; INCSUFF (version 1.2) -Gilles Chanteau- 15/01/08 ;; Incrémente le suffixe d'une chaîne de caractères de la valeur spécifiée. ;; Est pris en compte comme suffixe, l'ensemble des caractères [0-9] et/ou [A-Z] ;; et/ou [a-z] depuis la fin du texte, en fonction de la valeur de alpha ;; ;; Arguments ;; str : une chaîne avec un suffixe valide ;; inc : un entier positif ;; alpha : un entier, somme des codes binaires suivant ;; 1 pour les caractères [0-9] ;; 2 pour les caractères [A-Z] ;; 4 pour les caractères [a-z] ;; ;; Retour ;; la chaîne avec son suffixe incrémenté (ou nil si aucun suffixe valide) ;; ;; Exemples : ;; (incsuff "N°002" 12 1) = "N°014" ;; (incsuff "Dessin9" 1 1) = "Dessin10" ;; (incsuff "test_ZZ9" 1 3) = "test_AAA0" ;; (incsuff "test_ZZ9" 1 1) = "test_ZZ10" ;; (incsuff "12-" 1 1) = nil ;; ;; Modification (13/02/08) : codes binaires pour l'argument alpha (defun incsuff (str inc alpha / lst crt pas ind dep quo ret) (setq lst (reverse (vl-string->list str))) (while (and (setq crt (car lst)) (cond ((and ( (setq pas 10 ind 48 ) ) ((and ( (setq pas 26 ind 65 ) ) ((and ( (setq pas 26 ind 97 ) ) (( (setq crt (if (= 10 pas) ind (1- ind) ) lst (cons (car lst) lst) ) ) ) ) (setq dep (- crt ind) quo (/ (+ dep inc) pas) ret (cons (+ ind (rem (+ dep inc) pas)) ret) ) (if (zerop quo) (setq ret (append (reverse (cdr lst)) ret) lst nil ) (if (cdr lst) (setq lst (cdr lst) inc quo ) (setq lst (list ind) inc (if (= 10 pas) quo (1- quo) ) ) ) ) ) (if ret (vl-list->string ret) ) ) ;;==================================================;; ;; INCSUF (gile) 13/02/08 ;; Incrémente le suffixe des textes, mtextes ou attributs successivement sélectionnés. ;; Le suffixe est déterminé automatiquement en fonction de la nature des caracères qui ;; le compose et du paramètre "Type(s) de caratère du suffixe" courant. ;; L'utilisateur peut modifier les paramètres courants dans une boite dialogue. (defun c:incsuf (/ ValidSel IncsuffInputbox ent elst typ val suf inc tag save input) (defun ValidSel (elst / val) (setq val (cdr (assoc 1 elst)) val (ascii (substr val (strlen val))) ) (or (and (= 1 (logand 1 *suffixbin*)) ( (and (= 2 (logand 2 *suffixbin*)) ( (and (= 4 (logand 4 *suffixbin*)) ( ) ) (defun IncsuffInputbox (typ inc / temp file dcl_id lst) (setq temp (vl-filename-mktemp "Tmp.dcl") file (open temp "w") ) (write-line (strcat "IncsuffInputbox:dialog{label=\"Paramètres\";" ":boxed_column{label=\"Type(s) de caractère du suffixe\";" ":toggle{label=\"Nombres [0-9]\";key=\"num\";}" ":toggle{label=\"Majuscules [A-Z]\";key=\"maj\";}" ":toggle{label=\"Minuscules [a-z]\";key=\"min\";}}" "spacer;:edit_box{label=\"Incrément\";key=\"inc\";" "edit_width=6;allow_accept=true;}spacer;ok_cancel; }") file ) (close file) (setq dcl_id (load_dialog temp)) (if (not (new_dialog "IncsuffInputbox" dcl_id)) (exit) ) (if (= 1 (logand 1 typ)) (set_tile "num" "1") ) (if (= 2 (logand 2 typ)) (set_tile "maj" "1") ) (if (= 4 (logand 4 typ)) (set_tile "min" "1") ) (set_tile "inc" (itoa inc)) (action_tile "accept" "(setq typ (+ (if (= (get_tile \"num\") \"1\") 1 0) (if (= (get_tile \"maj\") \"1\") 2 0) (if (= (get_tile \"min\") \"1\") 4 0)) inc (read (get_tile \"inc\"))) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete temp) (list typ inc) ) (or *suffixbin* (setq *suffixbin* 1)) (or *incrvalue* (setq *incrvalue* 1)) (princ (strcat "\nParamètres courants: Suffixe (code binaire) = " (itoa *suffixbin*) ", Incrément = " (itoa *incrvalue*) ) ) (while (not (and (or (initget 1 "Paramètres") (setq ent (nentsel "\nSélectionnez le texte de départ ou [Paramètres]: " ) ) ) (= (type ent) 'LIST) (setq elst (entget (car ent))) (setq typ (cdr (assoc 0 elst))) (member typ '("ATTRIB" "TEXT" "MTEXT")) (setq val (cdr (assoc 1 elst))) ) ) (if (= ent "Paramètres") (while (not (and (setq input (IncsuffInputbox *suffixbin* *incrvalue*)) ( (setq *suffixbin* (car input)) (= (type (cadr input)) 'INT) ( (setq *incrvalue* (cadr input)) ) ) (if (zerop (car input)) (alert "Au moins un type de caractère doit être coché.") (alert "L'incrément doit être un entier positif non nul.") ) ) ) ) (if (ValidSel elst) (progn (if (= typ "ATTRIB") (setq tag (cdr (assoc 2 elst))) ) (while (or (initget 1 "annUler") (setq ent (nentsel (strcat "\nSélectionnez le texte suivant" (if save " ou [annUler]: " ":" ) ) ) ) ) (if (= ent "annUler") (if save (progn (setq elst (entget (caar save))) (entmod (subst (cons 1 (cdar save)) (assoc 1 elst) elst)) (entupd (cdr (assoc 330 elst))) (setq val (incsuff val (- *incrvalue*) *suffixbin*) save (cdr save) ) ) (princ "\nPlus rien à annuler.") ) (if (and (setq elst (entget (car ent))) (= (cdr (assoc 0 elst)) typ) ) (if (= typ "ATTRIB") (and (= (cdr (assoc 2 elst)) tag) (setq save (cons (cons (car ent) (cdr (assoc 1 elst))) save) val (incsuff val *incrvalue* *suffixbin*) ) (entmod (subst (cons 1 val) (assoc 1 elst) elst)) (entupd (cdr (assoc 330 elst))) ) (and (setq save (cons (cons (car ent) (cdr (assoc 1 elst))) save) val (incsuff val *incrvalue* *suffixbin*) ) (entmod (subst (cons 1 val) (assoc 1 elst) elst)) ) ) ) ) ) ) (princ "\nParamètre de suffixe incorrect.") ) (princ) ) [Edité le 13/2/2008 par (gile)][Edité le 13/2/2008 par (gile)] [Edité le 14/2/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
richard-c Posté(e) le 13 février 2008 Posté(e) le 13 février 2008 bonjour (gille) incsuf fonctionne bien, il faut penser à mettre incsuff dans le premier pour que cela fonctionne. une petite case de dialogue (avec un exemple) au lancement pour régler les paramètres serait peut être la bienvenue, car certains utilisateurs (qui ne font pas de lisp ) ne vont jamais dans un programme ou ne lisent pas les info que tu donnes. (exmple : moi, je ne les ai pas lu la 1ère fois que j'ai lancé le lisp.) c'est super. A+
(gile) Posté(e) le 13 février 2008 Auteur Posté(e) le 13 février 2008 Salut, Merci pour le test, j'ai répondu à ta demande avec un petite boite dialogue pour les changements de paramètres. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
richard-c Posté(e) le 13 février 2008 Posté(e) le 13 février 2008 nickel, j'ai rectifié sur le programme en ma possession et je te laisse le soin de le faire sur l'original => [surligneur] 4 et non 3 pour [a-z][/surligneur] merci et A+
(gile) Posté(e) le 13 février 2008 Auteur Posté(e) le 13 février 2008 Non, Richard, ce sont des codes binaires, c'est donc bien 4 pour les minuscules. Si tu met 3 comme valeur, ça correspond à 1+2 soit les nombres (1) plus les majuscules (2) et sera considéré comme suffixe l'ensemble des caractères numériques et/ou minuscules à partir de la fin du texte. 1 -> Nombres [0-9]2 -> Majuscules [A-Z]3 -> (1.2) Nombres et/ou Majuscules [0-9,A-Z]4 -> Minuscules [a-z]5 -> (1+4) Nombres et/ou Minuscules [0-9,a-z]6 -> (2+4) Majuscules et/ou Minuscules [A-Z,a-z]7 -> (1+2+4) Nombres et/ou Majuscules et/ou Minuscules [0-9,A-Z,a-z] [Edité le 13/2/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 13 février 2008 Posté(e) le 13 février 2008 Bonsoir à toutes et tous, Comme d'habitude, tout bonnement [surligneur] génial.[/surligneur] Merci (gile) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 13 février 2008 Auteur Posté(e) le 13 février 2008 J'ai apporté quelque améliorations en cas de sélection malencontreuse de la part de l'utilisateur et la possibilité d'annuler. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 13 février 2008 Auteur Posté(e) le 13 février 2008 Une nouvelle boite de dialogue pour changer les paramètres courants avec des cases à cocher pour éviter les confusions avec les codes binaires. http://img292.imageshack.us/img292/2263/incsuffvq9.png Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
richard-c Posté(e) le 14 février 2008 Posté(e) le 14 février 2008 bonjour (gille), excuse moi mais il était écrit 3 et non 4 sur la ligne : ":text_part{label=\"1 = [0-9] 2 = [A-Z] [surligneur] 3[/surligneur] = [a-z]\";}}" merci encore pour tes programmes. A+
richard-c Posté(e) le 14 février 2008 Posté(e) le 14 février 2008 encore moi, ne serait il pas possible que la case de dialogue arrive quand on lance le programme plutot que de taper P au clavier, pour éviter la phrase Paramètre de suffixe incorrect si on se trompe. De même, quand on active une case, n'est il pas possible que la case cochée précedement se décoche. A+
(gile) Posté(e) le 14 février 2008 Auteur Posté(e) le 14 février 2008 Salut Richard, Tout d'abord excuse moi, j'avais lu ta réponse à l'envers :P ne serait il pas possible que la case de dialogue arrive quand on lance le programme plutot que de taper P au clavier Oui, c'est possible, j'avais fait le choix de ne la mettre qu'en option parce que je pense que dans l'immense majorité des cas, le suffixe est un nombre et l'incrément 1 et que les dernières valeurs sont conservées dans le dessin pendant la session. Les valeurs courantes étant indiquées sur la ligne de commande à chaque lancement de la fonction. Ce choix évite d'avoir à valider la boite de dialogue à chaque fois.Je met quand même ci-dessous une version qui ouvre systématiquement sur la boite de dialogue. quand on active une case, n'est il pas possible que la case cochée précedement se décoche Ça aussi c'est possible, en remplaçant les cases à cocher (toggle) par des boutons radio (radio_button). Mais en faisant cela on s'enlève toute possibilité de combiner différents types de caractères (un seul bouton à la fois).donc je ne ferais pas cette modif, mais libre à chacun de le faire en remplaçant les 3 toggle par 3 radio_button dans l'expression : (write-line(strcat"IncsuffInputbox:dialog{label=\"Paramètres\";"":boxed_column{label=\"Type(s) de caractère du suffixe\";"":toggle{label=\"Nombres [0-9]\";key=\"num\";}"":toggle{label=\"Majuscules [A-Z]\";key=\"maj\";}"":toggle{label=\"Minuscules [a-z]\";key=\"min\";}}""spacer;:edit_box{label=\"Incrément\";key=\"inc\";""edit_width=6;allow_accept=true;}spacer;ok_cancel; }")file) Version avec ouverture systématique de la boite de dialogue au lancement de la commande. ;; INCSUFF (version 1.2) -Gilles Chanteau- 15/01/08 ;; Incrémente le suffixe d'une chaîne de caractères de la valeur spécifiée. ;; Est pris en compte comme suffixe, l'ensemble des caractères [0-9] et/ou [A-Z] ;; et/ou [a-z] depuis la fin du texte, en fonction de la valeur de alpha ;; ;; Arguments ;; str : une chaîne avec un suffixe valide ;; inc : un entier positif ;; alpha : un entier, somme des codes binaires suivant ;; 1 pour les caractères [0-9] ;; 2 pour les caractères [A-Z] ;; 4 pour les caractères [a-z] ;; ;; Retour ;; la chaîne avec son suffixe incrémenté (ou nil si aucun suffixe valide) ;; ;; Exemples : ;; (incsuff "N°002" 12 1) = "N°014" ;; (incsuff "Dessin9" 1 1) = "Dessin10" ;; (incsuff "test_ZZ9" 1 3) = "test_AAA0" ;; (incsuff "test_ZZ9" 1 1) = "test_ZZ10" ;; (incsuff "12-" 1 1) = nil ;; ;; Modification (13/02/08) : codes binaires pour l'argument alpha (defun incsuff (str inc alpha / lst crt pas ind dep quo ret) (setq lst (reverse (vl-string->list str))) (while (and (setq crt (car lst)) (cond ((and ( (setq pas 10 ind 48 ) ) ((and ( (setq pas 26 ind 65 ) ) ((and ( (setq pas 26 ind 97 ) ) (( (setq crt (if (= 10 pas) ind (1- ind) ) lst (cons (car lst) lst) ) ) ) ) (setq dep (- crt ind) quo (/ (+ dep inc) pas) ret (cons (+ ind (rem (+ dep inc) pas)) ret) ) (if (zerop quo) (setq ret (append (reverse (cdr lst)) ret) lst nil ) (if (cdr lst) (setq lst (cdr lst) inc quo ) (setq lst (list ind) inc (if (= 10 pas) quo (1- quo) ) ) ) ) ) (if ret (vl-list->string ret) ) ) ;;==================================================;; ;; INCSUF (gile) 14/02/08 -version 2.0- ;; Incrémente le suffixe des textes, mtextes ou attributs successivement sélectionnés. ;; Le suffixe est déterminé automatiquement en fonction de la nature des caracères qui ;; le compose et du paramètre "Type(s) de caratère du suffixe" courant. ;; L'utilisateur peut modifier les paramètres courants dans une boite dialogue. (defun c:incsuf (/ ValidSel IncsuffInputbox ent elst typ val suf inc tag save) (defun ValidSel (elst / val) (setq val (cdr (assoc 1 elst)) val (ascii (substr val (strlen val))) ) (or (and (= 1 (logand 1 *suffixbin*)) ( (and (= 2 (logand 2 *suffixbin*)) ( (and (= 4 (logand 4 *suffixbin*)) ( ) ) (defun IncsuffInputbox (typ inc / temp file dcl_id lst) (setq temp (vl-filename-mktemp "Tmp.dcl") file (open temp "w") ) (write-line (strcat "IncsuffInputbox:dialog{label=\"Paramètres\";" ":boxed_column{label=\"Type(s) de caractère du suffixe\";" ":toggle{label=\"Nombres [0-9]\";key=\"num\";}" ":toggle{label=\"Majuscules [A-Z]\";key=\"maj\";}" ":toggle{label=\"Minuscules [a-z]\";key=\"min\";}}" "spacer;:edit_box{label=\"Incrément\";key=\"inc\";" "edit_width=6;allow_accept=true;}spacer;ok_only; }") file ) (close file) (setq dcl_id (load_dialog temp)) (if (not (new_dialog "IncsuffInputbox" dcl_id)) (exit) ) (if (= 1 (logand 1 typ)) (set_tile "num" "1") ) (if (= 2 (logand 2 typ)) (set_tile "maj" "1") ) (if (= 4 (logand 4 typ)) (set_tile "min" "1") ) (set_tile "inc" (itoa inc)) (action_tile "accept" "(setq typ (+ (if (= (get_tile \"num\") \"1\") 1 0) (if (= (get_tile \"maj\") \"1\") 2 0) (if (= (get_tile \"min\") \"1\") 4 0)) inc (read (get_tile \"inc\"))) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete temp) (list typ inc) ) (or *suffixbin* (setq *suffixbin* 1)) (or *incrvalue* (setq *incrvalue* 1)) (while (not (and (setq input (IncsuffInputbox *suffixbin* *incrvalue*)) ( (setq *suffixbin* (car input)) (= (type (cadr input)) 'INT) ( (setq *incrvalue* (cadr input)) ) ) (if (zerop (car input)) (alert "Au moins un type de caractère doit être coché.") (alert "L'incrément doit être un entier positif non nul.") ) ) (while (not (and (setq ent (nentsel "\nSélectionnez le texte de départ: " ) ) (setq elst (entget (car ent))) (setq typ (cdr (assoc 0 elst))) (member typ '("ATTRIB" "TEXT" "MTEXT")) (setq val (cdr (assoc 1 elst))) ) ) ) (if (ValidSel elst) (progn (if (= typ "ATTRIB") (setq tag (cdr (assoc 2 elst))) ) (while (or (initget 1 "annUler") (setq ent (nentsel (strcat "\nSélectionnez le texte suivant" (if save " ou [annUler]: " ":" ) ) ) ) ) (if (= ent "annUler") (if save (progn (setq elst (entget (caar save))) (entmod (subst (cons 1 (cdar save)) (assoc 1 elst) elst)) (entupd (cdr (assoc 330 elst))) (setq val (incsuff val (- *incrvalue*) *suffixbin*) save (cdr save) ) ) (princ "\nPlus rien à annuler.") ) (if (and (setq elst (entget (car ent))) (= (cdr (assoc 0 elst)) typ) ) (if (= typ "ATTRIB") (and (= (cdr (assoc 2 elst)) tag) (setq save (cons (cons (car ent) (cdr (assoc 1 elst))) save) val (incsuff val *incrvalue* *suffixbin*) ) (entmod (subst (cons 1 val) (assoc 1 elst) elst)) (entupd (cdr (assoc 330 elst))) ) (and (setq save (cons (cons (car ent) (cdr (assoc 1 elst))) save) val (incsuff val *incrvalue* *suffixbin*) ) (entmod (subst (cons 1 val) (assoc 1 elst) elst)) ) ) ) ) ) ) (princ "\nParamètre de suffixe incorrect.") ) (princ) ) [Edité le 14/2/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
richard-c Posté(e) le 14 février 2008 Posté(e) le 14 février 2008 ok, je n'avais pas été aussi loin dans la réfexion des combinaison. A+
lili2006 Posté(e) le 14 février 2008 Posté(e) le 14 février 2008 Bonjour à toutes et tous, Pas mal l'incrémentation après Z de type AB,AC,.. Bien aussi la BD pour le choix. Bref, nickel chrome. Encore merci (gile) & richard-c Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 15 février 2008 Auteur Posté(e) le 15 février 2008 Pas mal l'incrémentation après Z de type AB,AC,.. Merci, et tu peux aussi incrémenter des suffixes "mixtes" : testA9 -> testB0 -> testB1... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 15 février 2008 Posté(e) le 15 février 2008 Bonsoir à toutes et tous, testA9 -> testB0 -> testB1... Ah, ben j'avais pas vu,! Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant