lire ecrire dans un fichier avec une condition

Le
---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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
---DGI972---
Le #6741231
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

---DGI972---
Le #6741681
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


---DGI972---
Le #6741671
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


Gilles LAURENT [MVP]
Le #6743411
"---DGI972---" 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
Publicité
Poster une réponse
Anonyme