Aller au contenu

test


Messages recommandés

Posté(e)

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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité