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

lire ecrire dans un fichier avec une condition

4 réponses
Avatar
---DGI972---
Bonjour à tous

Je peux dire que le VBSCript: ce n'est pas comme le vélo cela ne
revient pas tout seul ...

Un petit coup de pouce.
Un fichier txt ou je doit écraser en position 50 un espace blanc.
Le VBScript ci dessous réalise presque ce que je veux sauf que la ligne
re-travaillée (détecté par un 4 en position 1 longueur 1) est
systématiquement doublée dans le fichier de sortie.
Je ne comprends pas pourquoi ma boucle est pourtant basique.

Mon VBSCript:

Set fso = CreateObject("Scripting.FileSystemObject")
Set inFile = fso.OpenTextFile("C:\FIN\FIN-E", 1,False)
Set outFile= fso.OpenTextFile("C:\FIN\AEICFIN", 2,True)

Do While inFile.AtEndOfStream <> True
test1 = inFile.ReadLine 'Lecture de la ligne complète
test2 = Mid(test1,1,1) ' extraction du premier caractère
if test2="4" then' si =4 mettre un blanc en position 50
test3=Mid(test1,1,49)&" "&Mid(test1,51,200)
outFile.writeline test3
End If
outFile.write test1 & vbcrlf
Loop

Set fso = Nothing
Set inFile = Nothing
Set outFile = Nothing

D'avance merci

4 réponses

Avatar
---DGI972---
Bonjour à tous

Je peux dire que le VBSCript: ce n'est pas comme le vélo cela ne revient pas
tout seul ...

Un petit coup de pouce.
Un fichier txt ou je doit écraser en position 50 un espace blanc.
Le VBScript ci dessous réalise presque ce que je veux sauf que la ligne
re-travaillée (détecté par un 4 en position 1 longueur 1) est
systématiquement doublée dans le fichier de sortie.
Je ne comprends pas pourquoi ma boucle est pourtant basique.

Mon VBSCript:

Set fso = CreateObject("Scripting.FileSystemObject")
Set inFile = fso.OpenTextFile("C:FINFIN-E", 1,False)
Set outFile= fso.OpenTextFile("C:FINAEICFIN", 2,True)

Do While inFile.AtEndOfStream <> True
test1 = inFile.ReadLine 'Lecture de la ligne complète
test2 = Mid(test1,1,1) ' extraction du premier caractère
if test2="4" then' si =4 mettre un blanc en position 50
test3=Mid(test1,1,49)&" "&Mid(test1,51,200)
outFile.writeline test3
End If
outFile.write test1 & vbcrlf
Loop

Set fso = Nothing
Set inFile = Nothing
Set outFile = Nothing

D'avance merci


Je me réponds a moi même.


Const Pour_lire = 1
Const Pour_ecrire = 2

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set F1 = oFSO.OpenTextFile ("C:FINFIN-E", Pour_lire)
Set F2 = oFSO.CreateTextFile ("C:FINAEICFIN", Pour_ecrire, False)

Do Until F1.AtEndOfStream
Lit = F1.ReadLine
If Mid(Lit,1,1) = "4" Then
F2.WriteLine (Mid(lit,1,49)&" "&Mid(lit,51,200))
Else
F2.WriteLine Lit
End If
Loop
Set F1 = Nothing
Set F2 = Nothing

Avatar
---DGI972---
Bonjour à tous

Je peux dire que le VBSCript: ce n'est pas comme le vélo cela ne revient
pas tout seul ...

Un petit coup de pouce.
Un fichier txt ou je doit écraser en position 50 un espace blanc.
Le VBScript ci dessous réalise presque ce que je veux sauf que la ligne
re-travaillée (détecté par un 4 en position 1 longueur 1) est
systématiquement doublée dans le fichier de sortie.
Je ne comprends pas pourquoi ma boucle est pourtant basique.

Mon VBSCript:

Set fso = CreateObject("Scripting.FileSystemObject")
Set inFile = fso.OpenTextFile("C:FINFIN-E", 1,False)
Set outFile= fso.OpenTextFile("C:FINAEICFIN", 2,True)

Do While inFile.AtEndOfStream <> True
test1 = inFile.ReadLine 'Lecture de la ligne complète
test2 = Mid(test1,1,1) ' extraction du premier caractère
if test2="4" then' si =4 mettre un blanc en position 50
test3=Mid(test1,1,49)&" "&Mid(test1,51,200)
outFile.writeline test3
End If
outFile.write test1 & vbcrlf
Loop

Set fso = Nothing
Set inFile = Nothing
Set outFile = Nothing

D'avance merci


Je me réponds a moi même.


Const Pour_lire = 1
Const Pour_ecrire = 2

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set F1 = oFSO.OpenTextFile ("C:FINFIN-E", Pour_lire)
Set F2 = oFSO.CreateTextFile ("C:FINAEICFIN", Pour_ecrire, False)

Do Until F1.AtEndOfStream
Lit = F1.ReadLine
If Mid(Lit,1,1) = "4" Then
F2.WriteLine (Mid(lit,1,49)&" "&Mid(lit,51,200))
Else
F2.WriteLine Lit
End If
Loop
Set F1 = Nothing
Set F2 = Nothing


Je me suis trompé.
Cela fait exactement le même Pb.
Je ne comprends pas la logique de la boucle !!!
ca m'énerve


Avatar
---DGI972---
Const Pour_lire = 1
Const Pour_ecrire = 2

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set F1 = oFSO.OpenTextFile ("C:FINFIN-E", Pour_lire)
Set F2 = oFSO.CreateTextFile ("C:FINAEICFIN", Pour_ecrire, False)

Do Until F1.AtEndOfStream
Lit = F1.ReadLine
If Mid(Lit,1,1) = "4" Then
F2.WriteLine (Mid(lit,1,49)&" "&Mid(lit,51,200))
Else
F2.WriteLine Lit
End If
Loop
Set F1 = Nothing
Set F2 = Nothing



C'est bon cette fois ci

Set fso = CreateObject("Scripting.FileSystemObject")
Set inFile = fso.OpenTextFile("C:FINFIN-E", 1,False)
Set outfil= fso.OpenTextFile("C:FINAEICFIN", 2,True)

Do While inFile.AtEndOfStream <> True
test1 = inFile.ReadLine 'Lecture de la ligne complète
test2 = Mid(test1,1,1) ' extraction du premier caractère 6 ou 4
if test2="4" then' si =4 c'est une remise
test1=Mid(test1,1,49)&" "&Mid(test1,51,200)
End If
outfil.write test1 & vbcrlf
Loop

Set fso = Nothing
Set inFile = Nothing
Set outfil = Nothing


Avatar
Gilles LAURENT [MVP]
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:

Bonjour,

| Lire un fichier au format texte contenant des lignes puis
| substituer le 50ème caractère de chaque ligne par un espace
| si la ligne commence par un 4 ou un 6

Tentative de résolution via une expression régulière ;-)

Set oRe=New RegExp: oRe.Multiline=True
oRe.Global=True: oRe.Pattern="(^[46].{48}).(.*)"
Set oFs=CreateObject("Scripting.FileSystemObject")
Set oFileIn=oFs.OpenTextFile("C:FINFIN-E")
Set oFileOut=oFs.CreateTextFile("C:FINAEICFIN", True)
oFileOut.Write oRe.Replace(oFileIn.ReadAll(),"$1 $2")

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