DenisHen Posté(e) le 23 août 2022 Posté(e) le 23 août 2022 Bonjour à la communauté. J'ai un (initget avec plusieurs choix. Mais quand j'en choisi un, le prompteur ne revient pas au choix : (defun c:DH_TestInitGet () (initget 1 "Saisie Épaisseur Type Niveau") (setq Choix (getkword "\nChoix de l'option [Saisie/Épaisseur/Type/Niveau] : ")) (cond ((= Choix "Saisie") (princ "\nChoix : Saisie")) ((= Choix "Épaisseur") (princ "\nChoix : Épaisseur")) ((= Choix "Type") (princ "\nChoix : Type")) ((= Choix "Niveau") (princ "\nChoix : Niveau")) ) ;_ Fin de cond ) ;_ Fin de defun J'ai trouvé un début de solution que j'ai trouvé sur "Google est mon ami" avec un (while : (defun c:DH_TestInitGet () (while (/= (type Choix) 'LIST) (initget 1 "Saisie Épaisseur Type Niveau") (setq Choix (getkword "\nChoix de l'option [Saisie/Épaisseur/Type/Niveau] : ")) (cond ((= Choix "Saisie") (princ "\nChoix : Saisie")) ((= Choix "Épaisseur") (princ "\nChoix : Épaisseur")) ((= Choix "Type") (princ "\nChoix : Type")) ((= Choix "Niveau") (princ "\nChoix : Niveau")) ) ;_ Fin de cond ) ;_ Fin de while ) ;_ Fin de defun Mais avec ce code, je n'arrive pas à sortir du (while. Il y a bien la solution d'ajouter une option "Sortie", mais est-il possible de sortir de la bouble par un [ENTRER] ? J'ai trouvé d'autres codes, mais que je ne comprends pas. Bien à toi la communauté. 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)
(gile) Posté(e) le 23 août 2022 Posté(e) le 23 août 2022 Salut, Il y a 1 heure, DenisHen a dit : Mais avec ce code, je n'arrive pas à sortir du (while Encore une fois, fais des test avec des expressions simples (c'est si facile en LISP depuis la console ou la ligne de commande). Quelle est la valeur renvoyée quand tu fais Entrée en réponse à un getkword ? Pourquoi testes-tu si cette valeur est une liste ? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 23 août 2022 Auteur Posté(e) le 23 août 2022 Salut @(gile) et merci de me répondre. Je n'arrive pas à savoir quelle est la réponse si je fais [ENTRER] Mais je viens de voir (dans ton merveilleux "Introduction a AutoLISP") une sorte de "Else" (T...), devrais-je fouiller par là ? Encore merci pour ton aide. 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 23 août 2022 Posté(e) le 23 août 2022 il y a 29 minutes, DenisHen a dit : Je n'arrive pas à savoir quelle est la réponse si je fais [ENTRER] Si tu lances l'expression (getkword ...) depuis la console, la réponse s'affiche dans la console, si tu le fais depuis la ligne de commande, la réponse s'affiche sur la ligne de commande. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 24 août 2022 Auteur Posté(e) le 24 août 2022 Bonjour @(gile) et merci pour ton aide. Le retour à la touche [ENTRER] est nil. Je pense avoir trouvé, mais je ne trouve pas le (setq Choix "Valeur") très élégant : (defun c:DH_TestInitGet ( / Choix) (setq Choix "Valeur") (while (/= Choix nil) (initget "Saisie Épaisseur Type Niveau") (setq Choix (getkword "\nChoix de l'option [Saisie/Épaisseur/Type/Niveau] : ")) (cond ((= Choix "Saisie") (princ "\nChoix : Saisie")) ((= Choix "Épaisseur") (princ "\nChoix : Épaisseur")) ((= Choix "Type") (princ "\nChoix : Type")) ((= Choix "Niveau") (princ "\nChoix : Niveau")) ) ;_ Fin de cond ) ;_ Fin de while (princ) ) Je ne sais pas si j'ai la bonne solution, mais je pense avoir trouvé une parade, mais pas plus élégante pour cela : (defun c:DH_TestInitGet ( / Choix) (while (/= (type Choix) 'LIST) (initget "Saisie Épaisseur Type Niveau") (setq Choix (getkword "\nChoix de l'option [Saisie/Épaisseur/Type/Niveau] : ")) (cond ((= Choix "Saisie") (princ "\nChoix : Saisie")) ((= Choix "Épaisseur") (princ "\nChoix : Épaisseur")) ((= Choix "Type") (princ "\nChoix : Type")) ((= Choix "Niveau") (princ "\nChoix : Niveau")) (T (setq Choix '("Sortie"))) ) ;_ Fin de cond ) ;_ Fin de while (princ) ) ;_ Fin de defun Encore merci pour ton aide. 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)
didier Posté(e) le 24 août 2022 Posté(e) le 24 août 2022 Bonjour @DenisHen Il semble que tu ne lises pas les réponses, ou si tu le fais tu ne réponds pas aux questions posées. Pourquoi testes-tu si "choix" n'est pas une liste avec ton while ? Pourquoi les quatre premières conditions renvoient une chaîne et la dernière une liste ? Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
DenisHen Posté(e) le 24 août 2022 Auteur Posté(e) le 24 août 2022 Bonjour @didier. La dernière condition transforme la variable Choix en liste pour sortir du (while. Je sais que ça ne doit pas être très académique, mais je l'ai écris comme ça, car je comprends ce code. 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)
Luna Posté(e) le 24 août 2022 Posté(e) le 24 août 2022 Et pourquoi ne pas simplement faire : (defun c:DH_TestInitGet ( / Choix) (while (/= Choix "Quitter") (initget "Saisie Épaisseur Type Niveau Quitter") (setq Choix (getkword "\nChoix de l'option [Saisie/Épaisseur/Type/Niveau/Quitter] <Quitter> : ")) (cond ((= Choix "Saisie") (princ "\nChoix : Saisie")) ((= Choix "Épaisseur") (princ "\nChoix : Épaisseur")) ((= Choix "Type") (princ "\nChoix : Type")) ((= Choix "Niveau") (princ "\nChoix : Niveau")) (T (setq Choix "Quitter")) ) ;_ Fin de cond ) ;_ Fin de while (princ) ) ;_ Fin de defun J'ai plus l'habitude d'utiliser une variable booléenne différente de mon (getkword) pour mettre fin à la boucle : (defun c:DH_TestInitGet ( / break Choix) (while (not break) (initget "Saisie Épaisseur Type Niveau") (setq Choix (getkword "\nChoix de l'option [Saisie/Épaisseur/Type/Niveau] <Quitter> : ")) (cond ((= Choix "Saisie") (princ "\nChoix : Saisie")) ((= Choix "Épaisseur") (princ "\nChoix : Épaisseur")) ((= Choix "Type") (princ "\nChoix : Type")) ((= Choix "Niveau") (princ "\nChoix : Niveau")) ((null choix) (setq break T)) ) ;_ Fin de cond ) ;_ Fin de while (princ) ) ;_ Fin de defun Mais l'utilisation d'un type différent n'est pas nécessaire...Je pense surtout que tu as eut l'idée de faire une différenciation via le type mais ce n'est pas nécessaire... Une autre variante, plus logique serait d'avoir le (getkword) comme condition : (defun c:DH_TestInitGet ( / Choix) (while (progn (initget "Saisie Épaisseur Type Niveau") (setq Choix (getkword "\nChoix de l'option [Saisie/Épaisseur/Type/Niveau] <Quitter> : ")) ) (cond ((= Choix "Saisie") (princ "\nChoix : Saisie")) ((= Choix "Épaisseur") (princ "\nChoix : Épaisseur")) ((= Choix "Type") (princ "\nChoix : Type")) ((= Choix "Niveau") (princ "\nChoix : Niveau")) ) ;_ Fin de cond ) ;_ Fin de while (princ) ) ;_ Fin de defun Bisous, Luna
DenisHen Posté(e) le 24 août 2022 Auteur Posté(e) le 24 août 2022 Bonjour @Luna et un grand merci pour cette leçon et ton aide... J'ai appris plein de truc... Et le (not break) et le (null choix) (setq break T)), je trouve ça super élégant... Mais je pense qu'il y a une parenthèse en trop avant le (null. En tous cas, un super grand merci... 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