Recherche dans un répértoire

Signaler
Messages postés
28
Date d'inscription
mercredi 15 décembre 2004
Statut
Membre
Dernière intervention
20 juin 2006
-
Messages postés
402
Date d'inscription
jeudi 25 novembre 2004
Statut
Membre
Dernière intervention
7 juin 2009
-
J'ai un répértoire ou il y a deux fichier un fichier .dat et un fichier
.ok, mon programme visual basic a pour but de chercher dans le
répértoire les fichiers .dat et quand il trouve le fichier .ok
correspondant au fichier .dat il imprime.

Mais je ne voi pas comment il faut faire pour rechercher dans un
répértoire que les fichiers possédent une extension .dat et aussi
comment faire pour que des que le programme a trouvé un fichier .dat il
cherche son équivalent en .ok.

Merci

6 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
131
Utilise la fonction Dir pour lister les fichiers de ton répertoire.
Elle te renvoie le nom du fichier avec son extension, il ne te reste
plus qu'à tester les 3 derniers caractères (pour récupèrer l'extension
donc), et s'il s'agit d'un dat, le stocker dans un tableau, et
continuer la recherche.



Une fois tout les fichiers .dat et .ok listés, tu n'as plus qu'à
parcourir ton tableau pour savoir si 2 fichiers portant le même nom y
figure, et si c'est le cas, lancer l'impression du .dat correspondant.

DarK Sidious

Administrateur et reponsable VB/API du site www.ProgOtoP.com
Messages postés
402
Date d'inscription
jeudi 25 novembre 2004
Statut
Membre
Dernière intervention
7 juin 2009
6
Le code en dessous fonctionne, mais il nécessite d'ajouter dans les références du projet la librairie "Microsoft Scripting Runtime" (scrrun.dll). C'est dans cette libraire qu'on trouve la classe "FileSystemObject".
J'ai été obligé d'utiliser cet objet pour la raison suivante :
La fonction "Dir" permet de rechercher les fichiers correspondant à un motif donné quand on l'appelle avec un paramètre et renvoie le nom court du 1e fichier correspondant si il existe, et "" si il n'existe pas. Ex : Dir("c:\*.dat") renvoie "fichier1.dat". Quand "Dir" est appelé sans paramètre par la suite, la fonction renvoie le nom du fichier correspondant suivant. exempe "fichier2.dat".
Dans ma fonction GetOKFile, je ne peux donc pas faire dir("fichier1.ok") sous peine de perdre mon parcours de fichier *.dat.
La classe "FileSystemObject" est la seule alternative que je connaisse ...

Option Explicit


Public Sub gsub_Parcours()
Dim ls_FileDat As String
Dim ls_FileOk As String
Dim ls_Path As String
'Définit le chemin dans lequel chercher les .dat et les .ok
ls_Path = "C:\DataFiles"
'Cherche le 1e fichier .dat se trouvant dans le répertoire
ls_FileDat = Dir(ls_Path & "*.dat")
While ls_FileDat <> Empty 'Tant que il y a un fichier .dat non traité
'Cherche le fichier .ok correspondant au fichier .dat
ls_FileOk = GetOKFile(ls_Path & ls_FileDat)
If ls_FileOk <> Empty Then
'Le fichier .ok existe => traitement à effectuer
Debug.Print ls_FileOk
End If
'Cherche le fichier .dat suivant
ls_FileDat = Dir
Wend
End Sub


Private Function GetOKFile(a_FileDat As String) As String
'a_filedat : Fichier .dat pour lequel on cherche un .ok correspondant
Dim ls_FileNameOK As String
Dim FS As New FileSystemObject
'Définit le nom du fichier .ok
ls_FileNameOK = Left(a_FileDat, Len(a_FileDat) - 4) & ".ok"
'Si le fichier .ok existe, on renvoie son nom.
'Sinon renvoie ""
If FS.FileExists(ls_FileNameOK) Then
GetOKFile = ls_FileNameOK
End If
Set FS=nothing


End Function
Messages postés
2
Date d'inscription
lundi 18 novembre 2002
Statut
Membre
Dernière intervention
21 janvier 2005

En VB, il faut utiliser la fonction DIR. Cette fonction prend en paramètre le répertoire ainsi que le masque de recherche. Par exemple:
MonFichier = DIR("C:\MonRepertoire\*.dat")
Ensuite, MonFichier contient uniquement le nom du fichier avec l'extension DAT
Mais le plus simple est de regarder le code.

Dim MonFichierDat As String
Dim MonFichierOK As String
Dim IDFichier As Long


On Error Resume Next


' On recherche tous les fichiers portant l'extension DAT
MonFichierDat = Dir("C:\DatOK\*.dat")
Do While MonFichierDat <> ""
' On construit ici le nom du fichier OK
MonFichierOK = "C:\DatOK" & Left(MonFichierDat, Len(MonFichierDat) - 3) & "ok"
' On prend un ID de fichier libre
IDFichier = FreeFile
' On cherche à ouvrir le fichier OK en lecture
Open MonFichierOK For Input As #IDFichier
' Si err=0, c'est que le fichier existe
If Err = 0 Then
' Donc on peut traiter le fichier ici
Close #IDFichier
End If
' On reinitialise la valeur de ERR
Err = 0
' On continue la recherche des fichiers DAT
MonFichierDat = Dir
Loop

Je crois que l'on ne peut pas imbriquer plusieurs fonction DIR. En tout cas, je ne sais pas le faire.

Voila, c'est tout.
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
131
Rien ne t'empêche d'utiliser le FSO, ou si tu veux te limiter aux
fonctions standards de VB (ca fait toujours une librairie de moins à
installer), rien ne t'empêche de lancer 2 recherches : l'une pour les
.dat et l'autre pour les .ok. Ca te donne 2 tableaux : l'un pour les
dat, lo'autre pour les ok et tu ne plus qu'à comparer les 2 tableaux...

DarK Sidious

Administrateur et reponsable VB/API du site www.ProgOtoP.com
Messages postés
28
Date d'inscription
mercredi 15 décembre 2004
Statut
Membre
Dernière intervention
20 juin 2006

Merci pour vos réponses, mrdep1978 il y a un bug dans ton programme quand tu renvoi le nom du fichier ok il ya a aussi le nom du répértoire.
Messages postés
402
Date d'inscription
jeudi 25 novembre 2004
Statut
Membre
Dernière intervention
7 juin 2009
6
Oh lui !!! Un bug !! Je savais pas, moi, que tu voulais juste le nom du fichier


Private Function GetOKFile(a_FileDat As String) As String
'a_filedat : Fichier .dat pour lequel on cherche un .ok correspondant
Dim ls_FileNameOK As String
Dim FS As New FileSystemObject
'Définit le nom du fichier .ok
ls_FileNameOK = Left(a_FileDat, Len(a_FileDat) - 4) & ".ok"
'Si le fichier .ok existe, on renvoie son nom.
'Sinon renvoie ""
If FS.FileExists(ls_FileNameOK) Then
GetOKFile = FS.GetFileName(ls_FileNameOK)
End If
Set FS=nothing


End Function

Et hop, c'est modifié !!!