Aller au contenu

[Résolu] (tblsearch "layer", mais en majuscule...


Messages recommandés

Posté(e)

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)

Posté(e)

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

Posté(e)

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)

Posté(e)

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

  • Like 1
Posté(e)

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
)

 

  • Like 1

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

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)

  • 1 an après...
Posté(e)

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)

Posté(e)

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

Posté(e)

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)

Posté(e)

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)

Posté(e)
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

Posté(e)

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)

Posté(e)

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)

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité