DenisHen Posté(e) le 22 juin 2017 Posté(e) le 22 juin 2017 Bonjour à tous. Voilà, aujourd'hui, je tente de renommer des blocs incrémentés comme ceci :POTEAU_BOIS, POTEAU_BOIS_01, POTEAU_BOIS_02, POTEAU_BOIS_03,...POTEAU_BOIS_121POTEAU_BOIS_MOISE, POTEAU_BOIS_MOISE_1, POTEAU_BOIS_MOISE_2,...POTEAU_BOIS_MOISE_145 j'ai fais un bout de lisp, mais je n'arrive pas à coder la recherche du dernier caractère "_". Voici ou je cherche et remplace le nom "incrémenté" par le nom "brut" (sans les "_XXX"). (if (/= (vl-string-position (ascii "_") BlkNom) nil) (progn (setq elst (subst (cons 2 (substr BlkNom 1 (vl-string-position (ascii "_") BlkNom))) (assoc 2 elst) elst)) (entmod elst) ) ;_ Fin de progn ) ;_ Fin de if Si quelqu'un a une astuce, un conseil, je suis preneur... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
GEGEMATIC Posté(e) le 22 juin 2017 Posté(e) le 22 juin 2017 salut,moi j'utiliserai : vl-string->LISTreverse(setq posmirroir (vl-position 'moncode" liste))(setq pos (- (length list) posmirroir))) a+gégé ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
DenisHen Posté(e) le 22 juin 2017 Auteur Posté(e) le 22 juin 2017 Salut Gégé, et merci pour ton aide. Quand tu écris "moncode", c'est le code ascii de "_" ? J'ai écris ça, mais évidement, ça plante...:(defun c:RechCar (/) (setq BlkNom "123_456_789_abc") (setq Resultat (vl-string->list "_" BlkNom)) (setq Resultat (reverse Resultat)) (setq posmirroir (vl-position 95 Resultat)) (setq pos (- (length Resultat) posmirroir)) (princ pos) (princ) ) Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
LrDb Posté(e) le 22 juin 2017 Posté(e) le 22 juin 2017 Bonjour,aide en ligne:Searching from left to right (the default), the “z” in position 1 is the first one vl-string-position encounters. But when searching from right to left, as in the following example, the “z” in position 3 is the first one encountered: (vl-string-position (ascii "z") "azbzlmnqc" nil T)3 Write a book about what ??
DenisHen Posté(e) le 22 juin 2017 Auteur Posté(e) le 22 juin 2017 Bon, j'ai réussi en test :(defun c:RechCar (/) (setq BlkNom "123_456_789_abc") (setq Resultat (vl-string->list BlkNom)) (setq Resultat (reverse Resultat)) (setq posmirroir (vl-position 95 Resultat)) (setq pos (- (length Resultat) posmirroir)) (princ pos) (princ) ) Mais pas dans mon code :(defun c:RemplBlkV3 (/ ss i ent elst BlkNom) ;;; Remplacement des blocs incrémentés * (princ "\nRemplacement des blocs incrémentés...") (setq ss nil) (if (setq ss (ssget "_X" '((0 . "INSERT")))) (progn (setq i 0) (while (setq ent (ssname ss i)) (setq i (1+ i) elst (entget ent) BlkNom (cdr (assoc 2 elst)) ) ;_ Fin de setq (setq Resultat (vl-string->list BlkNom)) (setq Resultat (reverse Resultat)) (setq posmirroir (vl-position 95 Resultat)) (setq pos (- (length Resultat) posmirroir)) (if (/= pos nil) (progn (setq elst (subst (cons 2 (substr BlkNom 1 pos)) (assoc 2 elst) elst)) (entmod elst)) ) ;_ Fin de if ) ;_ Fin de while ) ;_ Fin de progn ) ;_ Fin de if ) Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 22 juin 2017 Auteur Posté(e) le 22 juin 2017 Voici un lien pour télécharger mon DWG avec les blocs incrémentés. Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
LrDb Posté(e) le 22 juin 2017 Posté(e) le 22 juin 2017 le premier caractère avec vl-position est 0le premier caractère avec substr est 1?? Write a book about what ??
DenisHen Posté(e) le 22 juin 2017 Auteur Posté(e) le 22 juin 2017 Merci LrDb. J'ai changé mon code :(defun c:RemplBlkV3 (/ ss i ent elst BlkNom) (princ "\nDéveloppé par Denis H.") ;;; Remplacement des blocs incrémentés * (princ "\nRemplacement des blocs incrémentés...") (setq ss nil) (if (setq ss (ssget "_X" '((0 . "INSERT")))) (progn (setq i 0) (while (setq ent (ssname ss i)) (setq i (1+ i) elst (entget ent) BlkNom (cdr (assoc 2 elst)) ) ;_ Fin de setq (setq Resultat (vl-string->list BlkNom)) (setq Resultat (reverse Resultat)) (setq posmirroir (vl-position 95 Resultat)) (setq pos (- (length Resultat) posmirroir)) (setq pos (- pos 1)) (setq NouvNomBlk (substr BlkNom 1 pos)) (if (/= pos nil) (progn (setq elst (subst (cons 2 NouvBlkNom) (assoc 2 elst) elst)) (entmod elst)) ) ;_ Fin de if ) ;_ Fin de while ) ;_ Fin de progn ) ;_ Fin de if )mais il me répond :Commande: REMPLBLKV3Développé par Denis H.Remplacement des blocs incrémentés...; erreur: groupe DXF incorrect: (2) Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 22 juin 2017 Auteur Posté(e) le 22 juin 2017 Oops, j'ai écris NouvNomBlk et NouvBlkNom... Mais ça ne fonctionne toujours pas... Je n'ai même pas l'impression que mon code s'exécute... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 22 juin 2017 Auteur Posté(e) le 22 juin 2017 Ça y est, mon code fonctionne, le voici :(defun c:RemplBlkV3 (/ ss i ent elst BlkNom) (princ "\nDéveloppé par Denis H.") ;;; Remplacement des blocs incrémentés * (princ "\nRemplacement des blocs incrémentés...") (setq ss nil i 0 ) ;_ Fin de setq (if (setq ss (ssget "_X" '((0 . "INSERT")))) (progn (while (setq ent (ssname ss i)) (setq i (1+ i) elst (entget ent) BlkNom (cdr (assoc 2 elst)) ) ;_ Fin de setq (setq Resultat (vl-string->list BlkNom)) (setq Resultat (reverse Resultat)) (setq posmirroir (vl-position 95 Resultat)) (setq pos (- (length Resultat) posmirroir)) (setq pos (- pos 1)) (setq NouvBlkNom (substr BlkNom 1 pos)) (if (/= pos nil) (progn (setq elst (subst (cons 2 NouvBlkNom) (assoc 2 elst) elst)) ; (entmod elst) ) ;_ Fin de progn ) ;_ Fin de if ) ;_ Fin de while ) ;_ Fin de progn ) ;_ Fin de if (princ) ) Mille mercis à vous... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
LrDb Posté(e) le 22 juin 2017 Posté(e) le 22 juin 2017 Re,tu devrais peut-être vérifier que les derniers caractères sont numériques,par exemple, si il existe un bloc "metallique" ton "metallique_BT" est remplacéEnfin je dis ça... Write a book about what ??
DenisHen Posté(e) le 22 juin 2017 Auteur Posté(e) le 22 juin 2017 Merci pour ce conseil, mais alors pour le mettre en oeuvre... Ça va être une autre paire de manche... :huh: Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 22 juin 2017 Auteur Posté(e) le 22 juin 2017 J'ai ajouter un (wcmatch dans ma condition : (if (and (/= pos nil) (/= (wcmatch BlkNom "*#") nil)) (progn (setq elst (subst (cons 2 NouvBlkNom) (assoc 2 elst) elst)) ; (entmod elst) ) ;_ Fin de progn ) ;_ Fin de if Vous croyez que ça pourra fonctionner ? Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
bonuscad Posté(e) le 23 juin 2017 Posté(e) le 23 juin 2017 Merci pour ce conseil, mais alors pour le mettre en oeuvre... Ça va être une autre paire de manche... :huh: Soit une liste "lst" par exemple comme ton exemple.(setq lst '("POTEAU_BOIS" "POTEAU_BOIS_01" "POTEAU_BOIS_02" "POTEAU_BOIS_03" "POTEAU_BOIS_121" "POTEAU_BOIS_MOISE" "POTEAU_BOIS_MOISE_1" "POTEAU_BOIS_MOISE_2" "POTEAU_BOIS_MOISE_145")) Ces quelques lignes devraient écarter seulement les indicés par un nombre. (setq ln (mapcar 'vl-string->list lst)) (setq lindx (mapcar '(lambda (el / ) (- (length el) (vl-string-search "_" (vl-list->string (reverse el))))) ln)) (mapcar '(lambda (ch i / ) (if (eq (type (read (substr ch (1+ i)))) 'INT) (substr ch 1 (1- i)) ch ) ) lst lindx ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
DenisHen Posté(e) le 23 juin 2017 Auteur Posté(e) le 23 juin 2017 Salut bonuscad, et merci de ton aide. Mais les (mapcar et les (lambda, j'essai d'éviter, je ne les maîtrise pas encore... Surtout que tu m'en a mis deux paires... Là, tu me surestimes... ;) Et je n'ai pas la liste "exacte" des blocs, ils diffèrent à chaque dessin. Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
bonuscad Posté(e) le 23 juin 2017 Posté(e) le 23 juin 2017 Le mapcar et le lambda n'était là que pour appliquer la fonction à une liste quelconque (et non pas à une liste exacte comme tu as l'air de le penser). Si j'applique ce que je t'ais proposé dans ton code où tu fais une boucle while (donc plus besoin de traiter une liste mais seulement un élément), cela donnerait ceci (tu pourra commenter le (princ ..) qui te trace la conversion. (defun c:RemplBlkV4 ( / ss i ent elst BlkNom Resultat indexs NouvBlkNom) (princ "\nDéveloppé par Denis H.") ;;; Remplacement des blocs incrémentés * (princ "\nRemplacement des blocs incrémentés...") (setq ss nil i 0 ) ;_ Fin de setq (if (setq ss (ssget "_X" '((0 . "INSERT")))) (progn (while (setq ent (ssname ss i)) (setq i (1+ i) elst (entget ent) BlkNom (cdr (assoc 2 elst)) ) ;_ Fin de setq (setq Resultat (vl-string->list BlkNom)) (setq index (- (length Resultat) (vl-string-search "_" (vl-list->string (reverse Resultat))))) (setq NouvBlkNom (if (eq (type (read (substr BlkNom (1+ index)))) 'INT) (substr BlkNom 1 (1- index)) BlkNom ) ) (princ (strcat "\nAncien bloc: " BlkNom " -> Nouveau bloc: " NouvBlkNom)) (if (/= NouvBlkNom BlkNom) (progn (setq elst (subst (cons 2 NouvBlkNom) (assoc 2 elst) elst)) ; (entmod elst) ) ;_ Fin de progn ) ;_ Fin de if ) ;_ Fin de while ) ;_ Fin de progn ) ;_ Fin de if (princ) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
DenisHen Posté(e) le 23 juin 2017 Auteur Posté(e) le 23 juin 2017 Mille mercis bonuscad. Je comprend mieux maintenant... ;) Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 26 juin 2017 Auteur Posté(e) le 26 juin 2017 Bonjour. J'ai maintenant, ce code :(defun c:RemplBlkV4 (/ ss i ent elst BlkNom Resultat indexs NouvBlkNom) (princ "\nDéveloppé par Denis H.") (princ "\nRemplacement des blocs incrémentés...") (setq ss nil i 0 ) ;_ Fin de setq (if (setq ss (ssget "_X" '((0 . "INSERT")))) (progn (while (setq ent (ssname ss i)) (setq i (1+ i) elst (entget ent) BlkNom (cdr (assoc 2 elst)) ) ;_ Fin de setq (setq Resultat (vl-string->list BlkNom)) (setq index (- (length Resultat) (vl-string-search "_" (vl-list->string (reverse Resultat))))) (setq NouvBlkNom (if (eq (type (read (substr BlkNom (1+ index)))) 'INT) (substr BlkNom 1 (1- index)) BlkNom ) ;_ Fin de if ) ;_ Fin de setq (princ (strcat "\nAncien bloc: " BlkNom " -> Nouveau bloc: " NouvBlkNom)) (if (/= NouvBlkNom BlkNom) (progn (setq elst (subst (cons 2 NouvBlkNom) (assoc 2 elst) elst)) ; (entmod elst) ) ;_ Fin de progn ) ;_ Fin de if ) ;_ Fin de while ) ;_ Fin de progn ) ;_ Fin de if (princ) )Mais ça ne fonctionne pas et AutoCAD me répond :Commande: REMPLBLKV4 Développé par Denis H.Remplacement des blocs incrémentés...; erreur: type d'argument incorrect: numberp: nil J'avoue ne pas savoir quoi faire... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
bonuscad Posté(e) le 26 juin 2017 Posté(e) le 26 juin 2017 J'ai adapté rapidement ma proposition à ta version V3.Je n'ai pas fais de tests d'utilisation autre que sur ton DWG d'exemple. erreur: type d'argument incorrect: numberp: nilUne fonction attend un nombre mais nil lui est fournie. Un petit coup de pouce!(vl-string-search "_" "chaine ou trouver le caractère")Si celui-ci n'est pas trouvé, le retour est nil, et faire une soustraction avec entraine une erreur... Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
DenisHen Posté(e) le 26 juin 2017 Auteur Posté(e) le 26 juin 2017 Salut bonuscad, et merci pour ton aide, je pense avoir trouvé la solution, voici mon code qui a l'air de fonctionner :(defun c:RemplBlkV4 (/ ss i ent elst BlkNom Resultat indexs NouvBlkNom) (princ "\nDéveloppé par Denis H.") (princ "\nRemplacement des blocs incrémentés...") (setq ss nil i 0 ) ;_ Fin de setq (if (setq ss (ssget "_X" '((0 . "INSERT")))) (progn (while (setq ent (ssname ss i)) (setq i (1+ i) elst (entget ent) BlkNom (cdr (assoc 2 elst)) ) ;_ Fin de setq (setq Resultat (vl-string->list BlkNom)) (if (/= (vl-string-search "_" (vl-list->string (reverse Resultat))) nil) (progn (setq index (- (length Resultat) (vl-string-search "_" (vl-list->string (reverse Resultat))))) (setq NouvBlkNom (if (eq (type (read (substr BlkNom (1+ index)))) 'INT) (substr BlkNom 1 (1- index)) BlkNom ) ;_ Fin de if ) ;_ Fin de setq (princ (strcat "\nAncien bloc: " BlkNom " -> Nouveau bloc: " NouvBlkNom)) (if (/= NouvBlkNom BlkNom) (progn (setq elst (subst (cons 2 NouvBlkNom) (assoc 2 elst) elst)) ; (entmod elst) ) ;_ Fin de progn ) ;_ Fin de if ) ;_ Fin de progn ) ;_ Fin de if ) ;_ Fin de while ) ;_ Fin de progn ) ;_ Fin de if (princ) ) ;_ Fin de defunEncore un grand merci... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
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