jacobs33 Posté(e) le 1 juin 2010 Posté(e) le 1 juin 2010 Bonjour,je viens d'écrire ce bout de code qui recherche et remplace du texte dans un jeux de sélection. question 1: pourquoi le message suivant quand je charge le code." erreur: parenthèse fermante supplémentaire en entrée question 2:pourquoi le message suivant a la fin de l'exécution du code " erreur: type d'argument incorrect: lentityp nil" question 3: la fonction "Subst" ne supporte pas bien les caractères génériques.exemple: (vl-string-subst "" "??.00 m2" Asso1)) (vl-string-subst "" "?.00 m2" Asso1)) existe t'il une autre fonction? (defun c:crtxt (/ sel1 ent Asso0 Asso1 NewAsso1) (setq sel1 (ssget "X" '((0 . "*TEXT")))) (setq n 0) (while (setq ent (entget (ssname sel1 n))) (setq Asso0 (cdr (assoc 0 ent))) (setq Asso1 (cdr (assoc 1 ent))) (if (wcmatch Asso0 "*TEXT") (if (wcmatch Asso1 "*?.00 m2*,*??.00 m2*") (progn (setq NewAsso1 (vl-string-subst "" "18.00 m2" Asso1)) (setq ent (subst (cons 1 NewAsso1) (assoc 1 ent) ent)) (ENTMOD ent) ) ) ) (setq n (1+ n)) ) ) Merci d'avance pour votre participation et vos réponses. :) :)
Tramber Posté(e) le 1 juin 2010 Posté(e) le 1 juin 2010 pourquoi le message suivant quand je charge le code." erreur: parenthèse fermante supplémentaire en entréeJe ne sais pas. Pas de problème chez moi, l'appariement des parenthèses est bon. question 2:pourquoi le message suivant a la fin de l'exécution du code " erreur: type d'argument incorrect: lentityp nil"Aucune idée. J'ai testé un peu, ca fonctionne. question 3: la fonction "Subst" ne supporte pas bien les caractères génériques.exemple:(vl-string-subst "" "??.00 m2" Asso1)) Subst ou vl-string-subst ? Chez moi ca fonctionne :recherche des textesSi le texte comprend .00m2 [les ? ou ?? ne changent pas grand chose] alors le texte "18.00 m2" est testé. S'il est présent, il est effacé (remplacé par ""). Etrange programme.... Remarque 1 : si tu lisais ici tu verrais, qu'encore une fois (parce que tu n'es pas le seul), un message a été posté sans prendre en compte ce que suggère la subdivision des forums.On ne peut pas juger de ton niveau si tu cherches à résoudre un problème dans le mauvais sous-forum. Peut-être devrais-tu préciser dans le forum "débuter en lisp" ce que tu veux faire avec des caractères génériques. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Carboleum Posté(e) le 1 juin 2010 Posté(e) le 1 juin 2010 Etrange programme.... En effet.....Dis nous ce que tu cherches à faire exactement. Carboléüm, qui dessine aussi à la main -> Carboleum's sketchblog
Fracker Posté(e) le 1 juin 2010 Posté(e) le 1 juin 2010 Bonjour Jacobs, Est-ce juste pour débuter en lisp ou tu cherches quelquechose de plus que la commande "_find" (menu edit) ? À bientôt, --Arthur
bonuscad Posté(e) le 1 juin 2010 Posté(e) le 1 juin 2010 question 2:pourquoi le message suivant a la fin de l'exécution du code" erreur: type d'argument incorrect: lentityp nil" Cela vient de là: (while (setq ent (entget (ssname sel1 n))) Tu fais un test de boucle sur un entget, alors qu'il faudrait le faire sur ssnameLa boucle s'arrête quand il n'y a plus d'entité dans le jeux de sélection. (while (setq entname (ssname sel1 n)) (setq ent (entget entname))....... Autrement vu que tu fais une sélection filtrée sur des TEXTE, la condition (if (wcmatch Asso0 "*TEXT") est inutile. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
jacobs33 Posté(e) le 1 juin 2010 Auteur Posté(e) le 1 juin 2010 Merci pour vos réponses SuperEffectivement je me suis tromper de forum ne suis pas un PRO, (plutôt vieux débutant) mais un petit gars qui écris quelque lignes de temps en temps pour me simplifier la vie. -comment faire pour changer le sujet de forum?l'idée de ce code et de supprimer les Textes de la forme 00.00 m2 et 0.00 m2 dans le dessin.Je viens d'essayer avec le fonction "subst" ça me fonctionne pas. (defun c:crtxt (/ sel1 ent Asso0 Asso1 NewAsso1) (setq sel1 (ssget "X" '((0 . "*TEXT")))) (setq n 0) (while (setq entname (ssname sel1 n)) (setq ent (entget entname)) (setq Asso0 (cdr (assoc 0 ent))) (setq Asso1 (cdr (assoc 1 ent))) (if (wcmatch Asso1 "*?.00 m2*,*??.00 m2*") (progn (setq NewAsso1 (vl-string-subst "" [surligneur]"*??.00 m2*"[/surligneur] Asso1)) (setq ent (subst (cons 1 NewAsso1) (assoc 1 ent) ent)) (ENTMOD ent) ) ) (setq n (1+ n)) ) )
bonuscad Posté(e) le 1 juin 2010 Posté(e) le 1 juin 2010 l'idée de ce code et de supprimer les Textes de la forme 00.00 m2 et 0.00 m2 dans le dessin. maintenant que tu es plus précis, ce code devrait pouvoir suffire.Autrement teste et continu à faire tes propositions. (defun c:crtxt (/ sel1 n ent Asso1 pos) (setq sel1 (ssget "X" '((0 . "*TEXT")))) (cond (sel1 (setq n 0) (while (setq entname (ssname sel1 n)) (setq ent (entget entname) Asso1 (cdr (assoc 1 ent)) ) (cond ((setq pos (vl-string-search "00.00 m2" asso1)) (entmod (subst (cons 1 (substr asso1 1 pos)) (assoc 1 ent) ent)) ) ((setq pos (vl-string-search "0.00 m2" asso1)) (entmod (subst (cons 1 (substr asso1 1 pos)) (assoc 1 ent) ent)) ) ) (setq n (1+ n)) ) ) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
jacobs33 Posté(e) le 2 juin 2010 Auteur Posté(e) le 2 juin 2010 salut, Je voulais Faire un truc dans le genre mais le problème c'est que la "case" n'est pas respectée ça devient compliqué exemples : sdfsf1.00m2sdfdsf sdfsf12.00m2sdfdsf sdfsf12.00 m2sdfdsf sdfsf13.0 m2 ci quelqu'un a une solution plus simple je prend. sinon je vais utiliser la commande _find.... (defun c:crtxt (/ sel1 n ent Asso1 pos) (setq sel1 (ssget "X" '((0 . "*TEXT")))) (cond (sel1 (setq n 0) (while (setq entname (ssname sel1 n)) (setq ent (entget entname) Asso1 (cdr (assoc 1 ent)) Longasso1 (strlen Asso1) pos (vl-string-search "m2" asso1) ) (setq ApresPos (substr asso1 (+ 5 pos))) (setq AvantPos (substr asso1 1 (- pos 5))) (setq nouvelChaine (STRCAt AvantPos ApresPos)) (entmod (subst (cons 1 nouvelChaine) (assoc 1 ent) ent) ) (setq n (1+ n)) ) ) ) (prin1) )
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