Aller au contenu

Export de point en CSV


willy95

Messages recommandés

Bonjour les amis,

Je suis a la recherche d'un petit lisp assez simple pour avoir a choisir dans autocad , par selection des points sous forme de "bloc point " TCPOINT et d'exporter les XY et Z (de l'etiquette ALT) dans un fichier au format CSV (Matricule,X,Y,Z). J'ai bien essayer de composé ce code mais je ne suis pas au niveau et donc je vous sollicite pour me filer un coup de main.

Ne soyez pas trop brutale dans vos remarques sur mon pseudo code si dessous qui ne fonctionne pas car j'ai vraiment du mal :

(defun c:CSV ( / fn in lst ss )
    (if
        (and
            (setq ss (ssget '((0 . "POINT"))))
            (setq fn (getfiled "Creation du fichier" "" "csv" 1))
        )

    (while
       (< n len_1)
       (setq xyz1 (nth n lst_r))
       (setq t1 (strcat (rtos (car xyz1))"  "(rtos (cadr xyz1))"    "(rtos (caddr xyz1))))
       (write-line t1 f1)
     (setq n (+ n 1))
   )



    )
    (princ)
)

En vous remerciant par avance.

Lien vers le commentaire
Partager sur d’autres sites

Coucou,

Est-ce moi ou bien il manque une partie du code ? Tu utilises des variables non déclarées...
Essaye quelque chose comme chat (non testé) :

(defun c:CSV (/ *error* jsel i name filename file mat pt)
  (defun *error* (msg)
    (if file (close file))
    (princ msg)
  )
  (if
    (and 
      (setq jsel (ssget '((0 . "INSERT") (2 . "TCPOINT") (66 . 1))))
      (setq filename (getfiled "Création du fichier CSV" "" "csv" 1))
      (setq file (open filename "W"))
      (write-line "Handle;Matricule;X;Y;Z")
    )
    (repeat (setq i (sslength jsel))
      (setq
        name (ssname jsel (setq i (1- i)))
        pt (cdr (assoc 10 (entget name)))
        mat (getpropertyvalue name "MAT")
      )
      (write-line
        (strcat
          (cdr (assoc 5 (entget name)))
          ";"
          mat
          ";"
          (rtos (car pt) 2 2)
          ";"
          (rtos (cadr pt) 2 2)
          ";"
          (rtos (caddr pt) 2 2)
        )
        file
      )
    )
  )
  (if file (close file))
  (princ)
)

Bisous,
Luna

Modifié par Luna
Modification du code : (handent name)
Lien vers le commentaire
Partager sur d’autres sites

Bonjour, 

Tout d'abord un grand Merci Luna pour ta piste de code qui m'aide à aller sur la bonne voie, en revanche je n'obtient qu'un fichier vide et un message d'erreur (type d'argument incorrect: stringp <Nom d'entité: 1f48fb16930>) et j'avoue que j'essaie de modifier à gauche et à droite les lignes de codes sans résultat, je me tape la tête contre les murs.  

Si quelqu'un peu me comprendre et m'aider à compléter ou corrigé ce code pour qu'il fonctionne.

Merci par avance.

Lien vers le commentaire
Partager sur d’autres sites

Salut,

il y a 11 minutes, willy95 a dit :

un message d'erreur (type d'argument incorrect: stringp <Nom d'entité: 1f48fb16930>)

Ce message veut dire que l'expression attends une chaine (stringp) mais reçoit un nom d'entité ou ename  (<Nom d'entité: 1f48fb16930>).

Pour trouver d'où vient une erreur, je rappelle l'utilisation des fonction "Arrêt sur erreur" et "Source de la dernière interruption" du menu "Débogage" de l'éditeur Visual LISP.

Voit ce screencast.

 

 

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

Lien vers le commentaire
Partager sur d’autres sites

Coucou,

En effet je ne devait pas être bien réveillée à ce moment, désolée...
Du coup j'ai remplacé la ligne

(handent name)

par

(cdr (assoc 5 (entget name)))

Je ne sais pas pourquoi j'avais utilisé la fonction (handent), j'avais probablement déjà réfléchis à la fonction inverse qui nécessite de sélectionner un objet basé sur son handle... Normalement tu ne devrais plus avoir de soucis 😉
J'ai modifié mon code au-dessus !

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

Hihi,

Bon j'avoue il m'est déjà arrivé de me lever à 4h pour tester une ligne de code puis de retourner me coucher une fois avoir trouvé une solution...
Mais bon...c'est mieux chat que de ne pas dormir à cause d'un problème non résolu...!

M'en vais faire une mini-sieste pour récupérer quelques minutes de sommeil ! 🙂

Bisous,
Luna

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

il y a 6 minutes, Luna a dit :

Hihi,

Bon j'avoue il m'est déjà arrivé de me lever à 4h pour tester une ligne de code puis de retourner me coucher une fois avoir trouvé une solution...

Ah ! On les reconnait les passionné(e)s !

animateur de la communauté Autodesk francophone

▶️ suivez la communauté sur Twitter et Facebook
📒  laissez un message sur notre Livre d'Or

 

Lien vers le commentaire
Partager sur d’autres sites

Merci beaucoup, cela fonctionne après la modification donnée par Luna et un petit rajout pour récupérer la valeur de l'étiquette "ALT" (car mon point est en 2D avec 0 pour valeur Z) :

          (setq alt (getpropertyvalue name "ALT"))

Je reste un passionné aussi mais qui n'a pas toutes les connaissances requises, je réfléchis énormément, je passe beaucoup de temps à modifier pour y arrivé mais le résultat est tellement plaisant que toute votre aide me fait du bien, alors MERCI beaucoup. 

Encore Merci...c'est top

Lien vers le commentaire
Partager sur d’autres sites

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é