Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

boucle avec condition

3 réponses
Avatar
---DGI972---
Bonjour,

Je butte encore avec les boucles avec condition:

un fichier txt en entrée (C:\UT\IC7ACOR.txt)
0000000120
1000101000
3000222000
3000223000
3000224000
1000102000
3000303000
3000304000
1000101000
3000404000

je voudrais éclater ce fichier en autant de fichier de sortie que de
ligne commencant par 1.

premier fichier (AG0001.txt)
1000101000
3000222000
3000223000
3000224000
deuxième fichier (AG0002.txt)
1000102000
3000303000
3000304000
troisième fichier (AG0003.txt)
1000101000
3000404000

Voici mon début de code et comme d'habitude je ne m'en sort pas avec la
boucle, la rupture se fait après la detection du premier caractère égal
a 1:

8<------------------------------------------------
Dim fso, inFile, outfile, C, cmpt, test, test1
On Error Resume next
Const ForReading = 1
Const ForWriting = 2

Set fso = CreateObject("Scripting.FileSystemObject")
Set inFile = fso.OpenTextFile("C:\UT\IC7ACOR", ForReading,False)

cmpt = 1
Do While inFile.AtEndOfStream <> True
set outfile = fso.OpenTextFile("C:\UT\AG"&Right("0000"&cmpt,4)&".txt",
ForWriting,True)
'set outfile = fso.OpenTextFile("C:\UT\AG"&Right("0000"&cmpt,4)&".txt",
ForWriting,True)
test = inFile.ReadLine 'Lecture de la ligne complète
if Mid(test,1,1) = "1" then
outfile.WriteLine test
cmpt=cmpt+1
End if

if Mid(test,1,1) = "3" then outfile.WriteLine test

Loop

' Libère les variables objets.
Set fso = Nothing
Set inFile = Nothing
Set outfile = Nothing
8<------------------------------------------------

Pour la suite il faudrait que je fabrique les fichiers AGXXXX.txt en
fonction de l'extraction de la zone 5 longueur 3 de la ligne commencant
par un 1 et si le fichier existe déjà incrémenter le fichier par un
compteur (C:\UT\AG101-00.txt;C:\UT\AG102-00.txt;C:\UT\AG101-01.txt).

Merci d'avance.

3 réponses

Avatar
Gilles LAURENT [MVP]
"---DGI972---" wrote:

Bonjour,



Bonjour,

Je butte encore avec les boucles avec condition:

un fichier txt en entrée (C:UTIC7ACOR.txt)
0000000120
1000101000
3000222000
3000223000
3000224000
1000102000
3000303000
3000304000
1000101000
3000404000

je voudrais éclater ce fichier en autant de fichier de sortie que de
ligne commencant par 1.

premier fichier (AG0001.txt)
1000101000
3000222000
3000223000
3000224000
deuxième fichier (AG0002.txt)
1000102000
3000303000
3000304000
troisième fichier (AG0003.txt)
1000101000
3000404000

Voici mon début de code et comme d'habitude je ne m'en sort pas avec la
boucle, la rupture se fait après la detection du premier caractère égal
a 1:

8<------------------------------------------------
Dim fso, inFile, outfile, C, cmpt, test, test1
On Error Resume next
Const ForReading = 1
Const ForWriting = 2

Set fso = CreateObject("Scripting.FileSystemObject")
Set inFile = fso.OpenTextFile("C:UTIC7ACOR", ForReading,False)

cmpt = 1
Do While inFile.AtEndOfStream <> True
set outfile = fso.OpenTextFile("C:UTAG"&Right("0000"&cmpt,4)&".txt",
ForWriting,True)
'set outfile = fso.OpenTextFile("C:UTAG"&Right("0000"&cmpt,4)&".txt",
ForWriting,True)
test = inFile.ReadLine 'Lecture de la ligne complète
if Mid(test,1,1) = "1" then
outfile.WriteLine test
cmpt=cmpt+1
End if

if Mid(test,1,1) = "3" then outfile.WriteLine test

Loop

' Libère les variables objets.
Set fso = Nothing
Set inFile = Nothing
Set outfile = Nothing
8<------------------------------------------------

Pour la suite il faudrait que je fabrique les fichiers AGXXXX.txt en
fonction de l'extraction de la zone 5 longueur 3 de la ligne commencant
par un 1 et si le fichier existe déjà incrémenter le fichier par un
compteur (C:UTAG101-00.txt;C:UTAG102-00.txt;C:UTAG101-01.txt).



