OVH Cloud OVH Cloud

for each file in collect file sélectif

23 réponses
Avatar
---DGI972---
Bonjour messieurs,

Il me manque une routine en vbs:

C:\TOTO\TATA\AA\
C:\TOTO\TATA\BB\
C:\TOTO\TATA\CC\
Dans le sous répertoire AA
j'ai des fichiers AAxx.001,AAxx.002,AAxx.003 et AAxx.dat
Dans le sous répertoire BB
j'ai des fichiers BBxx.001,BBxx.002,BBxx.003 et BBxx.dat
etc..
je voudrais lire uniquement les *.dat dans tous les sous répertoire de
TOTO du genre:

Set fso = CreateObject("Scripting.fileSystemObject")
Set fsofolder = fso.GetFolder("c:\TOTO\")
Set collec_file = fsofolder.files
for each fic_file in collec_file
DO
lire chaque ligne de chaque fichier dat
end

merci d'avance pour un début de code trouvé sous le coude.

10 réponses

1 2 3
Avatar
jbongran
---DGI972--- wrote:
Bonjour messieurs,

Il me manque une routine en vbs:

C:TOTOTATAAA
C:TOTOTATABB
C:TOTOTATACC
Dans le sous répertoire AA
j'ai des fichiers AAxx.001,AAxx.002,AAxx.003 et AAxx.dat
Dans le sous répertoire BB
j'ai des fichiers BBxx.001,BBxx.002,BBxx.003 et BBxx.dat
etc..
je voudrais lire uniquement les *.dat dans tous les sous répertoire de
TOTO du genre:

Set fso = CreateObject("Scripting.fileSystemObject")
Set fsofolder = fso.GetFolder("c:TOTO")
Set collec_file = fsofolder.files
for each fic_file in collec_file
DO
lire chaque ligne de chaque fichier dat
end

merci d'avance pour un début de code trouvé sous le coude.


for each fic_file in collec_file
If Right(fic_file.Name, 3) = "dat" Then
Do

Ou alors executer dans un shell la commande dir o:n /b /s C:TOTO*.dat >
fichier.lst
Puis lire ce fichier qui contient la liste de tous les fichiers .dat des
sous repertoires ligne à ligne

Avatar
---DGI972---
---DGI972--- wrote:
Bonjour messieurs,

Il me manque une routine en vbs:

C:TOTOTATAAA
C:TOTOTATABB
C:TOTOTATACC
Dans le sous répertoire AA
j'ai des fichiers AAxx.001,AAxx.002,AAxx.003 et AAxx.dat
Dans le sous répertoire BB
j'ai des fichiers BBxx.001,BBxx.002,BBxx.003 et BBxx.dat
etc..
je voudrais lire uniquement les *.dat dans tous les sous répertoire de
TOTO du genre:

Set fso = CreateObject("Scripting.fileSystemObject")
Set fsofolder = fso.GetFolder("c:TOTO")
Set collec_file = fsofolder.files
for each fic_file in collec_file
DO
lire chaque ligne de chaque fichier dat
end

merci d'avance pour un début de code trouvé sous le coude.


for each fic_file in collec_file
If Right(fic_file.Name, 3) = "dat" Then
Do

Ou alors executer dans un shell la commande dir o:n /b /s C:TOTO*.dat >
fichier.lst
Puis lire ce fichier qui contient la liste de tous les fichiers .dat des sous
repertoires ligne à ligne


Super, merci
Je peux vous demander une petite alternative ?
Si je pose une question avant du genre quel type de fichier voulez vous
traiter: les AA BB ou CC ?
commment traiter que les AAxx.dat ?
Merci


Avatar
Georges
Bonjour,
Si vous faites

v_type=inputBox("Donnez le type de fichier à traiter (AA, BB ou CC)
....
for each fic_file in collec_file
If Right(fic_file.Name, 3) = "dat" and left(fic_file.Name, 2)=v_typeThen
Do
...

Cordialement
Georges



"---DGI972---" <gilles.dermigny@*NO SPAM* laposte.net> a écrit dans le
message de news:
---DGI972--- wrote:
Bonjour messieurs,

Il me manque une routine en vbs:

C:TOTOTATAAA
C:TOTOTATABB
C:TOTOTATACC
Dans le sous répertoire AA
j'ai des fichiers AAxx.001,AAxx.002,AAxx.003 et AAxx.dat
Dans le sous répertoire BB
j'ai des fichiers BBxx.001,BBxx.002,BBxx.003 et BBxx.dat
etc..
je voudrais lire uniquement les *.dat dans tous les sous répertoire de
TOTO du genre:

Set fso = CreateObject("Scripting.fileSystemObject")
Set fsofolder = fso.GetFolder("c:TOTO")
Set collec_file = fsofolder.files
for each fic_file in collec_file
DO
lire chaque ligne de chaque fichier dat
end

merci d'avance pour un début de code trouvé sous le coude.


for each fic_file in collec_file
If Right(fic_file.Name, 3) = "dat" Then
Do

Ou alors executer dans un shell la commande dir o:n /b /s C:TOTO*.dat >
fichier.lst
Puis lire ce fichier qui contient la liste de tous les fichiers .dat des
sous repertoires ligne à ligne


Super, merci
Je peux vous demander une petite alternative ?
Si je pose une question avant du genre quel type de fichier voulez vous
traiter: les AA BB ou CC ?
commment traiter que les AAxx.dat ?
Merci






Avatar
---DGI972---
Le 22/02/2006, Georges a supposé :
Bonjour,
Si vous faites

v_type=inputBox("Donnez le type de fichier à traiter (AA, BB ou CC)
....
for each fic_file in collec_file
If Right(fic_file.Name, 3) = "dat" and left(fic_file.Name, 2)=v_typeThen
Do
...

Cordialement
Georges



"---DGI972---" <gilles.dermigny@*NO SPAM* laposte.net> a écrit dans le
message de news:
---DGI972--- wrote:
Bonjour messieurs,

Il me manque une routine en vbs:

C:TOTOTATAAA
C:TOTOTATABB
C:TOTOTATACC
Dans le sous répertoire AA
j'ai des fichiers AAxx.001,AAxx.002,AAxx.003 et AAxx.dat
Dans le sous répertoire BB
j'ai des fichiers BBxx.001,BBxx.002,BBxx.003 et BBxx.dat
etc..
je voudrais lire uniquement les *.dat dans tous les sous répertoire de
TOTO du genre:

Set fso = CreateObject("Scripting.fileSystemObject")
Set fsofolder = fso.GetFolder("c:TOTO")
Set collec_file = fsofolder.files
for each fic_file in collec_file
DO
lire chaque ligne de chaque fichier dat
end

merci d'avance pour un début de code trouvé sous le coude.


for each fic_file in collec_file
If Right(fic_file.Name, 3) = "dat" Then
Do

Ou alors executer dans un shell la commande dir o:n /b /s C:TOTO*.dat >
fichier.lst
Puis lire ce fichier qui contient la liste de tous les fichiers .dat des
sous repertoires ligne à ligne


Super, merci
Je peux vous demander une petite alternative ?
Si je pose une question avant du genre quel type de fichier voulez vous
traiter: les AA BB ou CC ?
commment traiter que les AAxx.dat ?
Merci


Super je rajoute cela à ma bibliothèque personnelle


Voici mon bout de code avec les routines demandées, mais je bute sur
une erreur Instruction attendue (voir à la fin).
Le but est d'extraire des zones dans des fichiers dat
C'est fichier ce trouve dans le répertoire C:DATAPACKAGE
et il y a 4 types de fichier dat à traiter indépendement:
TCH_AJxxx.dat
TCH_DIxxx.dat
TIP_DOxxx.dat
TIP_RIxxx.dat

Je pose la question quel traitement ?
Si c'est 1 c'est le ou les fichiers TCH_AJxxx.dat qu'il faut traiter
Je prépare les colonnes et mon fichier cvs
Je filtre les fichier avec l'extension dat et le f-type=TCH_AJ
J'extrait des zones selon l'identifiant du début de chaque lignes que
je recopie dans mon cvs.
Voici le code:

Option Explicit
Const ForReading = 1, ForWriting = 2
Dim fso, fsofolder, TRIB, collec_file, fic_file, f_type, vbCancel,
objShell, fileIn, fileOut, COLO, strIn, Sline,CE

Set fso = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")

TRIB=InputBox("Voulez vous lancer le traitement des ETATs ?"& vbCrLf
&"Tapez le Nom de l'état pour lequel vous voulez générer L'impression."
& vbCrLf & vbCrLf & "Taper :" & vbCrLf & vbCrLf & "1 pour les AJ " &
vbCrLf & "2 pour les DI " & vbCrLf & "3 pour DO " & vbCrLf & "4 pour
les RI"& vbCrLf,"EASY2XLS","1")
If vbCancel = 2 Then Wscript.quit
If TRIB= "" Then Wscript.quit
If TRIB <> 1 or 2 or 3 or 4 then Wscript.quit 'oh c'est pas jolie
If TRIB=1 Then f_type = "TCH_AJ" 'la aussi c'est pas jolie
If TRIB=2 Then f_type = "TCH_DI"
If TRIB=3 Then f_type = "TIP_DO"
If TRIB=4 Then f_type = "TIP_RI"

COLO="Code Enregistrement;Type de traitement;Nom du lot;Sequence
Lot;Numéro Image" 'Entête du fichier csv Non des colonnes excel
Set fileOut = fso.OpenTextFile("C:RECAP.CSV", ForWriting , True)
fileout.WriteLine COL 'Fabrication des colonnes

Set fsofolder = fso.GetFolder("C:DATAPACKAGE")
Set collec_file = fsofolder.Files
for each fic_file in collec_file
If Right(fic_file.Name, 3) = "dat" and left(fic_file.Name, 5)=
f_type Then
Do
Set fileIn = fso.OpenTextFile(fic_file, True)
Do While Not fileIn.AtEndOfStream
SLine = fileIn.ReadLine
CE=Mid(SLine,1,2) 'CE = Code enregistrement
If CE= "50" Then
strIn=Mid(SLine,1,2)'CE = 50 Cheque Code enregistrement
strIn=strIn & ";" & Mid(SLine,3,2)
strIn=strIn & ";" & Mid(SLine,5,2)
strIn=strIn & ";" & Mid(SLine,7,11)
fileOut.WriteLine strIn
ElseIf CE="60" Then
strIn=Mid(SLine,1,2)
strIn=strIn & ";" & Mid(SLine,3,2)
strIn=strIn & ";" & Mid(SLine,10,2)
strIn=strIn & ";" & Mid(SLine,20,11)
fileOut.WriteLine strIn
ElseIf CE="65" Then
strIn=Mid(SLine,1,2)'CE = 50 Cheque Code enregistrement
strIn=strIn & ";" & Mid(SLine,8,2)
strIn=strIn & ";" & Mid(SLine,8,2)
strIn=strIn & ";" & Mid(SLine,88,11)
fileOut.WriteLine strIn
Else
fileOut.Close
End If
Loop
End If ' <<<ERREUR Instruction attendue
Next

Set fileIn = Nothing
Set fileOut = Nothing

Si quelqu'un peut me donner un coup de pouce SVP ?




Avatar
Méta-MCI
Bonjour !

Petit détail : si un fichier s'appelle, par exemple, "AAxxdat" (sans
extension), il sera sélectionné. De même, avec "BBxx.1dat", "CC.predat",
etc.
Mais, bon, je suppose qu'il y a en place d'autres mécanismes, de contrôle
des noms de fichiers.

@-salutations

Michel Claveau
Avatar
Fred
Dans : news:


Hello Gilles,
Rapidement, quelques indications pour que tu puisses avancer :


Option Explicit
Const ForReading = 1, ForWriting = 2
Dim fso, fsofolder, TRIB, collec_file, fic_file, f_type, vbCancel,


C'est quoi ce vbCancel ? Attention, c'est une constante prédéfinie (pas
comme ForReading que tu as eu raison de déclarer)

objShell, fileIn, fileOut, COLO, strIn, Sline,CE

Set fso = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")

TRIB=InputBox("Voulez vous lancer le traitement des ETATs ?"& vbCrLf
&"Tapez le Nom de l'état pour lequel vous voulez générer
L'impression." & vbCrLf & vbCrLf & "Taper :" & vbCrLf & vbCrLf & "1
pour les AJ " & vbCrLf & "2 pour les DI " & vbCrLf & "3 pour DO " &
vbCrLf & "4 pour les RI"& vbCrLf,"EASY2XLS","1")
If vbCancel = 2 Then Wscript.quit


Qu'est-ce qui modifie vbCancel ? À priori, il sera toujours égal à sa
valeur par défaut 0.

If TRIB= "" Then Wscript.quit
If TRIB <> 1 or 2 or 3 or 4 then Wscript.quit 'oh c'est pas jolie


C'est pas joli et cela ne fonctionne pas ! :-)
Il faut écrire tous les tests : TRIB <> 1 Or TRIB <> 2 Or TRIB <> 3 etc
...
Sinon, 2, 3 et 4 seront compris comme des booléens et donc le résultat
global sera toujours vrai (ils sont non nuls)


If TRIB=1 Then f_type = "TCH_AJ" 'la aussi c'est pas jolie
If TRIB=2 Then f_type = "TCH_DI"
If TRIB=3 Then f_type = "TIP_DO"
If TRIB=4 Then f_type = "TIP_RI"


Regarde du côté de l'instruction Select Case pour améliorer ce bout de
code qui précède.

[Pas trop regardé tout ce bout de code]

Loop
End If ' <<<ERREUR Instruction attendue


En fait l'erreur est sur la ligne précédente :
Il faut écrire Loop While [condition] ou bien Loop Until [condition]

Si quelqu'un peut me donner un coup de pouce SVP ?


Oui, c'est juste un coup de pouce pour l'instant. Je repasserai plus
tard.

Bon courage.



--
Fred
http://www.cerbermail.com/?3kA6ftaCvT

Avatar
jbongran
---DGI972--- wrote:
Le 22/02/2006, Georges a supposé :
Bonjour,
Si vous faites

v_type=inputBox("Donnez le type de fichier à traiter (AA, BB ou CC)
....
for each fic_file in collec_file
If Right(fic_file.Name, 3) = "dat" and left(fic_file.Name,
2)=v_typeThen Do
...

Cordialement
Georges



"---DGI972---" <gilles.dermigny@*NO SPAM* laposte.net> a écrit dans
le message de news:
---DGI972--- wrote:
Bonjour messieurs,

Il me manque une routine en vbs:

C:TOTOTATAAA
C:TOTOTATABB
C:TOTOTATACC
Dans le sous répertoire AA
j'ai des fichiers AAxx.001,AAxx.002,AAxx.003 et AAxx.dat
Dans le sous répertoire BB
j'ai des fichiers BBxx.001,BBxx.002,BBxx.003 et BBxx.dat
etc..
je voudrais lire uniquement les *.dat dans tous les sous
répertoire de TOTO du genre:

Set fso = CreateObject("Scripting.fileSystemObject")
Set fsofolder = fso.GetFolder("c:TOTO")
Set collec_file = fsofolder.files
for each fic_file in collec_file
DO
lire chaque ligne de chaque fichier dat
end

merci d'avance pour un début de code trouvé sous le coude.


for each fic_file in collec_file
If Right(fic_file.Name, 3) = "dat" Then
Do

Ou alors executer dans un shell la commande dir o:n /b /s
C:TOTO*.dat > fichier.lst
Puis lire ce fichier qui contient la liste de tous les fichiers
.dat des sous repertoires ligne à ligne


Super, merci
Je peux vous demander une petite alternative ?
Si je pose une question avant du genre quel type de fichier voulez
vous traiter: les AA BB ou CC ?
commment traiter que les AAxx.dat ?
Merci


Super je rajoute cela à ma bibliothèque personnelle


Voici mon bout de code avec les routines demandées, mais je bute sur
une erreur Instruction attendue (voir à la fin).
Le but est d'extraire des zones dans des fichiers dat
C'est fichier ce trouve dans le répertoire C:DATAPACKAGE
et il y a 4 types de fichier dat à traiter indépendement:
TCH_AJxxx.dat
TCH_DIxxx.dat
TIP_DOxxx.dat
TIP_RIxxx.dat

Je pose la question quel traitement ?
Si c'est 1 c'est le ou les fichiers TCH_AJxxx.dat qu'il faut traiter
Je prépare les colonnes et mon fichier cvs
Je filtre les fichier avec l'extension dat et le f-type=TCH_AJ
J'extrait des zones selon l'identifiant du début de chaque lignes que
je recopie dans mon cvs.
Voici le code:

Option Explicit
Const ForReading = 1, ForWriting = 2
Dim fso, fsofolder, TRIB, collec_file, fic_file, f_type, vbCancel,
objShell, fileIn, fileOut, COLO, strIn, Sline,CE

Set fso = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")

TRIB=InputBox("Voulez vous lancer le traitement des ETATs ?"& vbCrLf
&"Tapez le Nom de l'état pour lequel vous voulez générer
L'impression." & vbCrLf & vbCrLf & "Taper :" & vbCrLf & vbCrLf & "1
pour les AJ " & vbCrLf & "2 pour les DI " & vbCrLf & "3 pour DO " &
vbCrLf & "4 pour les RI"& vbCrLf,"EASY2XLS","1")
If vbCancel = 2 Then Wscript.quit
If TRIB= "" Then Wscript.quit
If TRIB <> 1 or 2 or 3 or 4 then Wscript.quit 'oh c'est pas jolie
If TRIB=1 Then f_type = "TCH_AJ" 'la aussi c'est pas jolie
If TRIB=2 Then f_type = "TCH_DI"
If TRIB=3 Then f_type = "TIP_DO"
If TRIB=4 Then f_type = "TIP_RI"

COLO="Code Enregistrement;Type de traitement;Nom du lot;Sequence
Lot;Numéro Image" 'Entête du fichier csv Non des colonnes excel
Set fileOut = fso.OpenTextFile("C:RECAP.CSV", ForWriting , True)
fileout.WriteLine COL 'Fabrication des colonnes

Set fsofolder = fso.GetFolder("C:DATAPACKAGE")
Set collec_file = fsofolder.Files
for each fic_file in collec_file
If Right(fic_file.Name, 3) = "dat" and left(fic_file.Name, 5) > f_type Then
Do
Set fileIn = fso.OpenTextFile(fic_file, True)
Do While Not fileIn.AtEndOfStream
SLine = fileIn.ReadLine
CE=Mid(SLine,1,2) 'CE = Code enregistrement
If CE= "50" Then
strIn=Mid(SLine,1,2)'CE = 50 Cheque Code enregistrement
strIn=strIn & ";" & Mid(SLine,3,2)
strIn=strIn & ";" & Mid(SLine,5,2)
strIn=strIn & ";" & Mid(SLine,7,11)
fileOut.WriteLine strIn
ElseIf CE="60" Then
strIn=Mid(SLine,1,2)
strIn=strIn & ";" & Mid(SLine,3,2)
strIn=strIn & ";" & Mid(SLine,10,2)
strIn=strIn & ";" & Mid(SLine,20,11)
fileOut.WriteLine strIn
ElseIf CE="65" Then
strIn=Mid(SLine,1,2)'CE = 50 Cheque Code enregistrement
strIn=strIn & ";" & Mid(SLine,8,2)
strIn=strIn & ";" & Mid(SLine,8,2)
strIn=strIn & ";" & Mid(SLine,88,11)
fileOut.WriteLine strIn
Else
fileOut.Close
End If
Loop
End If ' <<<ERREUR Instruction attendue
Next

Set fileIn = Nothing
Set fileOut = Nothing

Si quelqu'un peut me donner un coup de pouce SVP ?


J'ai essayé d'en refaire un bout ;-)
Non testé ;-(

Option Explicit
Const ForReading = 1, ForWriting = 2
Dim fso, fsofolder, collec_file, fic_file, f_type
Dim objShell, fileIn, fileOut, strIn, Sline, CE

Function Choix_etat()
Choix_etat = InputBox("Voulez vous lancer le traitement des ETATs ?" &
vbCrLf & "Tapez le N° de l'état pour lequel vous voulez générer
l'impression." & vbCrLf & vbCrLf & "Taper :" & vbCrLf & vbCrLf & "1> pour
les AJ " & vbCrLf & "2 pour les DI " & vbCrLf & "3 pour DO " & vbCrLf & "4
pour les RI" & vbCrLf, "EASY2XLS", "1")
Choix_etat = Trim(Choix_etat)
End Function

Select Case Choix_etat()
Case "1" f_type = "TCH_AJ"
Case "2" f_type = "TCH_DI"
Case "3" f_type = "TIP_DO"
Case "4" f_type = "TIP_RI"
Case Else
WScript.Echo "Traitement annulé !" ' Prévenir l'utilisateur de
l'annulation du script
WScript.Quit
End Select

Set fso = CreateObject("Scripting.FileSystemObject")
Set fileOut = fso.OpenTextFile("C:RECAP.CSV", ForWriting, True)
fileOut.WriteLine "Code enregistrement;Type de traitement;Nom du
lot;Sequence lot;Numéro Image"
Set fsofolder = fso.GetFolder("C:DATAPACKAGE")
Set collec_file = fsofolder.Files
For Each fic_file In collec_file
If Right(fic_file.Name, 3) = "dat" And Left(fic_file.Name, 6) = f_type
Then
Set fileIn = fso.OpenTextFile(fic_file, ForReading)
Do While Not fileIn.AtEndOfStream
SLine = Trim(fileIn.ReadLine)
CE= Left(SLine, 2) 'CE = Code enregistrement
If CE = "50" Then
strIn = CE
strIn = strIn & ";" & Mid(SLine, 3, 2)
strIn = strIn & ";" & Mid(SLine, 5, 2)
strIn = strIn & ";" & Mid(SLine, 7, 11)
ElseIf CE = "60" Then
strIn = CE
strIn = strIn & ";" & Mid(SLine, 3, 2)
strIn = strIn & ";" & Mid(SLine, 10, 2)
strIn = strIn & ";" & Mid(SLine, 20, 11)
ElseIf CE = "65" Then
strIn = CE
strIn = strIn & ";" & Mid(SLine, 8, 2)
strIn = strIn & ";" & Mid(SLine, 8, 2) ' ? étrange ?
strIn = strIn & ";" & Mid(SLine, 88, 11)
End If
Select Case CE
Case "50", "60", "65" fileOut.WriteLine strIn
End Select
Loop
End If
Next
fileIn.Close
fileOut.Close
Set fileIn = Nothing
Set fileOut = Nothing





Avatar
jbongran
Méta-MCI wrote:
Bonjour !

Petit détail : si un fichier s'appelle, par exemple, "AAxxdat" (sans
extension), il sera sélectionné. De même, avec "BBxx.1dat",
"CC.predat", etc.
Mais, bon, je suppose qu'il y a en place d'autres mécanismes, de
contrôle des noms de fichiers.

@-salutations

Michel Claveau


for each fic_file in collec_file
If Right(fic_file.Name, 4) = ".dat"

Avatar
Jean
If Right(fic_file.Name, 3) = "dat" Then


il y a la méthode GetExtensionName de FSO pour retrouver l'extension
d'un fichier:
If LCase(fso.GetExtensionName(fic_file)) = "dat" Then

Méthode GetExtensionName
http://msdn.microsoft.com/library/en-us/script56/html/92bbb0d5-3f9c-4f82-a105-e3c47a2a151d.asp

Amicalement,

--
Jean - JMST
Belgium

Avatar
Méta-MCI
Bonjour !

Juste par curiosité :
- comment se fait la conversion d'une majuscule accentuée, en minuscule
? Avec d'autres langages, j'ai des comportement curieux, variables selon le
code-page utilisé (c-à-dire la même routine retourne des résultats pouvant
être différents, sur des machines différentes)
- comment se fait la conversion, si l'extension contient des caractères
unicode ? Retrouver les minuscules unicode, c'est... d'autres méthodes.

@+

MCI
1 2 3