Aller au contenu

Générer Hyperliens (suite)


viande

Messages recommandés

Salut tout le monde, je créé un autre sujet en rapport avec le précédent.

Le lisp utilisé (HYPTXT de Olivier Eckmann) fonctionne bien, mais je cherche un moyen un peu différent pour créer les hyperliens:

 

Le lisp HYPTXT récupère le texte d'un entité autocad pour créer l'hyperlien en fonction du contenu (même si le fichier lié n'existe pas).

Est-il possible qu'un lisp récupère le texte d'une entité autocad et recherche le fichier du même nom dans un dossier (et même pourquoi pas des sous-dossier)? auquel cas le lien serait créé si le fichier est trouvé.

 

Je ne sais pas du tout si ce genre de chose est faisable, via un lisp ou autre..

 

D'avance merci pour celles et ceux qui se poseront également la question ^^

 

Bonne journée! :)

 

Fred

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

(defun GetFolders (path / folders)
 (if (member "." (setq folders (vl-directory-files path nil -1)))
   (cddr folders)
   folders
 )
)

(defun GetFiles (path pat / )
 (vl-directory-files path pat 1) ;pat = "*.pdf"
)

(defun CreateListePdf (path / lsFiles sFileName lsFolders sFolderName)
 (setq *lsPdfFiles* nil)
 (setq *lsPdfPath* nil)
 ; traite les fichiers du dossier racine
 (if (setq lsFiles (GetFiles path "*.pdf"))
   (foreach sFileName lsFiles
     (setq *lsPdfFiles* (append *lsPdfFiles* (list (strcase sFileName))))
     (setq *lsPdfPath* (append *lsPdfPath* (list path)))
   )
 )
 ; Boucle sur les sous dossiers
 (if (setq lsFolders (GetFolders path))
   (foreach sFolderName lsFolders
     (setq path2 (strcat path "\\" sFolderName)) 
     (if (setq lsFiles (GetFiles path2 "*.pdf"))
       (foreach sFileName lsFiles
         (setq *lsPdfFiles* (append *lsPdfFiles* (list (strcase sFileName))))
         (setq *lsPdfPath* (append *lsPdfPath* (list path2)))
       )
     )
   )
 )
 (princ (strcat "\n" (itoa (length *lsPdfFiles*)) " fichiers PDF trouvés"))
 (princ)
)    
 

 

 

La fonction GetFiles permet de récupérer la liste des fichiers contenu dans un dossier

La fonction GetFolders permet de récupérer la liste des sous dossiers d'un dossier donné.

La fonction CreateListePdf utilise les 2 fonctions précédentes pour rechercher tous les PDF contenus dans un dossier et ses sous-dossiers et créer 2 variables globales :

*lsPdfFiles* qui contient la liste des PDF dans laquelle il faudra rechercher si ton texte existe

*lsPdfPath* qui contient la liste des dossiers correspondant aux fichiers de la liste précédente.

 

Tu peux essayer de voir du côté d'une fonction récursive pour balayer tout un dossier et ses sous-dossiers sur un niveau d'imbrication "infini".

 

Olivier

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

Salut!

 

Super pour la fonction Getfolders et Getfiles ! Quand je lis le lisp, je comprends que c'est exactement ce qui est demandé (merci ^^). Par contre j'ai du mal à le mettre en oeuvre..

En le chargeant tel quel (oui c'est pas une bonne idée) rien ne se passe, normal.

En le modifiant un peu (mais à tâtons car pas trop habitué avec la programmation), comme par exemple:

 

(defun GetFolders (path / x:/plan_masse/reseaux/)

(if (member "." (setq folders (vl-directory-files path nil -1)))

(cddr folders)

folders

)

)

 

rien ne se passe non plus (je n'arrive même pas à lancer la commande, il ne trouve rien)

Déjà pour lancer le lisp, j'ai essayé avec HYPERLIENS (nom du lisp) ou les autres fonctions, pas + de succès..

J'ai bien trouvé d'autre lisps qui utilisent les fonctions (getfolders et files), mais même en m'aidant des syntaxes je n'avance pas d'un poil .. :mellow:

Pour le bouclage, normalement si les sous-dossiers sont parcourus, je n'ai pas besoin d'y avoir recours, si?

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é