Parcourir les fichiers

Résolu
sakalala Messages postés 19 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 25 janvier 2008 - 28 déc. 2007 à 22:07
sakalala Messages postés 19 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 25 janvier 2008 - 3 janv. 2008 à 09:35
Bonjour,
je veux parcourir les fichiers contenus dans un repertoire. Mon problème est que mon script parcourt les fichiers dans l'ordre alphabetique. Comment faire pour definir un ordre c'est à dire je veux parcourir en premier toto.log puis bernard.log ....

 Dim f1,cpt,oFSO


 Set oFSO = CreateObject("Scripting.FileSystemObject")
 If oFSO.FolderExists(pathLogs) Then
  For each f1 in  oFSO.GetFolder(pathLogs).Files
   ListeDesLogs(cpt)=oFl.Name
   
   cpt=cpt+1
  Next
 End If

Ex des fichiers :
alain.log
bernard.log
toto.log
titi.log

8 réponses

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
2 janv. 2008 à 20:07
 Bonsoir à tous,

Bonsoir Sakalala,

En reprenant ton script (bonjour la convention de notation hongroise),
la liste des fichiers sera triée par date (xxxx20071231.*.log)

Set oFSOAnalyse = CreateObject("Scripting.FileSystemObject")
If oFSOAnalyse.FolderExists(pathLogs) Then
   For each oFl in  oFSOAnalyse.GetFolder(pathLogs).Files
       If IsNumeric(right(left(oFl.Name,instr(oFl.Name,".")-1),8)) and _
          LCase(oFSOAnalyse.GetExtensionName(oFl.Name)) = "log" Then

          Set objFileItem = oFSOAnalyse.GetFile(oFl.Path)

          imax = imax + 1
          ReDim Preserve Tableau(2, imax)
          Tableau(1, imax) = oFl.Name
          Tableau(2, imax) = right(left(oFl.Name,instr(oFl.Name,".")-1),8)  
    End if
   Next

  End If
Set oFSOAnalyse = Nothing
Set objFileItem = Nothing

Do
   Valeur = 0
   For i = 1 To imax - 1
       If Tableau(2, i) < Tableau(2, i + 1) Then
          For z = 1 To 2
              Cible = Tableau(z, i)
              Tableau(z, i) = Tableau(z, i + 1)
              Tableau(z, i + 1) = Cible
          Next
          Valeur = 1
       End If
  Next
Loop While Valeur = 1

For i = 1 To imax
    liste = liste & vbCrLf & i &vbtab& Tableau(1, i)
Next

msgbox liste

Par contre, dans ta demande tu 29/12, tu dis:
<< le
principe de mon script est d'aller chercher les fichiers selon l'heure
que tu saisis >>

Y aurait-il 2 conditions de selection ?
xxxx20071231.*.log et DateLastModified (jj/mm/aaaa hh:mn)


jean-marc
3
Kristof_Koder Messages postés 918 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 27 octobre 2008 10
28 déc. 2007 à 23:18
Si tu défini un ordre tel que celui que tu proposes (qui me semble totalement arbitraire !), cela veux dire que tu connais déjà la liste des fichiers du répertoire ... alors pourquoi veux-tu parcourir ce répertoire par code ?
Y a un truc qui m'échappe !!
0
sakalala Messages postés 19 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 25 janvier 2008
29 déc. 2007 à 08:47
ce bout de code est un extract d'un code plus volumineux.
le principe de mon script est d'aller chercher les fichiers selon l'heure que tu saisis, les mettre dans un repertoire pour rechercher dans ces fichiers certains mot clé. c'est pour célà l'ordre est primordial car le resultat qu'on trouve dans le premier fichier peut-être utilisé comme paramètre lors du parcours du deuxième fichier. Je connais la liste des fichiers mais je ne vois pas comment le parcourir autrement que par code. su tu as des propositions, je suis preneur.
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
30 déc. 2007 à 19:28
 Bonsoir,

Si tu connais le nom de tes fichiers, tu peux passer par un tableau.

Dim fichier(5), i, MonTableauDeFichiers
fichier(0) = "c:`\monfichier2.log"
fichier(1) = "c:`\monfichier4.log"
fichier(2) = "c:`\monfichier1.log"
fichier(3) = "c:`\monfichier3.log"
fichier(4) = "c:`\monfichier5.log"

