Aller au contenu

Messages recommandés

Posté(e)

bonjour

j'ai une chaine de caractere : mliste = "un deux trois"

je voudrais extraire ces trois elements sous forme de 3 string

afin de faire des recherches ou des comparaisons dans

les textes de mon dessin

si quelq' un a une idee merci d' avance

Posté(e)

Salut,

 

(setq str "un deux trois")
(while (setq pos (vl-string-position (ascii " ") str))
 (setq lst (cons (substr str 1 pos) lst)
str (substr str (+ 2 pos)))
 )
(reverse (cons str lst)) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

De façon plus générique, deux petites routines pour transformer une chaine avec séparateurs en liste et inversement.

 

;; str2lst
;; Transforme un chaine avec séparateur en liste de chaines
;;
;; Arguments
;; str : la chaine à transformer en liste
;; sep : le séparateur
;;
;; Exemples
;; (str2lst "a b c" " ") -> ("a" "b" "c")
;; (str2lst "1,2,3" ",") -> ("1" "2" "3")
;; (mapcar 'read (str2lst "1,2,3" ",")) -> (1 2 3)

(defun str2lst (str sep)
 (if (setq pos (vl-string-position (ascii sep) str))
   (cons (substr str 1 pos)
  (str2lst (substr str (+ 2 pos)) sep)
   )
   (list str)
 )
) 

 

;; lst2str
;; Concatène une liste et un séparateur en une chaine
;;
;; Arguments
;; lst : la liste à transformer en chaine
;; sep : le séparateur
;;
;; Exemples
;; (lst2str '(1 2 3) ",") -> "1,2,3"
;; (lst2str '("a" "b" "c") " ") -> "a b c"

(defun lst2str (lst sep)
 (if (cadr lst)
   (strcat (vl-princ-to-string (car lst))
    sep
    (lst2str (cdr lst) sep)
   )
   (vl-princ-to-string (car lst))
 )
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut

Comme les grands esprits se rencontrent ;)

Je viens justement d'en faire une mais avec le choix dans une liste de séparateurs --> "-" "." "/" "\" et encore " "

 

(defun format_str(str / loc pos separateur)
 (setq pos 1
loc 1
separateur (vl-string->list " -./\\") ; Ma liste de séparateurs
 )
 (while (< pos (strlen str))
   (if (member (ascii (substr str pos 1)) separateur)
     (setq lst (cons (substr str loc (- pos loc))
	      lst
	)
	loc (1+ pos)
     )
   )
   (setq pos (1+ pos))
 )
 (setq lst (cons (substr str loc (- (strlen str) (1- loc)))
	  lst
    )
 )
 (reverse lst)
)

 

ex : (format_str "1 2 3 4") --> ("1" "2" "3" "4")

ex : (format_str "1-2-3-4") --> ("1" "2" "3" "4")

ex : (format_str "1.2.3.4") --> ("1" "2" "3" "4")

ex : (format_str "1/2/3/4") --> ("1" "2" "3" "4")

ex : (format_str "1\\2\\3\\4") --> ("1" "2" "3" "4")

ex : (format_str "1 2-3.4/5\\6") --> ("1" "2" "3" "4" "5" "6")

 

@+

 

ps : (vl-string-position (ascii sep) ...) peut aussi se traduire par (vl-string-search sep ...)

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é