DenisHen Posté(e) le 10 août 2022 Posté(e) le 10 août 2022 Bonjour à la communauté. Je cherche avec un (tblsearch le nom des calque pour le comparer à une variable. Mais mes collègues ne travaillent pas tous de la même façon. Certain crééent leurs calques en majuscule uniquement, d'autres non. Exemple, un créera le calque "PATATI.....BETON ARME (HACHURE)...", un autre "Patata...Béton armé (SymboleHachure)...".... Donc, je cherche "*BÉTON*" ou "*BETON*", mais je n'arrive pas à mettre le (tblserch en majuscule (ou en minuscule), pour être certain de trouver. Comment faire... Une liste peut-être ? 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 10 août 2022 Posté(e) le 10 août 2022 Salut, Un simple test* t'aurait tout de suite fait voir que la fonction tblsearch n'est pas sensible à la casse, mais qu'elle ne supporte pas les caractères génériques (que devrait-elle renvoyer s'il existe plusieurs claques contenant "BETON" ? Sinon, l'utilisation de lettres accentuées dans les noms de symboles (calques, blocs, etc.) devrait être proscrite. * c'est si simple de tester en LISP depuis la ligne commande ou la console de l'éditeur Visual LISP. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 11 août 2022 Auteur Posté(e) le 11 août 2022 Salut @(gile)et merci pour ton aide. En fait, je cherche juste s'il y a au moins un calque contenant ce nom. Pour les caractères spéciaux dans les noms de calques tcomme pour le reste), je leur ai déjà dis. 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)
Luna Posté(e) le 11 août 2022 Posté(e) le 11 août 2022 Coucou, J'avais fait chat à une époque ; +-----------------------------------------------------------------------------------------------------------------------------------------------+ ; ; | | ; ; | HISTORICAL TRACKING FILE OF THE FUNCTION | ; ; | --{ flt_tbl }-- | ; ; | | ; ; +-----------------------------------------------------------------------------------------------------------------------------------------------+ ; ; []-----------------------[] flt_tbl []-----------------------[] ; ;--- Date of creation > 16/04/2019 ; ;--- Last modification date > 20/06/2022 ; ;--- Author > Luna ; ;--- Version > 4.0.0 ; ;--- Class > "DtSyt" ; ;--- Goal and utility of the main function ; ; Creation of a list of values from a Symbol Table ("APPID", "BLOCK", "DIMSTYLE", "LAYER", "LTYPE", "STYLE", "UCS", "VIEW" ou "VPORT") with ; ; application of a search filter based on the function (wcmatch). The main goal is to get a list of values from one of the 9 Symbol Table. ; ; ; ;--- Declaration of the arguments ; ; The function (flt_tbl) have 3 argument(s) : ; ; --• tag > corresponds to the name of the Symbol Table in which the search have to be done ; ; (type tag) = 'STR | Ex. : "APPID", "BLOCK", "DIMSTYLE", "LAYER", "LTYPE", "STYLE", "UCS", "VIEW", "VPORT" ; ; --• search > is a string used as a filter for values that you want to keep in the list (cf. wcmatch) ; ; (type search) = 'STR | Ex. : "UBS*", "Cartouche*", "*1##-*", ... ; ; --• flag > determines if the search is case-sensitive or not ; ; (type flag) = 'SYM | Ex. : T for case-sensitive, nil if not ; ; ; ;--- List of dependent's functions ; ; --• "XxXxx" ---> ... | v#.#.# - ##/##/#### (Luna) ; ; ; ;--- List of local functions ; ; --• "XxXxx" ---> ... | v#.#.# - ##/##/#### (Luna) ; ; ; ;--- Return ; ; The function (flt_tbl) returns a list containing all the entries in the Symbol Table which match to the 'search' pattern (case sensitive). ; ; Ex. : (flt_tbl "LAYER" "Layer*" nil) returns ("Layer1" "LAYER2" "Layer3" "Layers") ; ; (flt_tbl "LAYER" "Layer#" T) returns ("Layer1" "Layer3") ; ; ; ;--- Historic list of the version with their modification status ; ; +------------+----------------------------------------------------------------------------------------------------------------------------------+ ; ; | v4.0.0 | Add 'flag' argument to specify if the search is case-sensitive or not | ; ; +------------+----------------------------------------------------------------------------------------------------------------------------------+ ; ; | v3.0.2 | Changing the name of variables | ; ; +------------+----------------------------------------------------------------------------------------------------------------------------------+ ; ; | v3.0.1 | Add local variable declaration for all variables | ; ; +------------+----------------------------------------------------------------------------------------------------------------------------------+ ; ; | v3.0.0 | Removal of the 'get' argument, removal of the creation of a pointed list, possibility of using the function on all Symbol | ; ; | | Tables, generalisation of the use of the function to no longer be limited to filters (ssget) | ; ; +------------+----------------------------------------------------------------------------------------------------------------------------------+ ; ; | v2.0.1 | Adding the declaration of local variables (paritally) | ; ; +------------+----------------------------------------------------------------------------------------------------------------------------------+ ; ; | v2.0.0 | Added Symbol Table "LTYPE", added 'get' argument, possibility to change the output format depending on the use of the | ; ; | | function (flt_tbl) for a less specific use | ; ; +------------+----------------------------------------------------------------------------------------------------------------------------------+ ; ; | v1.0.0 | Creation of the function | ; ; +------------+----------------------------------------------------------------------------------------------------------------------------------+ ; ; ; (defun flt_tbl (tag search flag / lst value) (setq value (cdr (assoc 2 (tblnext tag T)))) (while (null value) (if (wcmatch (if flag value (strcase value)) (if flag search (strcase search)) ) (setq lst (cons value lst)) ) (setq value (cdr (assoc 2 (tblnext tag)))) ) lst ) Car comme le souligne @(gile), la fonction (tblsearch) ne permet pas l'utilisation des Wildcard Characters, donc cela sous-entend que l'on connaît d'avance le nom du calque (ce qui est rarement le cas). Donc pour cela je te suggère plutôt de passer par (tblnext) et (wcmatch) (ou tout autre fonction de recherche autorisant les caractères spéciaux). Soit tu insères le (wcmatch) dans la condition du (while) pour t'arrêter dès la première occurrence, soit tu laisses la boucle ainsi pour lister toutes les occurrences correspondant à ta recherche. Faire tout de même attention avec les calques issus d'XREF ! En espérant que cela puisse t'aider :3 Bisous, Luna 1
(gile) Posté(e) le 11 août 2022 Posté(e) le 11 août 2022 Il te faut donc parcourir la table des calques jusqu'à trouver un calque dont le nom correspond au modèle. La fonction pour comparer une chaîne à un modèles est wcmatch. Cette fonction est sensible à la casse donc pour contourner ce problème, on compare les chaînes passées en majuscules avec strcase, ce qui supprime les accents. (wcmatch (strcase "BETON") "*BETON*") => T (wcmatch (strcase "Beton") "*BETON*") => T (wcmatch (strcase "BÉTON") "*BETON*") => T (wcmatch (strcase "Béton") "*BETON*") => T Un exemple de fonction qui cherche un nom de calque correspondant au modèle (pattern) et renvoie T s'il l'a trouvé ; nil sinon. (defun layerExists (pattern / found layer) (setq pattern (strcase pattern)) (while (and (not found) (setq layer (tblnext "layer" (not layer))) ) (setq found (wcmatch (strcase (cdr (assoc 2 layer))) pattern)) ) found ) 1 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 11 août 2022 Auteur Posté(e) le 11 août 2022 Merci à vous deux pour votre aide. J'avais mal lu l'aide de (tblsearch et pas compris (tblnext. Tout fonctionne parfaitement maintenant. 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)
DenisHen Posté(e) le 27 février Auteur Posté(e) le 27 février Bonjour à la communauté. Je reviens sur ce sujet, car j'ai une difficulté supplémentaire pour un autre nouveau lisp. Je cherche le calque "Archi_00 (Rdc)-Plan_Pièce-Jour (Trame)" Dans les noms de calques, je ne maitrise ni les "séparateurs" ni le "(Rdc)". Donc, 00 = niveau Rdc, Plan = par opposition à coupe ou situation, Pièce = définition de l'entité "terrain" et Jour = le type de pièce (jour, nuit, humide...). Je tape donc dans la console : (layerExists "*_00*Plan*Pièce*Jour") Et fatalement, j'ai un nil en retour. Quelqu'un saurait pourquoi ? 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)
Luna Posté(e) le 27 février Posté(e) le 27 février Coucou, Essaye ceci : (layerExists "*_00*Plan*Pièce*Jour*") Tu as je pense juste oublier d'ajouter un astérisque "*" après "Jour" 🙂 Bisous, Luna
DenisHen Posté(e) le 27 février Auteur Posté(e) le 27 février Coucou Luna. Mille mercis de me montrer que mon cerveau ne reçoit plus rien de mes yeux ! ! ! J'ai pourtant cherché avant de poster ! ! ! Effectivement, c'est le dernier "*" qui manquait... Bon, je serais privé de dessert. Bisous, Denis. 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 27 février Auteur Posté(e) le 27 février Mais en fait, je cherchais à connaitre le nom complet du calque répondant à ce critère... J'ai changé d'impasse 😉. 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)
Luna Posté(e) le 27 février Posté(e) le 27 février Haha, pas de soucis 🙂 chat arrive à tout le monde ^^ Bisous, Luna
Luna Posté(e) le 27 février Posté(e) le 27 février il y a 1 minute, DenisHen a dit : Mais en fait, je cherchais à connaitre le nom complet du calque répondant à ce critère... J'ai changé d'impasse 😉. Dans ce cas au lieu de renvoyer l'information 'found' à la fin de la fonction, renvoie plutôt l'information 'layer'. Cependant pour éviter tout problème, il faut renvoyer l'info SI found existe ! Donc remplace found par (if found layer) Bisous, Luna
DenisHen Posté(e) le 27 février Auteur Posté(e) le 27 février Bon, je viens de trouver. A toutes fins utiles, voici le code de (gile) légèrement retouché : (defun layerExists (pattern / found layer) (setq pattern (strcase pattern)) (while (and (not found) (setq layer (tblnext "layer" (not layer)))) (if (= (wcmatch (strcase (cdr (assoc 2 layer))) pattern) T) (setq found (cdr (assoc 2 layer))) ) ;_ Fin de if ) ;_ Fin de while found ) ;_ Fin de defun 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 27 février Auteur Posté(e) le 27 février Nos messages ce sont croisé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)
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