MonTableauDeFichiers = Array(fichier(0),fichier(1),fichier(2), _
                             fichier(3),fichier(4))

For i = 0 To UBound(MonTableauDeFichiers)
    Call LectureFichier(MonTableauDeFichiers(i))
Next

Function LectureFichier(UnFichier)
MsgBox UnFichier
End Function

jean-marc
0

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

Posez votre question
sakalala Messages postés 19 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 25 janvier 2008
31 déc. 2007 à 14:20
bonjour Jean marc,

j'ai l'impression que tu es le seul dans ce site à maitriser VBS
Ce que je voulais dire par connaitre les noms des fichiers, je connais le début du nom des fichiers car la fin change par exemple toto20071231.aze34568.log. je ne connais que toto20071231 la partie en gras change. j'avais pensé au tableau mais je ne voyais pas comment prendre en compte que le début du nom de fichier comme dans Unix toto* il parcours tous les fichiers qui commence par toto (j'ai plusieurs fichiers commençant par les mêmes caractères : toto, toto1, toto2,toto3, titi, titi1,titi2, etc ...)
merci d'avance

alain

je te souhaite des bonnes fêtes de fin d'année
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
31 déc. 2007 à 21:42
 Bonsoir Sakalala,

Que l'approche ci-dessous puisse t'aider !

Dim objFso, objFile, strFile
Set objFso = CreateObject("Scripting.FileSystemObject")

For Each objFile In objFso.GetFolder("c:\test").Files
    If IsNumeric(right(left(objFile.Name,instr(objFile.Name,".")-1),8)) _
       And LCase(objFso.GetExtensionName(objFile.Path)) = "log" Then
      
       strFile = left(objFile.Name,instr(objFile.Name,".")-1)
      
       MsgBox objFile.Name &vbCr& strFile &vbCr&_
              left(strFile, len(strFile)-8) &vbCr&_
              right(left(objFile.Name,instr(objFile.Name,".")-1),8),,"verif"
    End if
Next

jean-marc
0
sakalala Messages postés 19 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 25 janvier 2008
1 janv. 2008 à 11:41
bonjour,
merci pour cet essai, mais mon problème est beaucoup plus simple. Voici le code qui parcours et analyse les fichiers dans l'ordre alphabetique, peux-tu le modifier pour qu'il parcours selon l'ordre qu'on souhaite lui donner en tenant compte des exemples de fichiers ci-haut ou tu peux fabriquer tes propores fichiers pour tester:

  1. Dim path , indiceTableau
  2.  path = WScript.ScriptFullName
  3.  Dim arg
  4.  arg = Split(path, "")
  5.  path=""

  6.  For tmp= 0 To (UBound(arg)-1)
  7.  path=path+arg(tmp)+""
  8.  Next

 'Tableau listant les noms des logs à parcourir
  9.  Dim ListeDesLogs(30)
10.  pathLogs = path+"log"
11.  wscript.echo "Path des logs importés : "+pathLogs
 
12.  Dim oFl,cptDossier,oFSOAnalyse,i , f
13.  Set oFSOAnalyse = CreateObject("Scripting.FileSystemObject")
14.  If oFSOAnalyse.FolderExists(pathLogs) Then
15.     For each oFl in  oFSOAnalyse.GetFolder(pathLogs).Files
16.         ListeDesLogs(cptDossier)=oFl.Name
 
17.         wscript.echo "fic : "+oFl.Name
18.         cptDossier=cptDossier+1
19.       Next

20.  End If
 
21.  For each indiceTableau in ListeDesLogs
22.     if(indiceTableau<>"") then


23.        log =  pathLogs &""& indiceTableau
24.        Wscript.echo "Fichier analysé : "+log
25.     end if
26.   next
  
Cdt,
0
sakalala Messages postés 19 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 25 janvier 2008
3 janv. 2008 à 09:35
Bonjour JM

Ce que j'ai mis en ligne c'est juste la partie d'analyse, il y a une partie de récupération en amont qui tient compte des paramètres saisis.

Merci bcp, je valide la réponse

Alain
 
0
Rejoignez-nous