snarkpit29
Messages postés28Date d'inscriptionmercredi 15 décembre 2004StatutMembreDernière intervention20 juin 2006
-
21 janv. 2005 à 10:12
mrdep1978
Messages postés402Date d'inscriptionjeudi 25 novembre 2004StatutMembreDerniè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.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 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
mrdep1978
Messages postés402Date d'inscriptionjeudi 25 novembre 2004StatutMembreDernière intervention 7 juin 20097 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
cs_vil
Messages postés2Date d'inscriptionlundi 18 novembre 2002StatutMembreDernière intervention21 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.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
mrdep1978
Messages postés402Date d'inscriptionjeudi 25 novembre 2004StatutMembreDernière intervention 7 juin 20097 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