Déméter_33 Posté(e) le 31 août 2023 Posté(e) le 31 août 2023 Bonjour, J'essaye de faire reconnaitre à une de mes routines un caractère spécial, et ce à l'aide de la commande wcmatch. Le morceau de code est le suivant: (if (= A 127) ; Faïençage - Type 2.2 (progn (setq Cal "100-PATHO SECHE") ;Choix du calque - propre à la fonction (DIACAL) ;Il devient courant (DESPLINE) ;Dessin de la spline (command "-fhach" "s" Forme "" "p" "HOUND" "0.8" "10" "") ;Création de la hachure - propre à la fonction (command "_erase" Forme "") ;Efface la forme (setq Ouv (getstring "\nDonner l'ouverture du faïençage en mm :")) ;Acquisition de l'ouverture en mm (if (wcmatch Ouv "*µ*") ;Si l'ouverture est égale à µ (setq Leg (strcat "F:" Ouv)) ;Alors Leg = F:µ (setq Leg (strcat "F: " Ouv "mm")) ;Sinon Leg = F: Ouvmm ) ;Fin de if (POSETEXTE) ;Pose du texte (BOUCLE) ;Boucle ) (princ) ) Comme vous pourrez le remarquer, je demande à wcmatch de dire si la valeur rentrée lors du (getstring _) est µ, et ce afin d'adapter une légende qui sera posée plus loin dans une autre boucle. Si j'exécute bêtement à la ligne de texte dans AutoCAD (setq Ouv (getstring "\nDonner l'ouverture du faïençage en mm :")) En lui donnant la valeur µ , puis (if (wcmatch Ouv "*µ*") (setq Leg (strcat "F:" Ouv)) (setq Leg (strcat "F: " Ouv "mm")) ) Le résultat de la commande donne bien "F:µ". Mais lorsque j'exécute ma routine complètement, alors j'obtiens "F: µmm" (lorsque je "pose" le texte avec une commande (POSETEXTE) personalisée). Et lorsque je tente de contrôler ma valeur après l'exécution de la boucle, j'obtiens: Commande: (princ Leg) F: µmm"F: µmm" J'ai essayé avec plusieurs syntaxes dans wcmatch mais aucune ne s'est avérée efficace...: (wcmatch Ouv "µ") (wcmatch Ouv "*µ*") (wcmatch Ouv "*'µ*") (wcmatch Ouv "*\\µ*") J'hésite à changer de méthode, mais il est dur de trouver quand les autres valeurs qui seront rentrées se situeront entre 0,05 et 2 (avec une incrémentation tous les 0,1 à partir de 0,1). Si vous avez des pistes à me donner. Merci par avance.
JPhil Posté(e) le 1 septembre 2023 Posté(e) le 1 septembre 2023 T'as essayé avec (wcmatch Ouv "*`µ*") ?
bonuscad Posté(e) le 1 septembre 2023 Posté(e) le 1 septembre 2023 Rien ne me choque dans ta syntaxe qui puisse expliquer ton résultat, sauf si tes variables ne sont pas déclaré en locale, ce qui pourrait expliquer ce retour mais sans voir l'intégralité du code difficile de trouver la cause... Cependant tu pourrait essayer de tourner ta déclaration comme ceci ((lambda ( / Ouv Leg) (initget 128 "µ") (setq Ouv (getreal "\nDonner l'ouverture du faïençage en mm? <µ>: ")) (if (not Ouv) (setq Ouv "µ")) (if (eq Ouv "µ") (print (setq Leg "F:µ")) (print(setq Leg (strcat "F: " (rtos Ouv 2 2) "mm"))) ) (prin1) )) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Déméter_33 Posté(e) le 1 septembre 2023 Auteur Posté(e) le 1 septembre 2023 @JPhil, oui j'ai essayé aussi avec ta syntaxe mais pas de changement malheureusement. @bonuscad, j'ai aussi essayé avec ta technique, mais dès l'acquisition, j'obtiens ce message à la commande: Ceci me fait penser que AutoCAD ne gère juste possiblement pas les caractères spéciaux... De plus je navigue entre une version 2022 et une 2023, donc il peut aussi y avoir un problème de ce côté là, si vous ne trouvez pas d'utre solution je retenterai lundi vos solutions sur ma version 2022 (je suis sur la 2023 aujourd'hui). Joint ci-dessous, j'ai mis le morceau de LISP sur lequel je fait ces tests, c'est pas très orthodoxe, mais jusqu'à maintenant, j'ai réussi à monter une grosse partie de mon code principal en faisant des tests de fonctions petit à petit comme ca, du coup dans ce document il y a la fonction en test, ainsi que les boucles nécessaires pour son utilisation. Fonction de type 2.2 - Faïençage - 127.lsp
JPhil Posté(e) le 1 septembre 2023 Posté(e) le 1 septembre 2023 Afin de gérer les accents de la question, le fichier Lisp doit être en ANSI au lieu de UTF-8. 1
Déméter_33 Posté(e) le 4 septembre 2023 Auteur Posté(e) le 4 septembre 2023 Le 01/09/2023 à 18:05, JPhil a dit : le fichier Lisp doit être en ANSI au lieu de UTF-8 Alors je ne connaissais pas... Mais je me sent tout de même tellement C... Du coup même juste avec (if (wcmatch Ouv "*µ*") Ca fonctionne impeccable... Je ne savais pas que l'écriture en ANSI était préférable pour le LISP. Près tout, c'est le premier langage de programmation que j'apprends... Eh bien merci beaucoup @JPhil
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