Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

 

Voici mon problème :

 

Je souhaite utiliser la fonction:

 

(dos_proplist "Drawing Properties" "Modify Properties" x)

 

Et dans la liste les données doivent ^tre sous la forme :

 

(setq x '(("Title" . "Floorplan") ("Project" . "Project A")))

 

J'ai dans mon programme une boucle qui lit les valeur d'un fichier XML :

 

dont le résultat est sous la forme :

 

("WC . "0")

 

extrait du code en fin ! Et du format du fichier XML !

 

Les fonction XML peuvent être jointes, si vous ne les avez pas déjà !

 

Daniel OLIVES

 

Ma question est comment ajouter à chaque boucle, la valeur de l'atome trouvé ! Afin de conserver la forme

de la liste qui sera utilisable dans (dos_proplist

 

(setq oTPSCmds (XML-Get-Child oSettings nil "TPSCmds"))	;	(XML-Get-ChildList oTPSCmds)
;	(setq oTPSCmd (XML-Get-Child oTPSCmds nil "TPSCmd"))	;	(XML-Get-Attribute-List oTPSCmd)
(setq valPrec (cons "Name" "Nombre"))
;	(list valprec valret)
(foreach itm (XML-Get-ChildList oTPSCmds)
	;	#<VLA-OBJECT IXMLDOMElement 000000002b3adf60>
	;	(XML-Get-Attribute-List itm)
	(if (/= (XML-Get-Attribute itm "Name" nil) "")
		;	(cons (XML-Get-Attribute itm "Name" nil) (XML-Get-Attribute itm "Nombre" nil))	= ("WC" . "0")
		(progn	
			; (list (car exist_list) new_item (last exist_list))
			(setq valLuex (cons (XML-Get-Attribute itm "Name" nil) (XML-Get-Attribute itm "Nombre" nil)))
; partie du code à corriger pour conserver la syntaxe  !!!			
[i](setq valprec (list (car valPrec) valLuex (last valPrec)))[/i]
       ;
		)
	)
	
)

 

<?xml version="1.0"?>
<Settings>
<TPSCmds>
	<TPSCmd Name="EJPROPS" Fichier="Egidj_acad.vlx" Nombre="0"/>
	<TPSCmd Name="EJRIMG" Fichier="Egidj_acad.vlx" Nombre="0"/>
</TPSCmds>
</Settings>

Posté(e)

Re bonjour,

 

Car avec :

(setq valprec (list valPrec valLuex))

 

 

J'ai par exemple :

((((((((((((((("Name" . "Nombre") ("VC" . "0")) ("PTM" . "0")) ("INS" . "0"))

("INSDS" . "0")) ("INSDT" . "0")) ("XCL" . "0")) ("VT" . "0")) ("SCUG" . "0"))

("SCUO" . "0")) ("SCUI" . "0")) ("ASCU" . "0")) ("DIVPT" . "0")) ("VPCTAB" .

"0")) ("WC" . "0"))

 

Mes listes sont imbriquées !

 

Daniel OLIVES

Posté(e)

(list (car valPrec) valLuex (last valPrec))

?

C'est ça ?

 

Il faut mieux

(cons(car valPrec) 'uneliste')

Tu dois construire une liste et non lister des listes...

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Salut,

 

Tramber a raison, il faut utiliser cons au lieu de list, mais attention, pour une liste de paires pointées, il faut utiliser :

(cons paire liste)

où liste est une liste (même vide = nil) et pas une paire pointée.

 

Voir ce sujet.

 

(setq oTPSCmds (XML-Get-Child oSettings nil "TPSCmds")
     valprec  nil
)
(foreach itm (XML-Get-ChildList oTPSCmds)
 (if (/= (XML-Get-Attribute itm "Name" nil) "")
   (setq valLuex (cons (XML-Get-Attribute itm "Name" nil) (XML-Get-Attribute itm "Nombre" nil))
  valprec (cons valLuex valPrec)
   )
 )
)
(setq valprec (cons (cons "Name" "Nombre") valprec))

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

Posté(e)

Bonjour Tramber,

 

J'ai bien compris qu'il fallait construire la liste, donc j'ai corrigé le code comme suis :

 

(setq ValPrec (cons (cons (XML-Get-Attribute itm "Name" nil) (XML-Get-Attribute itm "Nombre" nil)) ValPrec)

 

En prennant bien soin d'initialiser la 1ere valeur (en réalité la dernière) pour qu'elle corresponde au titres des colonnes.

 

Cela fonctionne donc trés bien maintenant !

 

Le but est tout simplement de comptabiliser les commandes lisp lancées depuis nos menu entreprise ou via la ligne de commande.

Afin de réaliser des statistiques sur leur utilisation par nos partenaires et par nos propres utilisateurs en interne !

C'est dans fichier XML que sont répertoriées les commandes, les fichiers dont elles sont issue et le nombre de fois où elles ont été utilisée.

 

Daniel OLIVES

 

 
(defun c:LXCU ()
;; Load the VisualLISP stuff
(vl-load-com)
(if (= (GetVerx64) "x64")
	(setq PathTPSLoad "c:\\TPS\\Acad\\Routinesx64\\")
	(setq PathTPSLoad "c:\\TPS\\Acad\\Routines\\")
)
;; Store an Active-X object to the main node ("Settings") of the XML data file.
(setq oSettings (XML-Get-XMLObject (strcat PathTPSLoad "TPS_Cmd.xml")))
;	(vlax-dump-object oTPSCmds)
;; Store an Active-X object to the "DrawingVars" node of the XML file.
(setq oTPSCmds (XML-Get-Child oSettings nil "TPSCmds"))	;	(XML-Get-ChildList oTPSCmds)
;	(setq oTPSCmd (XML-Get-Child oTPSCmds nil "TPSCmd"))	;	(XML-Get-Attribute-List oTPSCmd)
(setq ValPrec (list '(" " . " ")))
;	(list valprec valret)
(foreach itm (XML-Get-ChildList oTPSCmds)
	;	#<VLA-OBJECT IXMLDOMElement 000000002b3adf60>
	;	(XML-Get-Attribute-List itm)
	(if (/= (XML-Get-Attribute itm "Name" nil) "")
		;	(cons (XML-Get-Attribute itm "Name" nil) (XML-Get-Attribute itm "Nombre" nil))	= ("WC" . "0")
		(progn	
			; (list (car exist_list) new_item (last exist_list))
			(setq ValPrec (cons  (cons (XML-Get-Attribute itm "Name" nil) (XML-Get-Attribute itm "Nombre" nil)) ValPrec))
		)
	)
	
)
;(setq ValPrec (cons (cons '("Name" . "Nombre"))) ValPrec)
;	(setq x '(("Title" . "Floorplan") ("Project" . "Project A")))
; (reverse Valprec)
(setq ValPrec (cons  (cons "Name" "Nombre") ValPrec))
(dos_proplist "Technip TPS - Comptage des commandes TPS" "Listes des données" ValPrec)

)

Posté(e)

Re,

 

Ceci est inutile :

(setq ValPrec (list '(" " . " ")))

Comme je le dis plus haut si valprec est nil (liste vide), à la première itération dans le foreach

(setq ValPrec (cons  (cons (XML-Get-Attribute itm "Name" nil) (XML-Get-Attribute itm "Nombre" nil)) ValPrec))

construira la liste en ajoutant la paire pointée à la liste vide.

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

Posté(e)

Re,

 

Ceci est inutile :

(setq ValPrec (list '(" " . " ")))

Comme je le dis plus haut si valprec est nil (liste vide), à la première itération dans le foreach

(setq ValPrec (cons  (cons (XML-Get-Attribute itm "Name" nil) (XML-Get-Attribute itm "Nombre" nil)) ValPrec))

construira la liste en ajoutant la paire pointée à la liste vide.

 

Bonjour Gile,

Merci pour ton aide, à bientôt sur le forum !

Olives daniel

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é