Aller au contenu

(wcmatch ... ) et les caractères spéciaux


Déméter_33

Messages recommandés

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

@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:

image.png.a12f692c314547b120ca4e56a66ed490.png

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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é