tyrese69_ Posté(e) le 13 février 2012 Posté(e) le 13 février 2012 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 formede 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>
tyrese69_ Posté(e) le 13 février 2012 Auteur Posté(e) le 13 février 2012 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
Tramber Posté(e) le 13 février 2012 Posté(e) le 13 février 2012 (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 ./__\. (.°=°.)
(gile) Posté(e) le 13 février 2012 Posté(e) le 13 février 2012 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
tyrese69_ Posté(e) le 13 février 2012 Auteur Posté(e) le 13 février 2012 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) )
(gile) Posté(e) le 13 février 2012 Posté(e) le 13 février 2012 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
tyrese69_ Posté(e) le 17 février 2012 Auteur Posté(e) le 17 février 2012 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
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