(gile) Posté(e) le 17 décembre 2007 Posté(e) le 17 décembre 2007 Avec les routines Alpha2Number et Number2Alpha de GetExcel ;;------------------------------------------------------------------------------- ;; Alpha2Number - Convertit une chaîne alphabétique en nombre entier ;; Function By: Gilles Chanteau from Marseille, France ;; Arguments: 1 ;; str = Chaîne à convertir ;; Exemple de syntaxe : (Alpha2Number "BU") = 73 ;;------------------------------------------------------------------------------- (defun Alpha2Number (str / num) (if (= 0 (setq num (strlen str))) 0 (+ (* (- (ascii (strcase (substr str 1 1))) 64) (expt 26 (1- num)) ) (Alpha2Number (substr str 2)) ) ) ) ;;------------------------------------------------------------------------------- ;; Number2Alpha - Convertit un nombre entier en chaîne alphabétique ;; Function By: Gilles Chanteau from Marseille, France ;; Arguments: 1 ;; num = Nombre à convertir ;; Exemple de syntaxe : (Number2Alpha 73) = "BU" ;;------------------------------------------------------------------------------- (defun Number2Alpha (num / val) (if (< num 27) (chr (+ 64 num)) (if (= 0 (setq val (rem num 26))) (strcat (Number2Alpha (1- (/ num 26))) "Z") (strcat (Number2Alpha (/ num 26)) (chr (+ 64 val))) ) ) ) (defun inc1 (str i / n num len low) (setq n (strlen str)) (while (and (< 0 n) (numberp (read (substr str n)))) (setq n (1- n)) ) (if (= n 0) (setq num str str "" ) (setq num (substr str (1+ n)) str (substr str 1 n) ) ) (and (= str (strcase str T)) (setq low T)) (cond ((= "" str) (setq len (strlen num) num (itoa (+ (atoi num) i)) ) (while (< (strlen num) len) (setq num (strcat "0" num)) ) num ) ((= "" num) (strcase (Number2Alpha (+ (Alpha2Number str) i)) (if low T nil ) ) ) (T (setq len (strlen num) str (strcase (Number2Alpha (+ (Alpha2Number str) (/ (+ i (atoi num)) (expt 10 len))) ) (if low T nil) ) num (itoa (rem (+ i (atoi num)) (expt 10 len))) ) (while (< (strlen num) len) (setq num (strcat "0" num)) ) (strcat str num) ) ) ) Avec la routine Inc-Str du challenge 4 modifiée pour respecter la casse ;; INC-STR ;; Incrémente une chaine alphabétique de la valeur spécifiée ;; ;; (inc-str "aa" 2) -> "ac" ;; (inc-str "ZZ" 29) -> "ABC" (defun inc-str (str inc / sub up) (defun sub (lst inc / tmp) (if (< 122 (setq tmp (+ inc (car lst)))) (if (cadr lst) (cons (+ (- tmp 122) 96) (sub (cdr lst) 1)) (list 97 97) ) (cons (+ inc (car lst)) (cdr lst)) ) ) (if (= str (strcase str)) (setq str (strcase str T) up T ) ) (repeat (/ inc 26) (setq str (vl-list->string (reverse (sub (reverse (vl-string->list str)) 26)) ) ) ) (setq str (vl-list->string (reverse (sub (reverse (vl-string->list str)) (rem inc 26))) ) ) (if up (strcase str) str ) ) (defun inc2 (str i / num len) (setq n (strlen str)) (while (and (< 0 n) (numberp (read (substr str n)))) (setq n (1- n)) ) (if (= n 0) (setq num str str "" ) (setq num (substr str (1+ n)) str (substr str 1 n) ) ) (cond ((= "" str) (setq len (strlen num) num (itoa (+ (atoi num) i)) ) (while (< (strlen num) len) (setq num (strcat "0" num)) ) num ) ((= "" num) (inc-str str i)) (T (setq len (strlen num) str (inc-str str (/ (+ i (atoi num)) (expt 10 len))) num (itoa (rem (+ i (atoi num)) (expt 10 len)))) (while (< (strlen num) len) (setq num (strcat "0" num)) ) (strcat str num) ) ) )[Edité le 18/12/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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