DenisHen Posté(e) le 7 novembre 2016 Posté(e) le 7 novembre 2016 Bonjour à tous. Voilà, aujourd'hui, je cherche à savoir si un calque contenant "ASS" existe. J'ai donc un (tblsearch mais je ne peut pas y mettre des caractères génériques. comme ceci :(tblsearch "layer" "*ASS*")Qui me donne comme réponse nil, ce qui est normal puisqu’il n’existe pas de calque nommé "*ASS*"... 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)
Patrick_35 Posté(e) le 7 novembre 2016 Posté(e) le 7 novembre 2016 Salut Une boucle avec wcmatch @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 7 novembre 2016 Posté(e) le 7 novembre 2016 Salut, Il faut utiliser wcmatch (avec strcase pour que la recherche ne soit pas sensible à la casse) dans une boucle avec tblnext. (defun tblmatch (table pattern / rec lst) (setq pattern (strcase pattern)) (while (setq rec (tblnext table (not rec))) (if (wcmatch (strcase (cdr (assoc 2 rec))) pattern) (setq lst (cons rec lst)) ) ) (reverse lst) ) (tblmatch "layer" "*ASS*")retourne la liste de tous les calques dont le nom correspond au modèle ("*ASS*). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 7 novembre 2016 Auteur Posté(e) le 7 novembre 2016 Salut Patrick_35, et merci pour ton aide. J'avoue ne jamais avoir utilisé wcmatch... Et l'aide est très "light"... Je tente de faire quelques tests mais rien de probant...(defun c:DHWcMatch () ;;Teste pour chercher un calques avec caractères génériques (if (/= (wcmatch LAYER "*ASS*") nil) (princ "\nCalque trouvé") (princ "\nCalque non trouvé") ) ;_ 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)
(gile) Posté(e) le 7 novembre 2016 Posté(e) le 7 novembre 2016 (if (/= (wcmatch LAYER "*ASS*") nil) ...)Traduit en français, ça donne : "si la correspondance entre LAYER et "*ASS*" n'est pas fausse ...". L'usage de la double négation peut être vu comme un effet de style en littérature, mais en programmation, on évite.On préfère dire plus simplement "si la correspondance entre LAYER et "*ASS*" est vraie ...", ce qui se traduit simplement par :(if (wcmatch LAYER "*ASS*") ...) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 7 novembre 2016 Posté(e) le 7 novembre 2016 Je trouve l'aide très complète et on voit la puissance de wcmatch. Regarde bien la routine de (gile). @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 7 novembre 2016 Auteur Posté(e) le 7 novembre 2016 Salut (gile) et merci de m'aider... C'est exactement ce que je cherchais... Mais j'étais à mille lieux de la solution... Oui, la double négation est un peu "capilotractée"... ;) Effectivement, la routine de (gile) est encore "complexe" pour mon piètre niveau... Mais elle m'en apprend tout de même... Encore merci à vous deux... 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)
(gile) Posté(e) le 7 novembre 2016 Posté(e) le 7 novembre 2016 Salut Patrick_35, et merci pour ton aide. J'avoue ne jamais avoir utilisé wcmatch... Et l'aide est très "light"... Je tente de faire quelques tests mais rien de probant...(defun c:DHWcMatch () ;;Teste pour chercher un calques avec caractères génériques (if (/= (wcmatch LAYER "*ASS*") nil) (princ "\nCalque trouvé") (princ "\nCalque non trouvé") ) ;_ Fin de if ) Juste un petit conseil.Quand tu essayes de comprendre une fonction en faisant des tests (ce qui est une très bonne méthode), tu n'as pas besoin de définir une nouvelle fonction/commande. Utilise simplement la console de l'éditeur avec de simples expressions qui appellent la fonction à tester :(wcmatch "DenisH" "*ni*")Ton code utilise une variable globale (LAYER) dont on ne sait rien, c'est ça qui rend les tests peu probants... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 7 novembre 2016 Posté(e) le 7 novembre 2016 Si je décompose la routine de (gile) (tblnext "layer" T) --> Trouver le 1er calque(tblnext "layer") --> Calque suivant(tblnext "layer") --> Calque suivant(tblnext "layer") --> Calque suivant...(tblnext "layer") --> Calque suivant(tblnext "layer") --> nil --> Plus de calques Ensuite, un (tblnext "layer" T) retourne par exemple ((0 . "LAYER") (2 . "0") (70 . 0) (62 . 7) (6 . "Continuous"))Reste à exploiter le code dxf 2 avec wcmatch et à mettre le tout dans une boucle. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 7 novembre 2016 Auteur Posté(e) le 7 novembre 2016 Merci à vous deux pour toutes ces précisions... 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