viande Posté(e) le 18 septembre 2014 Posté(e) le 18 septembre 2014 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
Olivier Eckmann Posté(e) le 22 septembre 2014 Posté(e) le 22 septembre 2014 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 dossierLa 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 1
viande Posté(e) le 29 septembre 2014 Auteur Posté(e) le 29 septembre 2014 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?
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