marionsname Posté(e) le 11 octobre 2008 Posté(e) le 11 octobre 2008 Bonjour à vous tous ici présents.une vielle routine qui convertit du decimal à l'hexa : (defun Dec2Hex (Num / HexVal TmpNum TmpVal) (setq HexVal "" TmpNum Num ) (while (< 0 TmpNum) (setq TmpVal (rem TmpNum 16) HexVal (strcat (if (< TmpVal 10) (chr (+ 48 TmpVal)) (chr (+ 55 TmpVal)) ) HexVal ) TmpNum (/ TmpNum 16) ) ) HexVal ) modifié legerement pour obtenir une autre variable var3 tout en gardant HexVal : (defun Dec2Hex (Num / HexVal TmpNum TmpVal) (setq HexVal "" TmpNum Num ) (while (< 0 TmpNum) (setq TmpVal (rem TmpNum 16) (progn HexVal (setq var3 HexVal)) (strcat (if (< TmpVal 10) (chr (+ 48 TmpVal)) (chr (+ 55 TmpVal)) ) HexVal ) TmpNum (/ TmpNum 16) ) ) (progn HexVal (setq var3 HexVal)) ) que j'utilise à l'interieur d'un code du genre : (dec2Hex var2) où "var2" est un entier recupéré par (setq var2 (atoi (substr var1 1 3))) var1 est une chaine. il me sort "erreur:type d'argument incorrect: stringp 0" Je pense que ça coince au niveau de cette fonction dec2Hex car quand je tape !var3 ca me donne nil et quand je retappe le même code càdire (dec2Hex var2) ca marche et var3 contient la valeur juste. je me demande ce problème est du à quoi?merci
(gile) Posté(e) le 11 octobre 2008 Posté(e) le 11 octobre 2008 Salut, La modification que tu as faite génère une erreur : erreur: nom de la variable incorrect dans SETQ: (PROGN HEXVAL (SETQ VAR3 HEXVAL)) Je ne comprends pas ce que tu veux dire par "tout en gardant HexVal ".Il s'agit d'une variable locale qui revient donc à nil après l'exécution de la routine. En conservant la routine originale, tu peux tout simplement faire : (setq var2 (dec2hex var2)) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
marionsname Posté(e) le 11 octobre 2008 Auteur Posté(e) le 11 octobre 2008 effectivement, vous avez raison, j'ai rectifié et fait comme vous avez indiqué (defun c:zzz () (setq var1 "25659854752158" var2 (atoi (substr var1 1 3)) ) (setq var3 (dec2Hex var2)) ) (defun dec2Hex (INum / TmpNum TmpVal) (setq HexVal "" TmpNum Num ) (while (< 0 TmpNum) (setq TmpVal (rem TmpNum 16) HexVal (strcat (if (< TmpVal 10) (chr (+ 48 TmpVal)) (chr (+ 55 TmpVal)) ) HexVal ) TmpNum (/ TmpNum 16) ) ) HexVal ) est-ce le problème vient de l'entier car j'ai var3 "" (chaine vide)[Edité le 11/10/2008 par marionsname] [Edité le 11/10/2008 par marionsname]
(gile) Posté(e) le 11 octobre 2008 Posté(e) le 11 octobre 2008 Re, Attention, la programmation demande beaucoup de rigueur. Tu as changé le nom de l'argument (Num -> INum) dans la déclaration et pas dans le reste de la routine. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
marionsname Posté(e) le 11 octobre 2008 Auteur Posté(e) le 11 octobre 2008 oh la la une erreur de frappe.marche bien maintenant, merciiiiii
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