x_all Posté(e) le 12 juin 2015 Posté(e) le 12 juin 2015 bonjour je voudrai écrire des listes dans un fichier. Mes listes sont définies par exemple (setq ent (car lsel) name (cdr (assoc -1 (entget ent))) PB (cdr (assoc 10 (Att-lst ent "PB"))) PH (cdr (assoc 10 (Att-lst ent "PH"))) Num (cdr (assoc 1 (Att-lst ent "NUM"))) ) (setq toto (list name PB PH Num)) ce qui me donne toto = (<Nom d'entité: 7ffff7a0510> (54.5 -66.6833 0.0) (83.3997 -46.5496 0.0) 2) je fait naïvement (setq file (open "D:\\test.txt" "w" ) ) (write-line toto file) (close file) et je me fait bien sur jeter à cause de l'argument toto qui n'est pas une string comment faire pour obtenir un fichier avec les lignes ? (<Nom d'entité: 7ffff7a0510> (54.5 -66.6833 0.0) (83.3997 -46.5496 0.0) 2)(<Nom d'entité: 7ffff7a0640> (16.0 -67.4833 0.0) (44.8997 -47.3496 0.0) 0)(<Nom d'entité: 7ffff7a0690> (142.5 -66.8833 0.0) (171.4 -46.7496 0.0) 6)(<Nom d'entité: 7ffff7a06e0> (94.8 -65.9833 0.0) (123.7 -45.8496 0.0) 6) si vous avez la solution, merci d'avance... quelques trucs sur autocad
(gile) Posté(e) le 13 juin 2015 Posté(e) le 13 juin 2015 Salut, Tout d'abord : correspond à un nom d'entité (ENAME en LISP) ce qui est équivalent à un ObjectId dans d'autres environnements (COM, .NET). Cet identifiant est unique dans la session (pour tous les dessins ouverts) mais il n'est pas pérenne : il est reconstruit à chaque nouvelle ouverture du dessin et peut être différent d'une fois sur l'autre.De toutes façon, un ename sous la forme "" est inexploitable (on ne peut pas s'en servir pour retrouver l'entité.Je te conseillerais donc plutôt d'utiliser le "handle" (ou maintien) de l'entité (cdr (assoc 5 (entget ent))). Cet identifiant est unique dans le dessin et il est pérenne. La fonction handent permet de retrouver le ename d'une entité à partir de son handle. Ensuite, tu peux utiliser la fonction vl-prin1-to-string pour convertir tout type de donnée AutoLISP, y compris des listes, en une chaîne de caractère. La fonction read permet le processus inverse. (vl-prin1-to-string '("1E56" (54.5 -66.6833 0.0) (83.3997 -46.5496 0.0) 2)) retourne : "(\"1E56\" (54.5 -66.6833 0.0) (83.3997 -46.5496 0.0) 2)"et(read "(\"1E56\" (54.5 -66.6833 0.0) (83.3997 -46.5496 0.0) 2)") retourne : ("1E56" (54.5 -66.6833 0.0) (83.3997 -46.5496 0.0) 2) L'inconvénient de la méthode est une perte de précision pour les nombres réels qui ne conserve que la précision affichée.Si tu as besoin de conserver un maximum de précision, il faut utiliser un autre format de stockage des données et traiter séparément chaque coordonnée. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
x_all Posté(e) le 13 juin 2015 Auteur Posté(e) le 13 juin 2015 Merci beaucoupTes réponses sont toujours des plus précises et éclairantes.Je me posait effectivement la question de la lecture, car j'allais me faire jeter pareillement dans l'autre sens. Pour l'utilisation du handle, j'avais noté qu'il était spécifique à la cession, mais je croyais pouvoir m'en servir. Ton conseil va m'éviter pas mal d'errance :) Je cherche à classer et à numéroter des blocs qui vont délimiter des cadres pour imprimer une mosaïque sur plusieurs feuillets. Les blocs ne sont pas forcément créer dans le bon ordre et pas forcément bien alignés. Il va donc faloir que je les classe par rangées puis l'ordre dans ces rangées. J'ai encore pas mal de boulot sur les fonctions de trie. Mais la précision de devrai pas être un problème Pour que ma routine soit exploitable sur des ZWcad et autres clones, j'aurai préférer le faire un pur autolisp. du coup je vais peut être abandonner l'idée de passer par des fichiers temporaire pour stoker mes résultats. On abandonner l'idée du tout autolisp ... surtout si je trouve des fonctions pour faciliter le trie en autolisp vl-sort à l'air fait pour ça Mais merci encore de répondre en ce début de Week end quelques trucs sur autocad
(gile) Posté(e) le 13 juin 2015 Posté(e) le 13 juin 2015 Salut, ZWCAD supporte la plupart des fonctions Visual LISP, d'ailleurs, je ne considère les fonctions vl-* plutôt comme des extensions d'AutoLISP que comme du Visual LISP (je préfère réserver ce qualificatif aux fonctions faisant appel à COM, ActiveX ou aux réacteurs). AutoCAD MAC, par contre, supporte les fonction vl-* mais pas les fonctions vla-*, vlax-* ou vlr-*. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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