bono05 Posté(e) le 30 novembre 2012 Posté(e) le 30 novembre 2012 (Re) salut à tous, Voici la suite de la série: "Quand Bono05 supplie de l'aide!" Maintenant il faudrait que je puisse supprimer (dans mon cas) 4 caractères au milieu de mon attribut. Ex: (pour de vrai cette fois! hein gile :P )07D.07D.206-208Doit devenir7D.07D.208 Donc ici "206-" doit disparaître de mon attribut.Comme dans mon précédent post ce sont des attributs isolés (1300 fois quand même) que je dois pouvoir moi même selectionner. Et comme vous êtes des magiciens (disparaitre-magiciens compris non? bon je zappe...)! MERCi!!
Fraid Posté(e) le 30 novembre 2012 Posté(e) le 30 novembre 2012 Bonjour, pas besoin de lisp fait clic droit Rechercher https://github.com/Fraiddd
bono05 Posté(e) le 30 novembre 2012 Auteur Posté(e) le 30 novembre 2012 Fraid, Ceci est un exemple de numéro mais les 1300 autres sont différents.Donc je ne pense pas que ce soit une bonne solution?
bonuscad Posté(e) le 30 novembre 2012 Posté(e) le 30 novembre 2012 Alors il faudrait en savoir un peu plus sur la structure de ta chaîne. La position est variable ou fixe? Les 3 caractères sont toujours placé avant le "-"? Le début de chaîne est toujours identique? On peut être magicien mais pas devin! :(rires forts): Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
bono05 Posté(e) le 30 novembre 2012 Auteur Posté(e) le 30 novembre 2012 Alors il faudrait en savoir un peu plus sur la structure de ta chaîne. La position est variable ou fixe? Les 3 caractères sont toujours placé avant le "-"? Le début de chaîne est toujours identique? On peut être magicien mais pas devin! <img src='http://cadxp.com/public/style_emoticons/<#EMO_DIR#>/laugh.gif' class='bbc_emoticon' alt=':(rires forts):' /> Je comprend... B) Position - variable3 caractères sont toujours comme l'exemple, donc devant le "-"Début de chaine - 5 zones --> 07A-07A, 07B-07B, ....., 07E-07E. Si tu as d'autres questions je n'hésiterai pas à te répondre. ;)
bonuscad Posté(e) le 30 novembre 2012 Posté(e) le 30 novembre 2012 Alors typiquement pour ce formatage, essayes ceci (testé succinctement) (vl-load-com) (defun c:text_replace ( / AcDoc Space ename string pos) (defun sel_onlyText (msg / js) (princ msg) (while (not (setq js (ssget "_+.:E:S:N" (list (cons 0 "*TEXT,MULTILEADER,ATTRIB") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) ) ) ) ) ) (vlax-ename->vla-object (cadar (ssnamex js 0))) ) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (eq (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (setq ename (sel_onlyText "\nSélectionner le texte: ")) (setq string (if (vlax-property-available-p ename 'TextString) (vlax-get ename 'TextString))) (if string (if (wcmatch string "*-*") (progn (setq pos (vl-string-position (ascii "-") string)) (vlax-put ename 'TextString (strcat (substr string 2 (- pos 4)) (substr string (+ pos 2)))) ) ) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
bono05 Posté(e) le 30 novembre 2012 Auteur Posté(e) le 30 novembre 2012 Je ne suis plus au bureau...mais je me ferai un plaisir de faire un essai lundi matin.En attendant bon week-end...
bono05 Posté(e) le 3 décembre 2012 Auteur Posté(e) le 3 décembre 2012 Me revoila...bonjour à tous et à Bonuscad, Après un test je constate les choses suivantes: 1)Cela ne fonctonne pas avec un attribut texte...mais bien avec un texte.2)Le résultats final est le suivant 07D.07D.226-228 (attribut d'origine) devient 7D.07D.228Il a donc bien supprimer les 4 caractères du milieu...mais également le "0" en première position. Voilà pour les tests.Maintenant j'espère que cela ne sera pas trop compliqué pour modifier ces petits détails. ;)
Patrick_35 Posté(e) le 3 décembre 2012 Posté(e) le 3 décembre 2012 Salut Pas besoin de lisp, tu peux utiliser la fonction rechercher/remplacer. Sinon, une routine plus polyvalente, dans le même esprit sur rechercher/remplacer(defun c:atx(/ blo doc ent tx1 tx2 txt) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (ssget (list (cons 0 "insert") (cons 66 1))) (setq tx1 (getstring T "\nTexte à rechercher : ")) (setq tx2 (getstring T "\nTexte remplacant : ")) (progn (vlax-for blo (setq sel (vla-get-activeselectionset doc)) (foreach ent (vlax-invoke blo 'getattributes) (and (wcmatch (setq txt (vla-get-textstring ent)) (strcat "*" tx1 "*")) (cond ((wcmatch txt (strcat tx1 "*")) (setq txt (strcat tx2 (substr txt (1+ (strlen tx1))))) ) ((wcmatch txt (strcat "*" tx1)) (setq txt (strcat (substr txt 1 (- (strlen txt) (strlen tx1))) tx2)) ) (T (setq txt (strcat (substr txt 1 (vl-string-search tx1 txt)) tx2 (substr txt (+ (vl-string-search tx1 txt) (strlen tx1) 1)) ) ) ) ) (vla-put-textstring ent txt) ) ) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) Par exemple, tu recherches "226-" que tu remplaces par "" (autrement dit rien) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bono05 Posté(e) le 3 décembre 2012 Auteur Posté(e) le 3 décembre 2012 Salut Patrick, Comme cité plus haut, "-226" est un exemple qui fait partie d'une série de plus de 1300 combinaisons différentes.Comme la partie de texte à supprimer se trouve toujours au même endroit, c'est la raison pour laquelle je ne vois qu'un lisp pour me dépanner. Donc pour exemple: 07D.07D.xxx-ooo Les "x" et le "-" doivent être supprimés (xxx étant chaque fois un autre numéro).Les "o" doivent restés.
Patrick_35 Posté(e) le 3 décembre 2012 Posté(e) le 3 décembre 2012 En modifiant le lisp de base (defun c:atx(/ blo doc ent tx1 tx2 txt) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (and (ssget (list (cons 0 "insert") (cons 66 1))) (progn (setq tx2 "") (vlax-for blo (setq sel (vla-get-activeselectionset doc)) (foreach ent (vlax-invoke blo 'getattributes) (setq txt (vla-get-textstring ent)) (and (vl-string-search "-" txt) (> (vl-string-search "-" txt) 2) (setq tx1 (substr txt (- (vl-string-search "-" txt) 2) 4)) (cond ((wcmatch txt (strcat tx1 "*")) (setq txt (strcat tx2 (substr txt (1+ (strlen tx1))))) ) ((wcmatch txt (strcat "*" tx1)) (setq txt (strcat (substr txt 1 (- (strlen txt) (strlen tx1))) tx2)) ) (T (setq txt (strcat (substr txt 1 (vl-string-search tx1 txt)) tx2 (substr txt (+ (vl-string-search tx1 txt) (strlen tx1) 1)) ) ) ) ) (vla-put-textstring ent txt) ) ) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) Le lisp permet une selection.Pour l'éviter, il suffit d'ajouter "X" au ssget @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bono05 Posté(e) le 3 décembre 2012 Auteur Posté(e) le 3 décembre 2012 Patrick, Test 100% réussi! GRAND merci pour ton aide. Est-il possible de voir le résultat lors du clic sur l'attribut...et non après la selection multiple? Maintenant peux-tu donner un petit mot d'explication concernant ce lisp? Pour commencer les choses les plus simple pour vous développeur sont pour nous très compliqué.Pour l'éviter, il suffit d'ajouter "X" au ssget :unsure: Ensuite puis-je réutiliser facilement :o ce lisp pour une autre circonstance où les caractères à supprimer se trouveraient à un autre endroit dans le texte?
Patrick_35 Posté(e) le 3 décembre 2012 Posté(e) le 3 décembre 2012 Pour commencer les choses les plus simple pour vous développeur sont pour nous très compliqué. :unsure: J'ai justement évité de donner la solution pour t'inciter au lisp.Avec une recherche, tu trouveras très rapidement Ensuite puis-je réutiliser facilement :o ce lisp pour une autre circonstance où les caractères à supprimer se trouveraient à un autre endroit dans le texte?Le lisp ne s'occupe pas de la position du - dans les attributs.Il suffit de trois caractères au minimum devant le moins pour qu'il fonctionne. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bono05 Posté(e) le 3 décembre 2012 Auteur Posté(e) le 3 décembre 2012 J'ai justement évité de donner la solution pour t'inciter au lisp.Avec une recherche, tu trouveras très rapidement Très bonne démarche....interdiction de rire!! j'avait déjà essayé comme ceci...(and (ssgetX (list (cons 0 "insert") (cons 66 1))) Et comme ceci:(and (ssget X (list (cons 0 "insert") (cons 66 1))) Sans doute trop simple car fonctionne pas. mais je continuerai ma recherche!! <img src='http://cadxp.com/public/style_emoticons/<#EMO_DIR#>/laugh.gif' class='bbc_emoticon' alt=':(rires forts):' /> Et pour ceci Patrick?Est-il possible de voir instantanément le résultat lors du clic sur l'attribut...et non après la selection multiple?
Patrick_35 Posté(e) le 3 décembre 2012 Posté(e) le 3 décembre 2012 Très bonne démarche....interdiction de rire!! j'avait déjà essayé comme ceci...(and (ssgetX (list (cons 0 "insert") (cons 66 1))) Et comme ceci:(and (ssget X (list (cons 0 "insert") (cons 66 1))) Sans doute trop simple car fonctionne pas. mais je continuerai ma recherche!! <img src='http://cadxp.com/public/style_emoticons/<#EMO_DIR#>/laugh.gif' class='bbc_emoticon' alt=':(rires forts):' /> Pense aux guillemets ;) Et pour ceci Patrick?Oui, mais dans ce cas, tu seras obligé de sélectionner les attributs un par un, et pas moyen de globaliser la sélection (nentsel) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bono05 Posté(e) le 3 décembre 2012 Auteur Posté(e) le 3 décembre 2012 Oui, mais dans ce cas, tu seras obligé de sélectionner les attributs un par un, et pas moyen de globaliser la sélection (nentsel)Là tu as raison c'est beaucoup moins pratique... Pour le "X" je cherche encore...mais ça viendra. Bien voilà une nouvelle demande réussie à 100%!! Encore un tout GRAND merci ton aide et a Bonuscad pour sa participation! :D
alala Posté(e) le 3 décembre 2012 Posté(e) le 3 décembre 2012 Aide sur SSGET chez Autodesk! Avec cette page tu devrais pouvoir affiner tes connaissances et ta sélection. ;) C'est en forgeant que l'on devient forgerons.Et c'est en sciant que Léonard DeVinci!
bono05 Posté(e) le 4 décembre 2012 Auteur Posté(e) le 4 décembre 2012 Super le lien alala....merci! Si je décide d'apprendre le lisp, quel chemin me conseilleriez-vous?Des cours, des livres, des lien sur le net... je parle pour un nul bien sur! :P
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