Communauté
AutoCAD – tous produits - Français
Bienvenue sur les forums AutoCAD d’Autodesk. Partagez vos connaissances, posez des questions, et explorez les sujets AutoCAD populaires.
annuler
Affichage des résultats de 
Afficher  uniquement  | Rechercher plutôt 
Vouliez-vous dire : 

LISP: extraction de valeur depuis une chaîne de caractère

2 RÉPONSES 2
RÉSOLU
Répondre
Message 1 sur 3
ftmanu777
159 Visites, 2 Réponses

LISP: extraction de valeur depuis une chaîne de caractère

Bonsoir à tous 🙂

 

Soit  une chaîne de caractère "1234.56789\t9876.54321\t11223.23" qui correspond à une coordonnée de point séparer par "\t".
J'ai voulu extraire de cette chaîne les valeurs X - Y - Z
Pour ce faire j'ai utiliser les fonctions "vl-string-right-trim" et "vl-string-left-trim" dans mes codes.
Ce pendant, comment le faire plus proprement car ce que j'ai fait semble trop amateur même si ça marche?


Merci à vous 🙂

 

Voici ce que j'ai écrit :

(setq ptX  (vl-string-right-trim
	      "123456789."
	      "1234.56789\t987.54321\t35.23324"
	    )
      ptX2 (vl-string-right-trim "\t" ptX)
      ptX3 (vl-string-right-trim "123456789." ptX2)
      ptXfinal (vl-string-right-trim "\t" ptX3)
)
(setq ptY  (vl-string-right-trim
	      "123456789."
	      "1234.56789\t987.54321\t35.23324"
	    )
      ptY2 (vl-string-right-trim "\t" ptY)
      ptY3 (vl-string-left-trim "123456789." ptY2)
      ptYfinal (vl-string-left-trim "\t" ptY3)
)
(setq ptZ  (vl-string-left-trim
	      "123456789."
	      "1234.56789\t987.54321\t35.23324"
	    )
      ptZ2 (vl-string-left-trim "\t" ptZ)
      ptZ3 (vl-string-left-trim "123456789." ptZ2)
      ptZfinal (vl-string-left-trim "\t" ptZ3)
)
2 RÉPONSES 2
Message 2 sur 3
_gile
en réponse à: ftmanu777

Salut,

 

Tu peux utiliser une fonction plus générique comme gc:str2lst (et la fonction inverse gc:lst2str qu'on trouve dans le fichier gc_List.lsp téléchargeable en bas de cette page).

;; gc:str2lst
;; Transforme un chaine avec séparateur en liste de chaines
;;
;; Arguments
;; str : la chaîne
;; sep : le séparateur
(defun gc:str2lst (str sep / pos)
  (if (setq pos (vl-string-search sep str))
    (cons (substr str 1 pos) (gc:str2lst (substr str (+ (strlen sep) pos 1)) sep))
    (list str)
  )
)

;; gc:lst2str
;; Concatène une liste de chaînes et un séparateur en une chaine
;;
;; Arguments
;; lst : la liste
;; sep : le séparateur
(defun gc:lst2str (lst sep)
  (apply 'strcat
	 (cons (car lst)
	       (mapcar (function (lambda (x) (strcat sep x))) (cdr lst))
	 )
  )
)

 

Exemple:

(gc:str2lst "1234.56789\t9876.54321\t11223.23" "\t")

renvoie : ("1234.56789" "9876.54321" "11223.23")

Que tu peux directement convertir en point avec :

(mapcar 'atof ("1234.56789" "9876.54321" "11223.23"))

 



Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

Message 3 sur 3
ftmanu777
en réponse à: ftmanu777

Merci beaucoup c'est super!

Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.

Publier dans les forums  

Autodesk Design & Make Report