Recherche dans un répértoire

snarkpit29 Messages postés 28 Date d'inscription mercredi 15 décembre 2004 Statut Membre Dernière intervention 20 juin 2006 - 21 janv. 2005 à 10:12
mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 - 21 janv. 2005 à 12:26
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

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
21 janv. 2005 à 10:54
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
0
mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 7
21 janv. 2005 à 11:16
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
0
cs_vil Messages postés 2 Date d'inscription lundi 18 novembre 2002 Statut Membre Dernière intervention 21 janvier 2005
21 janv. 2005 à 11:21
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.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
21 janv. 2005 à 11:42
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
snarkpit29 Messages postés 28 Date d'inscription mercredi 15 décembre 2004 Statut Membre Dernière intervention 20 juin 2006
21 janv. 2005 à 11:53
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.
0
mrdep1978 Messages postés 402 Date d'inscription jeudi 25 novembre 2004 Statut Membre Dernière intervention 7 juin 2009 7
21 janv. 2005 à 12:26
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é !!!
0
Rejoignez-nous