Recherche par vbs

Résolu
cs_barada
Messages postés
54
Date d'inscription
vendredi 26 mars 2004
Statut
Membre
Dernière intervention
13 août 2015
- 27 déc. 2006 à 14:34
cs_barada
Messages postés
54
Date d'inscription
vendredi 26 mars 2004
Statut
Membre
Dernière intervention
13 août 2015
- 28 déc. 2006 à 13:31
Bonjour Le forum

Tout aide serait la bienvenue, j' ai besoin de faire une rechercehe simple avec un liste de nom dans un fichier txt. Le script serait de type vb script et recupererait à partir de la liste les noms et me les soit supprimeraient où les déplaceraient dans un autre répertoire.
Merci à tous ceux qui pourraient me venir en aide

barada

12 réponses

cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
28 déc. 2006 à 12:42
 Bonjour

mon fichier "test_fichiers.txt" contient les lignes suivantes:
MARC001
MARC002
MARC003

dans le répertoire Path, j'ai créé 2 fichiers (MARC001.txt et MARC003.txt)

Après exec du code, les 2 fichiers ont été déplacés dans RepSauv.

Option Explicit
Dim Fso, Fichier, Path, RepSauv
Set Fso = CreateObject("Scripting.FileSystemObject")



Fichier = "test_fichiers.txt"
Path  = "D:\Mes_scripts_VBFrance"
RepSauv = "D:\Mes_scripts_VBFrance\test"



If Fso.FileExists(Path & Fichier) Then
'-----------------------------------------------------------
'Lecture et mise en variable du contenu du fichier en entrée
'-----------------------------------------------------------
   Const ForReading = 1
   Dim objTextStream, i
   Set objTextStream = Fso.OpenTextFile(Path & Fichier, ForReading)



   Dim Fic()
   ReDim Fic(0)



   Do While Not ObjTextStream.AtEndOfStream
      ReDim Preserve Fic(UBound(Fic) + 1)
      Fic(UBound(Fic)) = ObjTextStream.ReadLine
   Loop
   objTextStream.Close
   Set objTextStream = Nothing
End If



For i=1 To UBound(Fic)
    If fso.FileExists(Path & Fic(i) & ".txt") Then
       If fso.FileExists(RepSauv & Fic(i) & ".txt") Then Fso.DeleteFile(RepSauv & Fic(i) & ".txt")
       fso.MoveFile Path & Fic(i) & ".txt", RepSauv & Fic(i) & ".txt"
    End If
Next



Set Fso  = Nothing





Je regarde pour traiter un fichier contenant:
MARC001;MARC002;
MARC003;MARC004;MARC005;MARC007;
MARC006;MARC012;

jean-marc
3
cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
28 déc. 2006 à 13:08
 Re,

mon fichier "test_fichiers.txt" contient les lignes suivantes:
MARC001;MARC002;MARC003;
MARC004;MARC005;MARC007;MARC009;MARC010;MARC011;
MARC006;MARC008;MARC0013;

dans le répertoire Path, j'ai créé 2 fichiers (MARC006.txt et MARC009.txt)

A l'exécution du code ci-dessous, j'affiche bien un msgbox pour les 2 fichiers.

If Fso.FileExists(Path & Fichier) Then
'-----------------------------------------------------------
'Lecture et mise en variable du contenu du fichier en entrée
'-----------------------------------------------------------
   Const ForReading = 1
   Dim objTextStream, Contenu, strtmp, i
   Set objTextStream = Fso.OpenTextFile(Path & Fichier, ForReading)
   Do While Not ObjTextStream.AtEndOfStream
      strtmp = split(ObjTextStream.ReadLine, ";")
 
      If IsArray(strtmp) = False Then
         Else
         For i = 0 to Ubound(strtmp)
             'MsgBox strtmp(i),,"élément de mon tableau"
             If Fso.FileExists(Path & strtmp(i) & ".txt") Then
             MsgBox Path & strtmp(i) & ".txt",,"le fichier existe !"
             End If
      Next
      End If
   Loop
   objTextStream.Close
   Set objTextStream = Nothing
End If
Set Fso  = Nothing

jean-marc
3
cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
27 déc. 2006 à 15:01
 Bonjour,

Exemple pour lire ligne par ligne un .txt

Dim Fso, Fichier
Set Fso = CreateObject("Scripting.FileSystemObject")
Fichier  = "d:\test.txt"



If Fso.FileExists(Fichier) Then
'-----------------------------------------------------------
'Lecture et mise en variable du contenu du fichier en entrée
'-----------------------------------------------------------
   Const ForReading = 1
   Dim objTextStream, Contenu, strtmp, i
   Set objTextStream = Fso.OpenTextFile(Fichier, ForReading)
   Do While Not ObjTextStream.AtEndOfStream
      strtmp = split(ObjTextStream.ReadLine, vbLf)
      For i = 0 to Ubound(strtmp)
          Contenu = Contenu &vbCrLf& strtmp(i)
          MsgBox Contenu
      Next
   Loop
   objTextStream.Close
   Set objTextStream = Nothing
End If
Set Fso  = Nothing





jean-marc
0
cs_barada
Messages postés
54
Date d'inscription
vendredi 26 mars 2004
Statut
Membre
Dernière intervention
13 août 2015

