[VBS] Correction d'un script

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
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.

7 réponses

  1. Utilisateur anonyme
     
    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
  2. Utilisateur anonyme
     
    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
  3. Utilisateur anonyme
     
    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
  4. Utilisateur anonyme
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    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
  7. Utilisateur anonyme
     
    Impeccable merci mille fois.
    Exactement ce que je recherchais.

    Bonne soirée.
    0