[VBS] Correction d'un script

Résolu/Fermé
Utilisateur anonyme - 29 mai 2007 à 18:40
 Utilisateur anonyme - 30 mai 2007 à 19:25
Bonsoir à tous,

j'ai besoin de votre soutient pour établir un script VBS. Je souhaite que le programme recherche dans les fichiers appartenant à un dossier une chaine de caractères demandées à l'utilisateur.
J'ai déjà fait un début mais le programme lit les fichiers lignes par lignes ; la chaine de caractères doit correspondre à une ligne entière or moi je veux qu'elle puisse êtreque dans une partie.
j'espère avoir été un minimum explicite :)

Voici déjà mon code :

dim dossier,recherche
dossier=inputbox("Dans quel dossier chercher ?","Sélection du dossier")
recherche=inputbox("Quelle recherche à effectuer ?","Sélection de la recherche")

Dim arrFileLines()
Dim stRep
Dim oFSO,oFl
Set oFSO = CreateObject("Scripting.FileSystemObject")
stRep = "C:\DNC30\DNC30BER\" & dossier
If oFSO.FolderExists(stRep) Then
For each oFl in oFSO.GetFolder(stRep).Files

i = 0
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(oFl, 1)
Do Until objFile.AtEndOfStream
Redim Preserve arrFileLines(i)
arrFileLines(i) = objFile.ReadLine
i = i + 1
Loop
objFile.Close
For l = Lbound(arrFileLines) to UBound(arrFileLines)
if instr(recherche,arrFileLines(l)) then msgbox oFl
Next

Next
End If

Merci de votre aide.
A voir également:

7 réponses

Utilisateur anonyme
29 mai 2007 à 20:52
Bonjour,

cette ligne :

if instr(recherche,arrFileLines(l)) then msgbox oFl

devrait s'écrire :

if instr(1,arrFileLines(l),recherche,1) then msgbox oFl


Lupin
0
Utilisateur anonyme
30 mai 2007 à 16:26
Merci beaucoup à toi.
Encore un petit truc: tu a du remarquer qu'à la fin le nom des fichiers dans lesquels apparait la chaine de caractères s'affiche dans une boite de message... . Mais mle problème est que si la chaine est trouvées dans 10 fichiers (par exemple) j'aurai 10 boites de messages avec le même résultat.
Est-ce qu'il y a moyen de n'en mettre qu'une seule s'il te plait ??
0
Utilisateur anonyme
30 mai 2007 à 16:48
Bonjour,

Je me suis permis de modifier légèrement votre script :

  Dim Dossier, Recherche, Reponse
  Dim arrFileLines(), stRep, oFSO, oFl, objFSO, objFile
  Dim i,l

  Dossier = Inputbox("Dans quel dossier chercher ?","Sélection du dossier") 
  Recherche = Inputbox("Quelle recherche à effectuer ?","Sélection de la recherche") 
  Reponse = ""

  If ( Dossier <> "") Then
    If ( Recherche <> "" ) Then
      Set oFSO = CreateObject("Scripting.FileSystemObject") 
      stRep = Dossier 
      If oFSO.FolderExists(stRep) Then 
        For each oFl in oFSO.GetFolder(stRep).Files 
          i = 0 
         Set objFSO = CreateObject("Scripting.FileSystemObject") 
         Set objFile = objFSO.OpenTextFile(oFl, 1) 
         Do Until objFile.AtEndOfStream 
           Redim Preserve arrFileLines(i) 
           arrFileLines(i) = objFile.ReadLine 
           i = i + 1 
          Loop 
          objFile.Close 
          For l = Lbound(arrFileLines) to UBound(arrFileLines) 
            if instr(1,arrFileLines(l),Recherche,1) then
              Reponse = Reponse & VbCrLf & oFl.Name
            End If
          Next 
        Next 
      End If 
    End If
  End If

  Set oFSO = Nothing
  Set objFile = Nothing
  Set objFSO = Nothing

  WScript.Echo Reponse

WScript.Quit(0)
'
0
Utilisateur anonyme
30 mai 2007 à 17:39
Merci bien une fois de plus. Reste encore un détail (après je t'embête plus :) ): si la chaine se trouve plusieurs fois dans le même fichier, alors j'ai plusieurs fois le nom de ce fichier dans la boite de message finale. Comment faire pour ne l'afficher qu'une seule fois s'il te plait ?
0

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

Posez votre question
Utilisateur anonyme
30 mai 2007 à 17:53
re:

suggestion :

'---------------------------------------------------------------------------------------------------
'
  Dim Dossier, Recherche, Reponse, Drapeau
  Dim arrFileLines(), stRep, oFSO, oFl, objFSO, objFile
  Dim i,l

  Dossier = Inputbox("Dans quel dossier chercher ?","Sélection du dossier")
  Recherche = Inputbox("Quelle recherche à effectuer ?","Sélection de la recherche")
  Reponse = ""

  If ( Dossier <> "") Then
    If ( Recherche <> "" ) Then
      Set oFSO = CreateObject("Scripting.FileSystemObject")
      stRep = Dossier
      If oFSO.FolderExists(stRep) Then
        For each oFl in oFSO.GetFolder(stRep).Files
          i = 0
         Set objFSO = CreateObject("Scripting.FileSystemObject")
         Set objFile = objFSO.OpenTextFile(oFl, 1)
         Do Until objFile.AtEndOfStream
           Redim Preserve arrFileLines(i)
           arrFileLines(i) = objFile.ReadLine
           i = i + 1
          Loop
          objFile.Close
         Drapeau = False
          For l = Lbound(arrFileLines) to UBound(arrFileLines)
            if instr(1,arrFileLines(l),Recherche,1) then
              Drapeau = True
            End If
          Next
          If (Drapeau) Then
              Reponse = Reponse & VbCrLf & oFl.Name
             Drapeau = False
          End If
        Next
      End If
    End If
  End If

  Set oFSO = Nothing
  Set objFile = Nothing
  Set objFSO = Nothing

  WScript.Echo Reponse

WScript.Quit(0)
'

Lupin
0
Utilisateur anonyme
30 mai 2007 à 18:19
Impeccable merci mille fois.
Exactement ce que je recherchais.

Bonne soirée.
0
Utilisateur anonyme
30 mai 2007 à 19:25
Bienvenue

Lupin
0