--- Coupez ici : CodeSnippet.vbs ---
Set oFs=CreateObject("Scripting.FileSystemObject")
Set oFileIn=oFs.OpenTextFile("ic7acor.txt", 1)
Do While Not oFileIn.AtEndOfStream
sLine=oFileIn.ReadLine
If Left(sLine,1)="1" Or Left(sLine,1)="3" Then
If Left(sLine,1)="1" Then
nCount=0
Do
sName="AG" & Mid(sLine,5,3) & "-" & _
Right("0" & nCount, 2) & ".txt"
nCount=nCount+1
Loop While oFs.FileExists(sName)
Set oFileOut=oFs.CreateTextFile(sName, True)
End If
oFileOut.WriteLine sLine
End If
Loop
--- Coupez ici : CodeSnippet.vbs ---

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
Avatar
---DGI972---
Gilles LAURENT [MVP] a écrit :
"---DGI972---" wrote:

Bonjour,



Bonjour,

Je butte encore avec les boucles avec condition:

un fichier txt en entrée (C:UTIC7ACOR.txt)
0000000120
1000101000
3000222000
3000223000
3000224000
1000102000
3000303000
3000304000
1000101000
3000404000

je voudrais éclater ce fichier en autant de fichier de sortie que de
ligne commencant par 1.

premier fichier (AG0001.txt)
1000101000
3000222000
3000223000
3000224000
deuxième fichier (AG0002.txt)
1000102000
3000303000
3000304000
troisième fichier (AG0003.txt)
1000101000
3000404000

Voici mon début de code et comme d'habitude je ne m'en sort pas avec la
boucle, la rupture se fait après la detection du premier caractère égal
a 1:

8<------------------------------------------------
Dim fso, inFile, outfile, C, cmpt, test, test1
On Error Resume next
Const ForReading = 1
Const ForWriting = 2

Set fso = CreateObject("Scripting.FileSystemObject")
Set inFile = fso.OpenTextFile("C:UTIC7ACOR", ForReading,False)

cmpt = 1
Do While inFile.AtEndOfStream <> True
set outfile = fso.OpenTextFile("C:UTAG"&Right("0000"&cmpt,4)&".txt",
ForWriting,True)
'set outfile = fso.OpenTextFile("C:UTAG"&Right("0000"&cmpt,4)&".txt",
ForWriting,True)
test = inFile.ReadLine 'Lecture de la ligne complète
if Mid(test,1,1) = "1" then
outfile.WriteLine test
cmpt=cmpt+1
End if

if Mid(test,1,1) = "3" then outfile.WriteLine test

Loop

' Libère les variables objets.
Set fso = Nothing
Set inFile = Nothing
Set outfile = Nothing
8<------------------------------------------------

Pour la suite il faudrait que je fabrique les fichiers AGXXXX.txt en
fonction de l'extraction de la zone 5 longueur 3 de la ligne commencant
par un 1 et si le fichier existe déjà incrémenter le fichier par un
compteur (C:UTAG101-00.txt;C:UTAG102-00.txt;C:UTAG101-01.txt).



--- Coupez ici : CodeSnippet.vbs ---
Set oFs=CreateObject("Scripting.FileSystemObject")
Set oFileIn=oFs.OpenTextFile("ic7acor.txt", 1)
Do While Not oFileIn.AtEndOfStream
sLine=oFileIn.ReadLine
If Left(sLine,1)="1" Or Left(sLine,1)="3" Then
If Left(sLine,1)="1" Then
nCount=0
Do
sName="AG" & Mid(sLine,5,3) & "-" & _
Right("0" & nCount, 2) & ".txt"
nCount=nCount+1
Loop While oFs.FileExists(sName)
Set oFileOut=oFs.CreateTextFile(sName, True)
End If
oFileOut.WriteLine sLine
End If
Loop
--- Coupez ici : CodeSnippet.vbs ---



Merci gilles
C'est exactement ce que je voulais et en 17 lignes ... :'(
merci encore
;-)
Avatar
Gilles LAURENT [MVP]
"---DGI972---" wrote:

Merci gilles
C'est exactement ce que je voulais et en 17 lignes ... :'(
merci encore



De rien DGI972 :-) Il est à noter que le cahier des charges que vous avez
exprimé ici était très précis. Cela facilite forcement beaucoup les choses ;-)

A bientôt,

--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr