OVH Cloud OVH Cloud

Petit pb avec cr/lf

2 réponses
Avatar
---DGI972---
Bonjour à tous,
j'ai un petit pb avec les retours chariot sur un fichier txt de
longueur 530.
le Script ci dessous doit lire le fichier ligne par ligne et remplacer
4 fois dans une certaine zone selon le début de la ligne une valeur par
une autre (11315 longueur fixe 5).
Sauf que: à la sortie outfile n'a plus de retour chariot à la fin
position 530.
Je suis perdu, une petite lumière serait la bienvenue !!!


Option Explicit
Dim fso, fileIn, fileOut, strIn, CE, Sline
Set fso = CreateObject("Scripting.FileSystemObject")
Set fileIn = fso.OpenTextFile("C:\INFILE", 1, True)
Set fileOut = fso.OpenTextFile("C:\OUTFILE", 2, True)
Do While Not fileIn.AtEndOfStream
SLine = fileIn.ReadLine
CE=Mid(SLine,1,2) 'CE = Code début de ligne 21 04 ou 21

If CE= "04" Then
strIn=Mid(SLine,1,192) ' Pour extraire le début de la ligne'
strIn=strIn & "11315" 'pour remplacer 19725 par 11315 Pos 193 lg 5
strIn=strIn & Mid(SLine,198,66) 'Pour extraire la 2 ieme partie de la
ligne
strIn=strIn & "11315" 'pour remplacer 19725 par 11315 Pos 264 Lg 5
strIn=strIn & Mid(SLine,269,168) 'Pour extraire la 3 ieme partie de
la ligne
strIn=strIn & "11315" 'pour remplacer 19725 par 11315 Pos 437 Lg 5
strIn=strIn & Mid(SLine,442,50) 'Pour extraire la 4 ieme partie de la
ligne
strIn=strIn & "11315" 'pour remplacer 19725 par 11315 Pos 492 Lg 5
strIn=strIn & Mid(SLine,497,33) 'Pour extraire la 5 ieme partie de la
ligne
fileOut.WriteLine strIn
ElseIf CE="21" Then
strIn=Mid(SLine,1,18)
strIn=strIn & "11315" 'pour remplacer 19725 par 11315 Pos 19 Lg5
strIn=strIn & Mid(SLine,24,506) 'Pour extraire le reste de la ligne
fileOut.WriteLine strIn
Else CE="29"
fileOut.WriteLine SLine
fileOut.Close
End If
Loop

set fso=Nothing
Set fileIn=Nothing
Set fileOut=Nothing

2 réponses

Avatar
---DGI972---
---DGI972--- a formulé ce mardi :
Bonjour à tous,
j'ai un petit pb avec les retours chariot sur un fichier txt de longueur 530.
le Script ci dessous doit lire le fichier ligne par ligne et remplacer 4 fois
dans une certaine zone selon le début de la ligne une valeur par une autre
(11315 longueur fixe 5).
Sauf que: à la sortie outfile n'a plus de retour chariot à la fin position
530.
Je suis perdu, une petite lumière serait la bienvenue !!!


Option Explicit
Dim fso, fileIn, fileOut, strIn, CE, Sline
Set fso = CreateObject("Scripting.FileSystemObject")
Set fileIn = fso.OpenTextFile("C:INFILE", 1, True)
Set fileOut = fso.OpenTextFile("C:OUTFILE", 2, True)
Do While Not fileIn.AtEndOfStream
SLine = fileIn.ReadLine
CE=Mid(SLine,1,2) 'CE = Code début de ligne 21 04 ou 21

If CE= "04" Then
strIn=Mid(SLine,1,192) ' Pour extraire le début de la ligne'
strIn=strIn & "11315" 'pour remplacer 19725 par 11315 Pos 193 lg 5
strIn=strIn & Mid(SLine,198,66) 'Pour extraire la 2 ieme partie de la ligne
strIn=strIn & "11315" 'pour remplacer 19725 par 11315 Pos 264 Lg 5
strIn=strIn & Mid(SLine,269,168) 'Pour extraire la 3 ieme partie de la
ligne
strIn=strIn & "11315" 'pour remplacer 19725 par 11315 Pos 437 Lg 5
strIn=strIn & Mid(SLine,442,50) 'Pour extraire la 4 ieme partie de la ligne
strIn=strIn & "11315" 'pour remplacer 19725 par 11315 Pos 492 Lg 5
strIn=strIn & Mid(SLine,497,33) 'Pour extraire la 5 ieme partie de la ligne
fileOut.WriteLine strIn
ElseIf CE="21" Then
strIn=Mid(SLine,1,18)
strIn=strIn & "11315" 'pour remplacer 19725 par 11315 Pos 19 Lg5
strIn=strIn & Mid(SLine,24,506) 'Pour extraire le reste de la ligne
fileOut.WriteLine strIn
Else CE="29"
fileOut.WriteLine SLine
fileOut.Close
End If
Loop

