EXTRAIRE LE RÉPERTOIRE D'UN FICHIER, SON EXTENSION, SON NOM, SANS FSO MAIS PAR U
thierrydelepine
Messages postés521Date d'inscriptionmardi 24 décembre 2002StatutMembreDernière intervention11 septembre 2008
-
7 avril 2004 à 09:58
cs_azerty25
Messages postés1114Date d'inscriptionjeudi 19 décembre 2002StatutMembreDerniè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.
cs_azerty25
Messages postés1114Date d'inscriptionjeudi 19 décembre 2002StatutMembreDerniè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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és1114Date d'inscriptionjeudi 19 décembre 2002StatutMembreDerniè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és45Date d'inscriptionsamedi 14 avril 2001StatutMembreDerniè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és1114Date d'inscriptionjeudi 19 décembre 2002StatutMembreDerniè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és8Date d'inscriptionvendredi 10 janvier 2003StatutMembreDernière intervention31 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és1114Date d'inscriptionjeudi 19 décembre 2002StatutMembreDerniè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és521Date d'inscriptionmardi 24 décembre 2002StatutMembreDernière intervention11 septembre 20086 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és515Date d'inscriptiondimanche 17 février 2002StatutMembreDernière intervention10 mars 20083 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és11Date d'inscriptionmardi 9 avril 2002StatutMembreDerniè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:
cs_azerty25
Messages postés1114Date d'inscriptionjeudi 19 décembre 2002StatutMembreDerniè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és521Date d'inscriptionmardi 24 décembre 2002StatutMembreDernière intervention11 septembre 20086 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és1114Date d'inscriptionjeudi 19 décembre 2002StatutMembreDerniè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és521Date d'inscriptionmardi 24 décembre 2002StatutMembreDernière intervention11 septembre 20086 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.
8 avril 2004 à 06:54
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 ...)
7 avril 2004 à 22:37
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 ?
7 avril 2004 à 16:06
7 avril 2004 à 15:42
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
7 avril 2004 à 12:44
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 ... ;)
7 avril 2004 à 11:46
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)
@+
7 avril 2004 à 11:28
7 avril 2004 à 11:15
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......
7 avril 2004 à 11:13
7 avril 2004 à 11:06
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)
7 avril 2004 à 10:39
7 avril 2004 à 10:21
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.
7 avril 2004 à 10:12
7 avril 2004 à 09:58
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