Aller au contenu

Liste de fichier


LUDWIG

Messages recommandés

Bonjour

 

Je cherche à lister dans un fichier les LISP d'un répertoire (pour ensuite les charger automatiquement un par un dans autocad).

 

J'ai utilisé la commande shell et la fonction dir : impeccable

 shell
dir M:\Modele\*.lsp /b /s /x /n /l
m:\modele\outils_intégration_bdp\fonctions\numérotation locaux\numérotation.lsp
m:\modele\outils_intégration_bdp\fonctions\polygone_surface\intégration.lsp
m:\modele\outils_intégration_bdp\fonctions\polygone_surface\intégration_chu.lsp

 

Mais oh ! problème, si je demande d'écrire dans un fichier, les caractères accentués sont modifiés.

 shell
dir M:\Modele\*.lsp /b /s /x /n /l >c:\A.txt
m:\modele\outils_int‚gration_bdp\fonctions\num‚rotation locaux\num‚rotation.lsp
m:\modele\outils_int‚gration_bdp\fonctions\polygone_surface\int‚gration.lsp
m:\modele\outils_int‚gration_bdp\fonctions\polygone_surface\int‚gration_chu.lsp

 

Je ne peux pas me permettre de passer par un programme externe qui me modifierai le fichier texte, ni d'oter les accents. Du coup, je me demande si la fonction dir est la bonne solution.

 

Je me demande si la fonction vl-directory-files pourrait m'aider. Mais elle ne permet pas d'explorer les sous répertoires (je crois). A moins d'en faire une routine qui lit l'arboresence des dossiers puis va lire le contenu de chaque dossier.

 

Si quelqu'un a une solution à me proposer, je le remercie par avance...

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Avec l'aide précieuse de Tony :)

 

[color=red]
;;
;;Auteur de BrowseForFolder
;;Tony Tanzillo
;;
[/color]
(defun BrowseForFolder ( Message / sh folder parentfolder folderobject result) 
(vl-load-com) 
 (setq sh 
  (vla-getInterfaceObject 
    (vlax-get-acad-object) 
      "Shell.Application" 
    ) 
  ) 
  (setq folder 
     (vlax-invoke-method 
         sh 
         'BrowseForFolder 
         0 
         "Message" 
         0 
      ) 
  ) 
  (vlax-release-object sh) 
   (if folder 
     (progn 
        (setq parentfolder 
          (vlax-get-property folder 'ParentFolder) 
        ) 
       (setq FolderObject 
          (vlax-invoke-method 
             ParentFolder 
              'ParseName 
             (vlax-get-property Folder 'Title) 
          ) 
       ) 
      (setq result 
         (vlax-get-property FolderObject 'Path) 
      ) 
      (mapcar 'vlax-release-object 
        (list folder parentfolder folderobject) 
      ) 
    (if (/= (substr result (strlen result)) "\\")
      (setq result (strcat result "\\"))
      result
    )
  ) 
) 
)
[color=blue]
;;
;;Merci Tony!
;;
[/color]
(defun c:lsp? ( / DirPath lst_appli)
(setq DirPath (BrowseForFolder "Sélectionner le dossier"))
(setq lst_appli (vl-directory-files DirPath "*.lsp" 1))
(if lst_appli
	(foreach n lst_appli (load (strcat DirPath n)))
)
(prin1)
)

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

Lien vers le commentaire
Partager sur d’autres sites

Merci

 

Mais cela ne permet pas de charger les lisp qui se trouve dans un sous-répertoire, ce que je souhaiterais faire.

 

Il faudrait que cette routine charge les lisps qu'elles trouvent ET qu'elle se relance elle-même sur les sous répertoire qu'elle trouve (serait-ce ça la récursivité ?).

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

As tu essaye la bibliotheque de fonctions lisp nommée DOSLIB 6.

 

Tu verras les possibilités offertes par ces fonctions.

 

Je voulais éviter de faire appel à une fonction externe, mais ce sera peut-être plus simple en fait... alors je regarde ça.

 

Merci

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Ca m'intéresse effectivement.

 

1 - je charge l'arx de doslib

2 - je créé une liste de mes fichiers (setq 2bcharged (dos_find "chemin\\*.lsp"))

3 - je fais un appload de chacun de éléments de ma liste

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Personnellement j'utilise un fichier BATch de conversion pour les problèmes d'accent.

 

Je pense qu'il pourrait être adapté à ton développement.

 

Peux-tu m'envoyer le fichier contenant la liste de tes fichiers pour tester. Si ça t'intéresse. (Mail en pied de mon message... ;)

 

J'avais un sujet sur CADxp en rapport avec les SCRIPTs qui utilisait déjà cette bidouille.

 

Christian

 

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

Oui je me souviens de ton batch qui convertissait les accents. C'était pour des scripts. Je t'"envois la liste lundi (week-end oblige).

 

Sinon, avec le dos_find de doslib, je suis arrivé à mes fins (hormis bug sur le chargement de certéains arx et dvb...). Mais je serais quand même intéressé par ta méthode.

 

Merci a+

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Patrick_35, je n'ai pas su exploiter le lisp du sujet que tu indiques (honte sur moi...). Il me dit "commande inconnue : S"; je n'ai pourtant pas de commande "S" dans le lisp ?

 

François - X13 : merci pour ces abondantes sources. je me suis servi de get-files-subdirs et get-subdirs

 

Je posterais mon code quand j'aurais régler mes autres problèmes

Autocad 2021 - Revit 2022 - Windows 10

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é