Aller au contenu

Transformer une LISTE en CHAINE


Messages recommandés

Posté(e)

:D Bonjour !!!

 

Et oui je n'en finis plus avec mes questions...

 

Ce matin : j'ai fait un entget et je veux mettre le résultat dans un fichier txt.

 

Mais j'ai l'impression que parceque c'est une liste et pas une chaine, ça ne marche pas.

 

Y-a-til un moyen de transformer une liste en chaine ?

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

transfostrli

(transfostrli chaîne)

 

Transforme une liste d’atomes sous forme de chaîne et séparés par une virgule en une liste

 

 

(transfostrli "0,24.0,48")

(0 24.0 48)

 

(defun transfostrli (nom / compt01 lettre chaine chainesortie)
 (setq compt01 1 chaine "" chainesortie nil)
 (repeat (- (strlen nom) 1)
   (if (/= (setq lettre (substr nom compt01 1)) ",")
     (setq chaine (strcat chaine lettre))
     (setq chainesortie (cons (read chaine) chainesortie) chaine ""))
   (setq compt01 (1+ compt01))
   )
 (setq lettre (substr nom compt01 1) chaine (strcat chaine lettre)
chainesortie (reverse (cons (read chaine) chainesortie)))
 )

 

 

 

transfolistr

(transfolistr liste)

 

Transforme une liste en une chaîne d’atomes séparés par une virgule

 

 

(transfolistr '(0 24.0 48))

"0,24.0,48"

 

(defun transfolistr (liloc / a result)
 (setq a 1 result (vl-princ-to-string (nth 0 liloc) ))
 (repeat (1-(length liloc)) 	
   (setq result (strcat result "," (vl-princ-to-string (nth a liloc) ))
  a (1+ a)))
 result)

 

Cadeau, extrait des Trambertools, que la planète entière s'arrache

:cool:

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

...mais bon, pour ton cas précis, va falloir boucler avec FOREACH, par exemple et ca n'est pas très adapté.

 

Dans un ENTGET, tu n'as que des paquets de 2, alors mes fonctions vont pas être l'apanacée

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Comme le dit Tramber, avec un foreach, et ce n'est pas gagné. Il va falior imaginer tous les cas envisageable et c'est selon le type d'entité sélectionnée

 

@+

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

Posté(e)

Ludwig

 

Voici un truc que j'utilise pour me faciliter les constitutions d'objet avec (entmake) dans mes routines.

Si ça peut t'inspirer, tant mieux, ça rejoint ta demande.

(defun c:dxf2file ( / oldim obj lst_pair grp_el typ_el ch1 ch2 ch msg ent fc f_open)
(setq ent 0 oldim (getvar "dimzin"))
(setvar "dimzin" 0)
(while (not (listp ent))
(if user-dxf
	(setq msg "\nEntite/ - Choix de l'objet à lister ses codes DXF: ")
	(setq msg "\n/Sous-entite - Choix de l'objet à lister ses codes DXF: ")
)
(initget "Entite Sous-entite")
(if user-dxf
	(setq ent (nentsel msg))
	(setq ent (entsel msg))
)
(if (eq ent "Sous-entite") (setq user-dxf T))
(if (eq ent "Entite") (setq user-dxf nil))
)
(cond
(ent
	(setq obj (entget (car ent)) ch "")
	(while obj
		(setq lst_pair (car obj))
		(setq grp_el (car lst_pair) typ_el (cdr lst_pair))
		(cond
			((eq (type grp_el) 'INT)
				(setq ch1 (itoa grp_el))
			)
			((eq (type grp_el) 'REAL)
				(setq ch1 (rtos grp_el 2 4))
			)
			((eq (type grp_el) 'STR)
				(setq ch1 grp_el)
			)
			((eq (type grp_el) 'ENAME)
				(setq ch1 "")
			)
			(T
				(setq ch1 "")
			)
		)
		(cond
			((eq (type typ_el) 'INT)
				(setq ch2 (itoa typ_el))
			)
			((eq (type typ_el) 'REAL)
				(setq ch2 (rtos typ_el 2 4))
			)
			((eq (type typ_el) 'STR)
				(setq ch2 typ_el)
			)
			((eq (type typ_el) 'ENAME)
				(setq ch2 "")
			)
			((eq (type typ_el) 'LIST)
				(setq ch2 (strcat (rtos (car typ_el) 2 4) " " (rtos (cadr typ_el) 2 4) (if (caddr typ_el) (strcat " " (rtos (caddr typ_el) 2 4)) "")))
			)
			(T
				(setq ch2 "")
			)
		)
		(if (eq (type typ_el) 'LIST)
			(setq ch (strcat ch "(" ch1 " " ch2 ")\n"))
			(setq ch (strcat ch "(" ch1 " . " ch2 ")\n"))
		)
		(setq obj (cdr obj) ch1 "" ch2 "")
	)
	(setq fc (getfiled "Fichier texte à créer" (getvar "dwgname") "txt" 1))
	(setq f_open (open fc "w"))
	(write-line ch f_open)
	(close f_open)
)
)
(setvar "dimzin" oldim) 
(prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

(vl-prin1-to-string data)

 

Arguments

 

data

 

Any AutoLISP data.

 

Return Values

 

A string containing the printed representation of data as if displayed by prin1.

 

Examples

 

_$ (vl-prin1-to-string "abc")

"\"abc\""

_$ (vl-prin1-to-string "c:\\acadwin")

"\"C:\\\\ACADWIN\""

_$ (vl-prin1-to-string 'my-var)

"MY-VAR"

 

ou

 

(vl-princ-to-string data)

 

Arguments

 

data

 

Any AutoLISP data.

 

Return Values

 

A string containing the printed representation of data as if displayed by princ.

 

Examples

 

_$ (vl-princ-to-string "abc")

"abc"

_$ (vl-princ-to-string "c:\\acadwin")

"C:\\ACADWIN"

_$ (vl-princ-to-string 'my-var)

"MY-VAR"

Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier

Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To

GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

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é