set fso=Nothing
Set fileIn=Nothing
Set fileOut=Nothing
Même en simplifiant le script le fichier OUTFILE, du moins la première

ligne dans cet exemple n'a pas de retour chariot en position 530.
NB: Le fichier INFILE est un fichier txt de longueur 530 avec un retour
chariot en position 530.

Option Explicit
Dim fso, fileIn, fileOut, strIn, CE, Sline
Set fso = CreateObject("Scripting.FileSystemObject")
Set fileIn = fso.OpenTextFile("C:INFILE", 1, True)
Set fileOut = fso.OpenTextFile("C:OUTFILE", 2, True)
Do While Not fileIn.AtEndOfStream
SLine = fileIn.ReadLine
CE=Mid(SLine,1,2) 'CE = Code enregistrement 21 04 ou 21
fileOut.WriteLine SLine
fileOut.Close
Loop

set fso=Nothing
Set fileIn=Nothing
Set fileOut=Nothing

Avatar
---DGI972---
---DGI972--- a exposé le 11/10/2005 :
---DGI972--- a formulé ce mardi :
Bonjour à tous,
j'ai un petit pb avec les retours chariot sur un fichier txt de longueur
530.
le Script ci dessous doit lire le fichier ligne par ligne et remplacer 4
fois dans une certaine zone selon le début de la ligne une valeur par une
autre (11315 longueur fixe 5).
Sauf que: à la sortie outfile n'a plus de retour chariot à la fin position
530.
Je suis perdu, une petite lumière serait la bienvenue !!!


Option Explicit
Dim fso, fileIn, fileOut, strIn, CE, Sline
Set fso = CreateObject("Scripting.FileSystemObject")
Set fileIn = fso.OpenTextFile("C:INFILE", 1, True)
Set fileOut = fso.OpenTextFile("C:OUTFILE", 2, True)
Do While Not fileIn.AtEndOfStream
SLine = fileIn.ReadLine
CE=Mid(SLine,1,2) 'CE = Code début de ligne 21 04 ou 21

If CE= "04" Then
strIn=Mid(SLine,1,192) ' Pour extraire le début de la ligne'
strIn=strIn & "11315" 'pour remplacer 19725 par 11315 Pos 193 lg 5
strIn=strIn & Mid(SLine,198,66) 'Pour extraire la 2 ieme partie de la
ligne
strIn=strIn & "11315" 'pour remplacer 19725 par 11315 Pos 264 Lg 5
strIn=strIn & Mid(SLine,269,168) 'Pour extraire la 3 ieme partie de la
ligne
strIn=strIn & "11315" 'pour remplacer 19725 par 11315 Pos 437 Lg 5
strIn=strIn & Mid(SLine,442,50) 'Pour extraire la 4 ieme partie de la
ligne
strIn=strIn & "11315" 'pour remplacer 19725 par 11315 Pos 492 Lg 5
strIn=strIn & Mid(SLine,497,33) 'Pour extraire la 5 ieme partie de la
ligne
fileOut.WriteLine strIn
ElseIf CE="21" Then
strIn=Mid(SLine,1,18)
strIn=strIn & "11315" 'pour remplacer 19725 par 11315 Pos 19 Lg5
strIn=strIn & Mid(SLine,24,506) 'Pour extraire le reste de la ligne
fileOut.WriteLine strIn
Else CE="29"
fileOut.WriteLine SLine
fileOut.Close
End If
Loop

set fso=Nothing
Set fileIn=Nothing
Set fileOut=Nothing
Même en simplifiant le script le fichier OUTFILE, du moins la première ligne

dans cet exemple n'a pas de retour chariot en position 530.
NB: Le fichier INFILE est un fichier txt de longueur 530 avec un retour
chariot en position 530.

Option Explicit
Dim fso, fileIn, fileOut, strIn, CE, Sline
Set fso = CreateObject("Scripting.FileSystemObject")
Set fileIn = fso.OpenTextFile("C:INFILE", 1, True)
Set fileOut = fso.OpenTextFile("C:OUTFILE", 2, True)
Do While Not fileIn.AtEndOfStream
SLine = fileIn.ReadLine
CE=Mid(SLine,1,2) 'CE = Code enregistrement 21 04 ou 21
fileOut.WriteLine SLine
fileOut.Close
Loop

set fso=Nothing
Set fileIn=Nothing
Set fileOut=Nothing


Fausse Alerte, le retour chariot est présent mais toutes les sommes des
morceaux de lignes ne sont pas égales à 530.
Je travail dessus.