DenisHen Posté(e) le 10 octobre 2016 Posté(e) le 10 octobre 2016 Bonjour à tous. Voilà, je fais évoluer ma routine de "Cotation XYZ". Je demande à l'utilisateur le nombre de saisies manuelles qu'il va effectuer. Poue ce faire, j'ai une variable qui comporte sa réponse : (initget 1 "Aucune 1 2 3 4 5 6 7 8 9 inconnu") (setq SaisiTxtAv (getstring "\nCombien de ligne y-at'il à saisir avant les coordonnées [Aucune/1/2/3/4/5/6/7/8/9/Inconnu] : " ) ;_ Fin de getstring ) ;_ Fin de setq J'ai donc dans ma variable SaisiTxtAv un string. J'aimerai, plus loin dans ma routine, savoir si elle contient un nombre ou un string, j'ai donc fais ça : (if (= (type (setq NbTxtAv (atoi NbTxtAv))) INT) (while (> NbTxtAv 0) (setq TextAv (inputbox "DenisH" "Tapez le ligne :" "")) (setq Text (strcat Text "//P" TextAv)) (setq NbTxtAv (- NbTxtAv 1)) ) ;_ Fin de while ) ;_ Fin de if Mais je suis sûr que c'est mon (setq NbTxtAv (atoi NbTxtAv)) qui plante. Car ça plante. Je ne sais pas trop comment faire pour attribuer un integer à NbTxtAv (1, 2, 3...) seulement si celui-ci est un string comportant un integer ("1", "2", "3"...) et ne pas faire d'erreur si NbTxtAv = "Aucun" ou "Inconnu"... Si quelqu'un a une idée, un conseil... Je suis preneur... 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)
Tramber Posté(e) le 10 octobre 2016 Posté(e) le 10 octobre 2016 Hello,tu devrais te pencher sur initget et tester la réponse avec (= rep "Aucune") et (= rep "Inconnu")(initget "Aucune Inconnu") (setq rep(getint "Valeur [Aucune/1/2/3/4/5/6/7/8/9/Inconnu]"))A et I deviennent des valeurs autorisées ainsi que les chiffres.Mais, actuellement, je peux aussi répondre 9999 Pour ton erreur de test atoi crée forcément un INT donc tu obtiens toujours T ! Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Tramber Posté(e) le 10 octobre 2016 Posté(e) le 10 octobre 2016 Plus radical :(initget "Aucune Inconnu 1 2 3 4 5 6 7 8 9") (setq rep(getkword "Valeur [Aucune/1/2/3/4/5/6/7/8/9/Inconnu]"))Purement et simplement.Et là, le atoi devra être placé judicieusement après que rep ait été testé. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
didier Posté(e) le 10 octobre 2016 Posté(e) le 10 octobre 2016 Coucou Puisque tu attends un integer c'est simpleDemande directement un integer en posant la question ...Au lieu de : (getstring "\nCombien de ligne y-at'il à sa ... (getint "\nCombien de ligne y-at'il à sa ... Si l'utilisateur ne répond pas un entier lors de sa saisie une boucle se forme automatiquement en attendant un entier. Ah !! DenisH et sa réticence à regarder l'aide en ligne, c'est quelque chose !!!Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
DenisHen Posté(e) le 10 octobre 2016 Auteur Posté(e) le 10 octobre 2016 Salut Tramber... Très instructif... Et mille merci pour tes deux réponses... Je pense choisir la deuxième et la traiter avec un cond, de ce genre :(cond ((= Rep "Aucun") ... ) ((= Rep "Inconnu") ... ) (((and (/= Rep "Aucun") (/= Rep "Inconnu")) (setq valeur (atoi Rep)) ... ) Et encore 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)
DenisHen Posté(e) le 10 octobre 2016 Auteur Posté(e) le 10 octobre 2016 Bonjour didier... J'ai jeté un coup d'oeil à l'aide, mais je n'ai pas trouvé les deux astuces de Tramber... ;) 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)
Tramber Posté(e) le 10 octobre 2016 Posté(e) le 10 octobre 2016 Le COND, c'est (souvent) parfait ;) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 10 octobre 2016 Posté(e) le 10 octobre 2016 Salut, Première chose : choisir la bonne fonction. Ce que tu veux, c'est que l'utilisateur choisisse une option parmi celles proposées, autrement dit : un "mot clé" (keyword en anglais) donc, utilise getkword. Avec getstring l'utilisateur peut entrer n'importe quelle chaîne et avec getint, il pourra entrer n'importe quel entier. Ensuite fais attention à la casse dans le initget : si tu ne mets aucune lettre en majuscule dans un mot clé, il faudra l'entrer en entier. Pour finir, comme getkword assure que l'utilisateur n'a pu entrer qu'un des mots clé spécifier, tu peut utiliser la fonction cond pour traiter le résultat qui sera :- soit égal à "Aucune" ;- soit égal à "Inconnu" ;- soit une chaîne convertible en entier. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 10 octobre 2016 Auteur Posté(e) le 10 octobre 2016 Merci à vous... Tramber : j'ai découvert la "puissance" de (cond dans CadXP, je ne sais plus où, mais c'est (souvent) plus simple qu'une suite de (if... (gile) : j'ai consulté (une fois de plus) ton merveilleux "Introduction_a_AutoLISP"... Et effectivement, un getkword est plus approprié à ma routine que getstring... Encore un grand merci à tous... 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 octobre 2016 Posté(e) le 10 octobre 2016 Salut Tramber... Très instructif... Et mille merci pour tes deux réponses... Je pense choisir la deuxième et la traiter avec un cond, de ce genre :(cond ((= Rep "Aucun") ... ) ((= Rep "Inconnu") ... ) (((and (/= Rep "Aucun") (/= Rep "Inconnu")) (setq valeur (atoi Rep)) ... ) Et encore merci... (and (/= Rep "Aucun") (/= Rep "Inconnu"))Est parfaitement inutile. Si l'exécution est arrivée à ce point, c'est que les deux premières conditions n'ont pas été remplies. On utilise en général T (toujours vrai) pour la dernière condition (valeur par défaut). (cond ((= Rep "Aucun") ;... ) ((= Rep "Inconnu") ;... ) (T (setq valeur (atoi Rep)) ;... ) ) On peut aussi directement mettre l'expression (setq valeur (atoi Rep)) qui ne retournera jamais nil : (cond ((= Rep "Aucun") ;... ) ((= Rep "Inconnu") ;... ) ((setq valeur (atoi Rep)) ;... ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 10 octobre 2016 Auteur Posté(e) le 10 octobre 2016 Ah ouais... Intéressant ton dernier code... Merci pour cette précision... 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