27 déc. 2006 à 15:13
Bonjour Jean-Marc

Merci pour ta réponse, mais dans ton code il ne  fait pas  la recherche du nom qu' il a lu et pour le deplacer vers un autre répertoire

barada
0

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

Posez votre question
cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
27 déc. 2006 à 15:19
 re,

Dim Fso, Fichier, Path, FicSauv
Set Fso = CreateObject("Scripting.FileSystemObject")
Fichier  = "d:\test.txt"
Path = "D:\TEST"




If Fso.FileExists(Fichier) Then
'-----------------------------------------------------------
'Lecture et mise en variable du contenu du fichier en entrée
'-----------------------------------------------------------
   Const ForReading = 1
   Dim objTextStream, Contenu, strtmp, i
   Set objTextStream = Fso.OpenTextFile(Fichier, ForReading)
   Do While Not ObjTextStream.AtEndOfStream
      strtmp = split(ObjTextStream.ReadLine, vbLf)
      For i = 0 to Ubound(strtmp)
          If Fso.FileExists(Path & strtmp(i)) Then
             MsgBox strtmp(i)
       ''''''''      Fso.CopyFile strtmp(i), FicSauv
          End If
      Next
   Loop
   objTextStream.Close
   Set objTextStream = Nothing
End If
Set Fso  = Nothing

jean-marc
0
cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
27 déc. 2006 à 15:25
 re

Oups....

RepSauv = "d:\sauvegarde"

fso.MoveFile Path & strtmp(i), RepSauv & strtmp(i)
ou
fso.DeleteFile Path & strtmp(i)

jean-marc
0
cs_barada
Messages postés
54
Date d'inscription
vendredi 26 mars 2004
Statut
Membre
Dernière intervention
13 août 2015

27 déc. 2006 à 15:40
Rebonjour Jean-Marc

Je prépare un fichier txt et testerai ton script et te donnerai un réponse, d' avance te remercie 

Barada
 
0
cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
27 déc. 2006 à 17:37
 Re,

Autre exemple, avec ReDim:

Option Explicit
Dim Fso, Fichier, Path, RepSauv
Set Fso = CreateObject("Scripting.FileSystemObject")



Fichier = "test_fichiers.txt"
'
' Fichier contient 2 lignes:
'mon_fichier2.txt
'mon_fichier5.txt
'
Path  = "D:\Mes_scripts_VBFrance"
RepSauv = "D:\Mes_scripts_VBFrance\test"



If Fso.FileExists(Path & Fichier) Then
'-----------------------------------------------------------
'Lecture et mise en variable du contenu du fichier en entrée
'-----------------------------------------------------------
   Const ForReading = 1
   Dim objTextStream, i
   Set objTextStream = Fso.OpenTextFile(Path & Fichier, ForReading)



   Dim Fic()
   ReDim Fic(0)



   Do While Not ObjTextStream.AtEndOfStream
      ReDim Preserve Fic(UBound(Fic) + 1)
      Fic(UBound(Fic)) = ObjTextStream.ReadLine
   Loop
   objTextStream.Close
   Set objTextStream = Nothing
End If



For i=1 To UBound(Fic)
    If fso.FileExists(Path & Fic(i)) Then
       If fso.FileExists(RepSauv & Fic(i)) Then Fso.DeleteFile(RepSauv & Fic(i))
       fso.MoveFile Path & Fic(i), RepSauv & Fic(i)
       MsgBox RepSauv & Fic(i)
    End If
Next



Set Fso  = Nothing





jean-marc
0
cs_barada
Messages postés
54
Date d'inscription
vendredi 26 mars 2004
Statut
Membre
Dernière intervention
13 août 2015

27 déc. 2006 à 18:12
Bonsoir Jean Marc

Lors du test j' ai une erreur ligne 33 avec UBound
de type icompatible

barada
0
cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
27 déc. 2006 à 18:49
 Re,

J'ai testé les 2 propositions, pas de problème, même avec un fichier vide.
Que contient le fichier en entrée ??? Y a-t-il des lignes vides (ici, je ne le vérifie pas) ???

pour la 1ère proposition, on peut rajouter un test ... si strtmp est un tableau.

      strtmp = split(ObjTextStream.ReadLine, vbLf)
  
      If IsArray(strtmp) = False Then
         Else
         For i = 0 to Ubound(strtmp)
             MsgBox strtmp(i),,"élément de mon tableau"
             If Fso.FileExists(Path & strtmp(i)) Then
             MsgBox strtmp(i),,"le fichier existe !"
             End If
      Next
      End If

jean-marc
0
cs_barada
Messages postés
54
Date d'inscription
vendredi 26 mars 2004
Statut
Membre
Dernière intervention
13 août 2015

28 déc. 2006 à 10:59
Bonjour Jean-marc

Le fichier est de type tableau rempli de la maniere suivante
MARC001
MARC002
Où on peut le remplir comme ceci MARC001; MARC002 .....etc

Cdt
0
cs_barada
Messages postés
54
Date d'inscription
vendredi 26 mars 2004
Statut
Membre
Dernière intervention
13 août 2015

28 déc. 2006 à 13:31
rebonjour Jean-marc

j' ai teste l' avant dernière version et ça fonctionne impeccable et te remercie pour ton travail.

Barada
0