DenisHen Posté(e) le 3 février 2023 Posté(e) le 3 février 2023 Bonjour à la communauté. Aujourd'hui, je cherche à contrôler si un fichier existe, avant de l'ouvrir. Mon fichier dessin est : D:\Plans Maisons\Maison_S00N01G2C4_001.dwg Je cherche donc à vérifier si ce même fichier, avec une autre extension, existe : D:\Plans Maisons\Maison_S00N01G2C4_001.Niv. N'ayant rien trouvé sur le web (mal cherché probablement), je me suis rabattu sur l'aide en ligne d'AutoCAD et j'ai écris ça : (defun c:IfFileExist () (princ "\nTest sur l'existance d'un fichier.") (setq DWGCourant (vla-get-activedocument (vlax-get-acad-object)) NomComp (vla-get-FullName DWGCourant) NomDwg (vl-filename-base NomComp) RepDwg (vl-filename-directory NomComp) ExtDwg (vl-filename-extension NomComp) ) ;_ Fin de setq (princ (strcat "\nNomComp : " NomComp)) (princ (strcat "\nNomDwg : " NomDwg)) (princ (strcat "\nRepDwg : " RepDwg)) (princ (strcat "\nExtDwg : " ExtDwg)) (princ "\n*******") (setq NouvExt (strcat RepDwg "\\" NomDwg ".Niv")) (princ (strcat "\nNouvExt : " NouvExt)) (if (/= (findfile NouvExt) "") (princ "\nFichier trouvé") (princ "\nFichier pas trouvé") ) (princ) ) Je me bat avec ce Lisp depuis des heures qui me dit systématiquement que le fichier (.Niv) existe, que ce soit vrai ou non... Voici une copie de ma fenêtre Texte : Test sur l'existance d'un fichier. NomComp : D:\Plans Maisons\Maison_S00N01G2C4_001.dwg NomDwg : Maison_S00N01G2C4_001 RepDwg : D:\Plans Maisons ExtDwg : .dwg ******* NouvExt : D:\Plans Maisons\Maison_S00N01G2C4_001.Niv Fichier trouvé Commande: Si quelqu'un pouvait a une astuce, un conseil... je suis preneur. Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 3 février 2023 Auteur Posté(e) le 3 février 2023 Désolé la communauté. C'est le FindFile que j'avais mal écris. Voici le bon code, s'il peut servir à quelqu'un : ;;; ************************************* (defun c:IfFileExist () (princ "\nTest sur l'existance d'un fichier.") (setq DWGCourant (vla-get-activedocument (vlax-get-acad-object)) NomComp (vla-get-FullName DWGCourant) NomDwg (vl-filename-base NomComp) RepDwg (vl-filename-directory NomComp) ExtDwg (vl-filename-extension NomComp) ) ;_ Fin de setq (princ (strcat "\nNomComp : " NomComp)) (princ (strcat "\nNomDwg : " NomDwg)) (princ (strcat "\nRepDwg : " RepDwg)) (princ (strcat "\nExtDwg : " ExtDwg)) (princ "\n*******") (setq NouvExt (strcat RepDwg "\\" NomDwg ".Niv")) (princ (strcat "\nNouvExt : " NouvExt)) (if (/= (findfile NouvExt) nil) (princ "\nFichier trouvé") (princ "\nFichier pas trouvé") ) (princ) ) Encore toutes mes excuses de t'avoir dérangé. Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Luna Posté(e) le 4 février 2023 Posté(e) le 4 février 2023 Coucou @DenisHen, Juste à titre d'information purement logique, plutôt que d'écrire (if (/= [...] nil) ... ; If not nil, then ... ; If nil, then ) On va simplement écrire (if [...] ... ; If not nil, then ... ; If nil, then ) parce que le premier argument du (if), correspondant à la condition, permet de tester si une expression est VRAI ou FAUX, ce qui en langage LISP se traduit par T ou NIL. Donc dans ton cas de figure (if (/= (findfile NouvExt) nil) (princ "\nFichier trouvé") (princ "\nFichier pas trouvé") ) devient (if (findfile NouvExt) (princ "\nFichier trouvé") (princ "\nFichier pas trouvé") ) ce qui, aussi bien à l'écriture qu'à la lecture, simplifie un peu la vie et t'épargne quelques redondances et lapalissades de programmation 😜 PS: Je me permet de faire la remarque car ce n'est pas la première fois que je vois tes conditions de (if) écrient ainsi... Après peut-être est-ce volontaire pour simplifier ta compréhension personnelle lors de la relecture ^^ Bisous, Luna
DenisHen Posté(e) le 4 février 2023 Auteur Posté(e) le 4 février 2023 Coucou @Luna. Merci à toi pour cette remarque très judicieuse. Effectivement, je me suis compliqué la vie, le code et certainement une relecture ultérieure moins efficace... C'est curieux, je ne fais jamais cette "erreur" en VBA et toujours en Lisp 🤔. Ton observation coule de source et est la bienvenue. J'ai partagé ce code sans tenir compte que d'autres pourraient avoir un peu de mal à le comprendre. Donc, pour les plus néophytes que moi, il doit il y en avoir un ou deux, voici le code plus simple à comprendre : ;;; ************************************* (defun c:IfFileExist ( / DWGCourant NomComp NomDwg RepDwg ExtDwg NouvExt) (princ "\nTest sur l'existance d'un fichier.") (setq DWGCourant (vla-get-activedocument (vlax-get-acad-object)) NomComp (vla-get-FullName DWGCourant) NomDwg (vl-filename-base NomComp) RepDwg (vl-filename-directory NomComp) ExtDwg (vl-filename-extension NomComp) ) ;_ Fin de setq (princ (strcat "\nNomComp : " NomComp)) (princ (strcat "\nNomDwg : " NomDwg)) (princ (strcat "\nRepDwg : " RepDwg)) (princ (strcat "\nExtDwg : " ExtDwg)) (princ "\n*******") (setq NouvExt (strcat RepDwg "\\" NomDwg ".Niv")) (princ (strcat "\nNouvExt : " NouvExt)) (if (findfile NouvExt) (princ "\nFichier trouvé") (princ "\nFichier pas trouvé") ) (princ) ) ;;; ************************************* Et ne pas oublier de déclarer les variables... Encore merci à toi Luna. Bisous. Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
didier Posté(e) le 4 février 2023 Posté(e) le 4 février 2023 Bonjour. Je ne suis pas convaincu de l'utilité de définir une fonction (avec "c:" qui plus est) Nativement (findile) renvoie nil si le fichier n'est pas trouvé, donc tester le chemin dans le programme principal me semble suffisant. À moins qu'il s'agisse d'autre chose, et que je ne l'ai pas appréhendé. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
DenisHen Posté(e) le 4 février 2023 Auteur Posté(e) le 4 février 2023 Bonjour @didier. Je suis entièrement d'accord avec toi. J'ai fais ce petit code indépendant et temporaire pour comprendre les fonctions vl-filename. Je ne comptais pas l'utiliser plus tard. Et je l'ai partagé pour que d'autres membres puissent faire, eux aussi, leurs petits tests d'apprentissage. Bien à toi l'ami 😉. Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Luna Posté(e) le 5 février 2023 Posté(e) le 5 février 2023 Il n'y a pas de soucis, on est tous débutants, quelque soit nos compétences 😉 Et chacun réfléchis à sa manière donc ce qui peut être logique pour certains peut ne pas l'être pour d'autres. Après en effet comme le dit @didier, la fonction native (findfile) permet déjà de vérifier l'existence d'un fichier. Attention cependant car d'après l'aide il est normal que la fonction (findfile) te renvoie le fichier ".niv" comme existant : The findfile function makes no assumption about the file type or extension of filename. If filename does not specify a drive/directory prefix, findfile searches the AutoCAD library path. If a drive/directory prefix is supplied, findfile looks only in that directory. Bref, quand tu as un doute, toujours vérifier l'aide AutoCAD c'est déjà une vraie mine d'or. Bisous, Luna
DenisHen Posté(e) le 13 février 2023 Auteur Posté(e) le 13 février 2023 Salut @Luna et merci pour ton aide. Je regarde toujours (maintenant) dans l'aide en ligne et ailleurs sur la toile, mais c'est parfois difficile de trouver la bonne réponse. Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
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