tiboulen Posté(e) le 27 juillet 2007 Posté(e) le 27 juillet 2007 bonjourj'ai une chaine de caractere : mliste = "un deux trois"je voudrais extraire ces trois elements sous forme de 3 stringafin de faire des recherches ou des comparaisons dansles textes de mon dessinsi quelq' un a une idee merci d' avance
(gile) Posté(e) le 27 juillet 2007 Posté(e) le 27 juillet 2007 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
(gile) Posté(e) le 1 août 2007 Posté(e) le 1 août 2007 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
Patrick_35 Posté(e) le 1 août 2007 Posté(e) le 1 août 2007 SalutComme 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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