DenisHen Posté(e) le 30 août 2022 Posté(e) le 30 août 2022 Bonjour à la communauté. J'ai des nombres positifs et négatifs (-5, -3, 0, 3, 5...) mais pour créer un calque, j'ai besoin que le format soit "-05", "-03", "00", "03";.. J'ai donc fait un petit test dans la console, et j'obtient ça : _$ (rtos -2 2 0) "-2" _$ (wcmatch (rtos -2 2 0) "-") nil _$ (wcmatch (rtos -2 2 0) "2") nil _$ (wcmatch (rtos -2 2 0) "6") nil Je ne comprends pas le résultat. J'ai toujours la solution de demander si le nombre est négatif, je le multiplie par -1, et j'ajoute "-0" au début. Mais je ne trouve pas ça très... joli. 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 30 août 2022 Auteur Posté(e) le 30 août 2022 En fait, après consultation du site @didier, j'ai fini par trouver, en plus, je format en deux caractères : (defun c:DH_test () (setq Val 20) (if (< Val 0) ;;Négatif (progn (setq Long (strlen (setq Val$ (rtos Val 2 0)))) ; (setq Val$ (strcat "-0" (substr Val$ 2 5))); ) ;_ Fin de progn ;;Positif (progn (if (< (strlen (rtos Val 2 0)) 2) (setq Val$ (strcat "0" (rtos Val 2 0))) (setq Val$ (rtos Val 2 0)) ) ;_ Fin de if ) ;_ Fin de progn ) ;_ Fin de if (princ Val$) (princ) ) ;_ Fin de defun Encore un grand merci à didier pour son site... 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)
JPhil Posté(e) le 30 août 2022 Posté(e) le 30 août 2022 Y'a un truc qui me dérange dans ton code. Sinon tu peux tenter un truc dans ce genre : - 1) contrôler la longueur totale du nombre par rapport à la longueur du nombre en valeur absolue afin de déterminer si le nombre est négatif -> utiliser la fonction "ABS" - 2) contrôler la longueur du nombre en valeur absolue -> si inférieur à 2 appliquer un 0 devant sinon garder la valeur - 3) associer les deux étapes précédentes
DenisHen Posté(e) le 30 août 2022 Auteur Posté(e) le 30 août 2022 Salut @JPhil et merci pour ta proposition. Je n'ai pas tout compris, ça changera quoi à mon code. Si j'ai Val=-5, j'obtiendrais "-05", et si Val=3, j'obtiendrais "03", et si j'ai Val=12, j'obtiendrais "12". Mon code fonctionne comme ça, et surtout, je le comprends... Mais si tu as une autre proposition, pourquoi pas... 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 30 août 2022 Posté(e) le 30 août 2022 Question, si tu as Val=-15 qu'obtiens-tu ? ^^" car si je comprends bien ton code, tu devrais obtenir "-012", right ? Ce que suggère @JPhil c'est de simplifier ton code en ajoutant le signe "-" uniquement après, évitant le premier (if) en utilisant la fonction (abs) ! Quelque chose comme ceci devrais fonctionner par exemple : (defun foo (num i / str lng) (setq str (itoa (abs num))) (setq lng (strlen str)) (repeat (- i lng) (setq str (strcat "0" str))) (if (minusp num) (strcat "-" str) str ) ) Avec num correspondant au nombre que tu veux (donc par exemple Val, ici 20) et i le nombre de chiffres significatifs (indique le nombre de "0" à placer au début si nécessaire) Donc pour l'exemple ci-dessus : _$ (foo 20 2) "20" _$ (foo -5 2) "-05" _$ (foo -5 0) "-5" _$ (foo 3 2) "03" _$ (foo 20 3) "020" Évidemment, tes exemples utilisent uniquement des valeurs fixes, donc si on veut étendre le jeu aux nombres décimaux on peut faire cela plutôt : (defun foo2 (num i / str lng) (setq str (vl-princ-to-string (abs num))) (setq lng (strlen (itoa (fix (abs num))))) (repeat (- i lng) (setq str (strcat "0" str))) (if (minusp num) (strcat "-" str) str ) ) NB: Dans ce genre de cas, je préfère utiliser (vl-princ-to-string) au lieu de (rtos) car elle n'est pas influencée par la valeur de DIMZIN contrairement à (rtos), pouvant ainsi renvoyer une chaîne de caractères ne correspondant pas exactement au nombre renseigné au départ. On pourrait également renforcer le programme en vérifiant que l'argument num est bien un nombre (entier ou décimal) en utilisant la fonction (numberp). Bisous, Luna
DenisHen Posté(e) le 30 août 2022 Auteur Posté(e) le 30 août 2022 Sa"lu-na" (Hi hi hi) Que dire, Wouaouw ! ! ! Encore un grand merci à toi, J'apprends plein de trucs... J'ai cherché à mettre en défaut ton FOO (pourquoi toujours "FOO", ça vient d'Eric Raymond ?), mais rien à dire... Merci encore à toi, et Miaou à tout le monde... 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 31 août 2022 Posté(e) le 31 août 2022 Je viens de m'apercevoir que je me suis trompé sur Val=-15 donc renvoie "-012"... >w< Pour la fonction foo, j'ai remarqué que sur les forums anglophones les fonctions étaient toujours nommées ainsi. Je suppose que l'explication vient de là : In the US (as Wikipedia says) "foo" and "bar" are common placeholders in computer programming. They are often used as the names of unimportant variables. They've been used since the early 1960s. They come from the combination "foobar", another meaningless term used since the 1960s in computing. Du coup chat me semble parfaitement logique d'utiliser cette dénomination lorsque le nom de la fonction importe peu... Bisous, Luna
DenisHen Posté(e) le 31 août 2022 Auteur Posté(e) le 31 août 2022 ChaLuna. Je me suis apperçu plusieurs fois, au fil du temps, que je copiais bêtement les "FOO" dans mes Lisp. Et il interféraient entre eux (le dernier chargé avait raison 😉 ). Ce doit être pour cette raison que Maître (gile) et d'autres les personnalisent systématiquement. Encore merci à toi... 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 31 août 2022 Posté(e) le 31 août 2022 Le 31/08/2022 à 20:06, DenisHen a dit : Ce doit être pour cette raison que Maître (gile) et d'autres les personnalisent systématiquement. Non, je peux aussi utiliser 'foo' assez souvent mais généralement de façon locale (d'où l'importance de déclarer les variables et aussi les noms de fonction localement). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Luna Posté(e) le 1 septembre 2022 Posté(e) le 1 septembre 2022 En effet, j'ai oublié de préciser qu'il s'agit d'un nom temporaire... C'est à toi de renommer la fonction selon tes envies/habitudes (car le nom d'une fonction peut sembler logique pour quelqu'un et complètement aberrant pour quelqu'un d'autre) ou bien il faut déclarer tes fonctions localement comme l'explique (gile) ! A vrai dire, c'est également un soucis de flemmardise de ne pas vouloir réfléchir à un nom pour une fonction développée à la va vite, et je m'en excuse. Une chose est sûre en tous cas, à chaque fois que je développe une fonction dont je ne trouve pas de nom pertinent (et qui n'a d'utilité que pour un unique programme), j'ai souvent à les appeler (foo) voire (f). Mais bien évidemment dans 100% des cas, ces fonctions sont déclarées localement ! Bisous, Luna
DenisHen Posté(e) le 1 septembre 2022 Auteur Posté(e) le 1 septembre 2022 Tu m'aides, tu me rends service et tu t'excuses ? ? ? 😊 Tu n'as pas à t'excuser, c'est à moi de le faire, même avec mes piètres connaissances, j'aurais du le savoir... Encore merci à vous... 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