EXTRAIRE LE RÉPERTOIRE D'UN FICHIER, SON EXTENSION, SON NOM, SANS FSO MAIS PAR U

thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 - 7 avril 2004 à 09:58
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007 - 8 avril 2004 à 06:54
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/21737-extraire-le-repertoire-d-un-fichier-son-extension-son-nom-sans-fso-mais-par-un-algo

cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
8 avril 2004 à 06:54
Pour la première routine, ne connaissant pas certaines instructions à ce moment, j'ai fait avec les moyens du bord ;) ET je découpe la chaine à chaque itération afin de trouver ou étai le "".

Pour la 2eme, InStrRev car il faut trouver le dernier "" dans la chaine pour extraire le nom du fichier, et ensuite Split car je veux séparer les morceaux de chaines séparés par des "." pour extraire l'extension, c'est la méthode qu'a proposé magic (les 2 méthodes en fait). Et comme je veux l'extension, c'est le dernier élément du tableau virtuel créé, sa permet de prendre en compte les fichiers ayant plusieurs extensions (ex : fichier.numero2.doc) et ainsi de prendre en comptes les extensions <> de 3 caractères (html, x, phtml ...)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
7 avril 2004 à 22:37
Juste une remarque sur la première routine....

Je n'aime pas trop ta boucle While, mais j'aim encore moins que tu découpe a chaque iteration ta chaine.... c'est pas franchement économique, tout ca ;)
un Mid$ serait peut être plus adapté ?

En ce qui concerne la deuxieme routine, pourquoi utiliser tantot Split, tantot Instrrev ?
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
7 avril 2004 à 16:06
Merci pour la précision, j'ai mis à jour le code ;)
cs_jp50 Messages postés 45 Date d'inscription samedi 14 avril 2001 Statut Membre Dernière intervention 3 janvier 2008
7 avril 2004 à 15:42
Je viens d'apprendre la méthode InStrRev. Mais j'ai trouvé un problème pour l'extension. Tu suppose que l'extension est de trois lettres. Je travaille en direct 3D et plusieurs de mes fichiers sont en *.x alors ta fonction me donne "e.x" au lieu de juste x.

Tu pourrais faire quelque chose comme

Dim myPath As String
myPath = "c:\tests\waza.x"
myExtension = Split(myPath, ".")
MsgBox "Extension : " & myExtension(UBound(myExtension))

En passant j'ai mis la dernière occurence de myExtension car j'ai quelquefois des fichier du genre "Maison.arbre.x"

Jp50
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
7 avril 2004 à 12:44
J'ai mis à jour le code, j'ai rajouté un 2eme exemple, n'utilisant pas de boucle. Il pourrai remplacer les fonctions FSO, car la 2eme méthode fait les memes actions.
thierrydelepine, interkira a raison, c'est bien ce que je disai aussi, les FSO nécessitent bien des fichiers supplémentaires par rapport à VB.
Vous avez vu que j'ai utilisé une boucle pour mon premier exemple, je ne connaissai pas InStrRev (mais déja vu sans savoir l'utilité), j'ai comme vous pouvez le voir fait avec les moyens du bord, cad ce que je connai. Connaitriez vous un site qui traite des fonctions de base telles que celle-ci ou encore des mots clés de VB de bases ? (style on, and, if etc etc) Je pense etre loin de tous les connaitre, d'ou cette demande ... ;)
interkira Messages postés 8 Date d'inscription vendredi 10 janvier 2003 Statut Membre Dernière intervention 31 octobre 2006
7 avril 2004 à 11:46
Le FSO n'est pas du VB mais du VBS !! Mettre du VBS dans du Vb c'est comme mettre du gasoil dans une moto ! Dire qu'il ne faut pas de DLLs supplémentaires ?!! Faut IE 5 non ? donc....j'ai netscape j'ai enlevé IE et et... Ca fonctionne pas comme c'est dommage.

Sinon ton code est pas mal azerty25, mais essais de supprimer le Do while c'est une boucle inutile, il y a des fonctions pour rechercher la position de caractére (ou chaine) comme InstrRev.

I = InStrRev(UCase(pchemin), "")
Left(pchemin, I)

Sinon il y a des dlls qui sont faite pour ça et qui font mieux que le FSO et en bcp plus rapide et intégré au systéme Windows faut les trouver. ;o)

@+
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
7 avril 2004 à 11:28
Merci pour vos infos, c'est vrai qu'il y a beaucoup de méthodes :-/
thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
7 avril 2004 à 11:15
on peut aussi faire :

Dim MyListChemin() As String

Fichier = "c:\windows\explorer.exe"

MyListChemin = Split(Fichier, "", -1, vbTextCompare)
For i = 0 To UBound(MyListChemin)
MsgBox MyListChemin(i)
Next

et la on recupere - "c:"
- "windows"
- "explorer.exe"

il y a tellement de methodes......
yomm Messages postés 515 Date d'inscription dimanche 17 février 2002 Statut Membre Dernière intervention 10 mars 2008 3
7 avril 2004 à 11:13
Je suis pour la façon de magic et je venais d'ailleurs la poster...mais comme c'est déjà fait ;-)
cs_magic Messages postés 11 Date d'inscription mardi 9 avril 2002 Statut Membre Dernière intervention 4 juin 2008
7 avril 2004 à 11:06
Ta boucle recherche la derniére occurrence du séparateur "".
Il y a maintenant une fonction qui fait cela dans VB6:

n = inStrRev(myPath, "")

Ce qui permet d'extraire ce qui t'es utile:

myFile = mid(myPath, n+1)
myFolder = left(myPath, n-1)
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
7 avril 2004 à 10:39
C'est bien vrai, j'avai pas fait attention. Sa fera au moins un exemple de petit algo aux débutants ;)
thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
7 avril 2004 à 10:21
il existe plein de facon pour arriver au meme resultat, uitlise donc celle que tu veux suivant tes besoins.

pour info: cette methode ne necessite aucune DLL supplementaire si tu fais un package de diffusion de ton appli car "Scripting.FileSystemObject" utilise le scripting de microsoft intégré a IE depuis la version 5.0, il suffit donc que IE 5.0 mini soit installé sur le poste client pour que mon code marche, pas de DLL supplementaire.
cs_azerty25 Messages postés 1114 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 6 mai 2007
7 avril 2004 à 10:12
C'est bien vrai, je ne connaissai pas, merci pour cette infos, mais je préfère ma source puisque je n'ai pas besoin de DLL supplémentaires ;)
thierrydelepine Messages postés 521 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 septembre 2008 6
7 avril 2004 à 09:58
Tu as ca aussi, beaucoup mieux puisque plus d'infos encore.
ce n'est pas debile comme tu dis on peux en avoir besoin dans des traitenements, cela a deja ete mon cas.

dans le code ci dessous tu peux recuperer le repertoire, le repertoire parent, l'extension, le nom du fichier sans extension.

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile("c:\windows\explorer.exe")
msgbox "Absolute path: " & objFSO.GetAbsolutePathName(objFile)
msgbox "Parent folder: " & objFSO.GetParentFolderName(objFile)
msgbox "File name: " & objFSO.GetFileName(objFile)
msgbox "Base name: " & objFSO.GetBaseName(objFile)
msgbox "Extension name: " & objFSO.GetExtensionName(objFile)
Set objFile = nothing
Set objFSO = nothing

lol
Rejoignez-nous