Je veux faire un saut de ligne lorsque que je vois des CAB et ROD en
position 29 lg 3 et dix sauts de ligne quand je vois des DET et des MSB
sauf que lorsqu'il y a n fois concécutif les DET101 ou DET102 ou DET103
ou DET191 et les MSG001 et MSG002 il ne faut pas les séparer par des
sauts de ligne entre eux mais après faire le complément de 10 sauts de
lignes (par ex: si 4 DET101 concécutifs et il faut 6 saut de lignes).
Voila mon début de code mais je ne trouve pas comment connaitre la
ligne d'avant ou d'après pour s'avoir si je fais les 10 sauts de ligne.
Set file1 = fso.OpenTextFile("D:\CABLE\_CABLE.txt")
Set file2 = fso.OpenTextFile("D:\CABLE\_CABLE2.txt",2, True)
Do Until file1.AtEndOfStream
SLine2 = file1.ReadLine
NOUV=Mid(SLine2,29,6)
if Mid(SLine2,29,3)="CAB" then Sline2=Sline2&vbcrlf
if Mid(SLine2,29,3)="ROD" then Sline2=Sline2&vbcrlf
if Mid(SLine2,29,6)="DET101" and ANC="DET101" then
Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf
if Mid(SLine2,29,6)="DET102" and ANC="DET102" then
Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf
if Mid(SLine2,29,6)="DET103" and ANC="DET103" then
Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf
if Mid(SLine2,29,6)="DET191" and ANC="DET191" then
Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf
if Mid(SLine2,29,6)="MSG001" and ANC="MSG001" then
Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf
if Mid(SLine2,29,6)="MSG002" and ANC="MSG002" then
Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf
file2.Writeline SLine2
ANC=NOUV
loop
fileOut.Close
Je sais qu'il manque la boucle pour le complément à 10 des sauts de
ligne mais je ne sais pas par quel bout la prendre aussi.
Je veux faire un saut de ligne lorsque que je vois des CAB et ROD en position 29 lg 3 et dix sauts de ligne quand je vois des DET et des MSB sauf que lorsqu'il y a n fois concécutif les DET101 ou DET102 ou DET103 ou DET191 et les MSG001 et MSG002 il ne faut pas les séparer par des sauts de ligne entre eux mais après faire le complément de 10 sauts de lignes (par ex: si 4 DET101 concécutifs et il faut 6 saut de lignes).
Voila mon début de code mais je ne trouve pas comment connaitre la ligne d'avant ou d'après pour s'avoir si je fais les 10 sauts de ligne.
Set file1 = fso.OpenTextFile("D:CABLE_CABLE.txt") Set file2 = fso.OpenTextFile("D:CABLE_CABLE2.txt",2, True)
Do Until file1.AtEndOfStream SLine2 = file1.ReadLine
NOUV=Mid(SLine2,29,6)
if Mid(SLine2,29,3)="CAB" then Sline2=Sline2&vbcrlf
if Mid(SLine2,29,3)="ROD" then Sline2=Sline2&vbcrlf
if Mid(SLine2,29,6)="DET101" and ANC="DET101" then Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf if Mid(SLine2,29,6)="DET102" and ANC="DET102" then Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf if Mid(SLine2,29,6)="DET103" and ANC="DET103" then Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf if Mid(SLine2,29,6)="DET191" and ANC="DET191" then Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf
if Mid(SLine2,29,6)="MSG001" and ANC="MSG001" then Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf if Mid(SLine2,29,6)="MSG002" and ANC="MSG002" then Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf
file2.Writeline SLine2 ANC=NOUV loop
fileOut.Close
Je sais qu'il manque la boucle pour le complément à 10 des sauts de ligne mais je ne sais pas par quel bout la prendre aussi.
Un peu beaucoup perdu en fait ...
DGI972
Si j'ai bien compris ta demande, ce script devrait convenir:
Dim fso, fileIn, fileOut, strLine Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set fileIn = fso.OpenTextFile("e:testdgi.txt", 1, False, -2) Set fileOut = fso.OpenTextFile("e:testdgi_out.txt", 2, True, -2) Do Until fileIn.AtEndOfStream strLine = fileIn.ReadLine If Trim(strLine) <> "1" Then strLine = strLine & vbCrLf End If fileOut.WriteLine strLine Loop fileIn.Close fileOut.Close Set fileIn = Nothing Set fileOut = Nothing Set fso = Nothing
Bonjour,
Non c'est beaucoup plus compliqué que ca: il faut mettre 1 seul vbcrlf si l'on rencontre un CAB ou un ROD en position 23 lg 3 et 10 vbcrlf si c'est un DET ou MSG mais si il y a plusieur DT ou MSB concécutif (par ex: pour 2 x DET101 à la suite il faut pas faire de vbcrlf entre eux et aprés le dernier DET 101 mettre 8 vbcrlf).
merci encore
jbongran a écrit :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message
de news:mn.53ad7d964e45d37d.33554@NOSPAMlaposte.net...
Bonjour,
Je n'arrive pas a structurer ma boucle pour créer un fichier de sortie
comme je veux. J'aurais besoin d'un coup de pouce.
J'ai un fichier en entrée:
Je veux faire un saut de ligne lorsque que je vois des CAB et ROD en
position 29 lg 3 et dix sauts de ligne quand je vois des DET et des MSB
sauf que lorsqu'il y a n fois concécutif les DET101 ou DET102 ou DET103
ou DET191 et les MSG001 et MSG002 il ne faut pas les séparer par des
sauts de ligne entre eux mais après faire le complément de 10 sauts de
lignes (par ex: si 4 DET101 concécutifs et il faut 6 saut de lignes).
Voila mon début de code mais je ne trouve pas comment connaitre la
ligne d'avant ou d'après pour s'avoir si je fais les 10 sauts de ligne.
Set file1 = fso.OpenTextFile("D:CABLE_CABLE.txt")
Set file2 = fso.OpenTextFile("D:CABLE_CABLE2.txt",2, True)
Do Until file1.AtEndOfStream
SLine2 = file1.ReadLine
NOUV=Mid(SLine2,29,6)
if Mid(SLine2,29,3)="CAB" then Sline2=Sline2&vbcrlf
if Mid(SLine2,29,3)="ROD" then Sline2=Sline2&vbcrlf
if Mid(SLine2,29,6)="DET101" and ANC="DET101" then
Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf
if Mid(SLine2,29,6)="DET102" and ANC="DET102" then
Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf
if Mid(SLine2,29,6)="DET103" and ANC="DET103" then
Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf
if Mid(SLine2,29,6)="DET191" and ANC="DET191" then
Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf
if Mid(SLine2,29,6)="MSG001" and ANC="MSG001" then
Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf
if Mid(SLine2,29,6)="MSG002" and ANC="MSG002" then
Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf
file2.Writeline SLine2
ANC=NOUV
loop
fileOut.Close
Je sais qu'il manque la boucle pour le complément à 10 des sauts de
ligne mais je ne sais pas par quel bout la prendre aussi.
Un peu beaucoup perdu en fait ...
DGI972
Si j'ai bien compris ta demande, ce script devrait convenir:
Dim fso, fileIn, fileOut, strLine
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set fileIn = fso.OpenTextFile("e:testdgi.txt", 1, False, -2)
Set fileOut = fso.OpenTextFile("e:testdgi_out.txt", 2, True, -2)
Do Until fileIn.AtEndOfStream
strLine = fileIn.ReadLine
If Trim(strLine) <> "1" Then
strLine = strLine & vbCrLf
End If
fileOut.WriteLine strLine
Loop
fileIn.Close
fileOut.Close
Set fileIn = Nothing
Set fileOut = Nothing
Set fso = Nothing
Bonjour,
Non c'est beaucoup plus compliqué que ca:
il faut mettre 1 seul vbcrlf si l'on rencontre un CAB ou un ROD en
position 23 lg 3
et 10 vbcrlf si c'est un DET ou MSG mais si il y a plusieur DT ou MSB
concécutif (par ex: pour 2 x DET101 à la suite il faut pas faire de
vbcrlf entre eux et aprés le dernier DET 101 mettre 8 vbcrlf).
Je veux faire un saut de ligne lorsque que je vois des CAB et ROD en position 29 lg 3 et dix sauts de ligne quand je vois des DET et des MSB sauf que lorsqu'il y a n fois concécutif les DET101 ou DET102 ou DET103 ou DET191 et les MSG001 et MSG002 il ne faut pas les séparer par des sauts de ligne entre eux mais après faire le complément de 10 sauts de lignes (par ex: si 4 DET101 concécutifs et il faut 6 saut de lignes).
Voila mon début de code mais je ne trouve pas comment connaitre la ligne d'avant ou d'après pour s'avoir si je fais les 10 sauts de ligne.
Set file1 = fso.OpenTextFile("D:CABLE_CABLE.txt") Set file2 = fso.OpenTextFile("D:CABLE_CABLE2.txt",2, True)
Do Until file1.AtEndOfStream SLine2 = file1.ReadLine
NOUV=Mid(SLine2,29,6)
if Mid(SLine2,29,3)="CAB" then Sline2=Sline2&vbcrlf
if Mid(SLine2,29,3)="ROD" then Sline2=Sline2&vbcrlf
if Mid(SLine2,29,6)="DET101" and ANC="DET101" then Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf if Mid(SLine2,29,6)="DET102" and ANC="DET102" then Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf if Mid(SLine2,29,6)="DET103" and ANC="DET103" then Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf if Mid(SLine2,29,6)="DET191" and ANC="DET191" then Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf
if Mid(SLine2,29,6)="MSG001" and ANC="MSG001" then Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf if Mid(SLine2,29,6)="MSG002" and ANC="MSG002" then Sline2=Sline2&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf&vbcrlf
file2.Writeline SLine2 ANC=NOUV loop
fileOut.Close
Je sais qu'il manque la boucle pour le complément à 10 des sauts de ligne mais je ne sais pas par quel bout la prendre aussi.
Un peu beaucoup perdu en fait ...
DGI972
Si j'ai bien compris ta demande, ce script devrait convenir:
Dim fso, fileIn, fileOut, strLine Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set fileIn = fso.OpenTextFile("e:testdgi.txt", 1, False, -2) Set fileOut = fso.OpenTextFile("e:testdgi_out.txt", 2, True, -2) Do Until fileIn.AtEndOfStream strLine = fileIn.ReadLine If Trim(strLine) <> "1" Then strLine = strLine & vbCrLf End If fileOut.WriteLine strLine Loop fileIn.Close fileOut.Close Set fileIn = Nothing Set fileOut = Nothing Set fso = Nothing
Bonjour,
Non c'est beaucoup plus compliqué que ca: il faut mettre 1 seul vbcrlf si l'on rencontre un CAB ou un ROD en position 23 lg 3 et 10 vbcrlf si c'est un DET ou MSG mais si il y a plusieur DT ou MSB concécutif (par ex: pour 2 x DET101 à la suite il faut pas faire de vbcrlf entre eux et aprés le dernier DET 101 mettre 8 vbcrlf).
merci encore
jbongran
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message de news:
jbongran a écrit :
[...]
Non c'est beaucoup plus compliqué que ca: il faut mettre 1 seul vbcrlf si l'on rencontre un CAB ou un ROD en position 23 lg 3 et 10 vbcrlf si c'est un DET ou MSG mais si il y a plusieur DT ou MSB concécutif (par ex: pour 2 x DET101 à la suite il faut pas faire de vbcrlf entre eux et aprés le dernier DET 101 mettre 8 vbcrlf).
merci encore
Pour une raison que j'ignore, je n'ai carrément pas vu la suite de ton message après le début de l'exemple de sortie. Maintenant si je reprend ton message, effectivement la "solution" proposée ne peut convenir, c'est le moins que l'on puisse dire. J'étais quand même étonné que tu demandes quelque chose d'aussi simple ;-)
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de news:mn.5a077d969c62814c.33554@NOSPAMlaposte.net...
jbongran a écrit :
[...]
Non c'est beaucoup plus compliqué que ca:
il faut mettre 1 seul vbcrlf si l'on rencontre un CAB ou un ROD en
position 23 lg 3
et 10 vbcrlf si c'est un DET ou MSG mais si il y a plusieur DT ou MSB
concécutif (par ex: pour 2 x DET101 à la suite il faut pas faire de vbcrlf
entre eux et aprés le dernier DET 101 mettre 8 vbcrlf).
merci encore
Pour une raison que j'ignore, je n'ai carrément pas vu la suite de ton
message après le début de l'exemple de sortie.
Maintenant si je reprend ton message, effectivement la "solution" proposée
ne peut convenir, c'est le moins que l'on puisse dire.
J'étais quand même étonné que tu demandes quelque chose d'aussi simple ;-)
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message de news:
jbongran a écrit :
[...]
Non c'est beaucoup plus compliqué que ca: il faut mettre 1 seul vbcrlf si l'on rencontre un CAB ou un ROD en position 23 lg 3 et 10 vbcrlf si c'est un DET ou MSG mais si il y a plusieur DT ou MSB concécutif (par ex: pour 2 x DET101 à la suite il faut pas faire de vbcrlf entre eux et aprés le dernier DET 101 mettre 8 vbcrlf).
merci encore
Pour une raison que j'ignore, je n'ai carrément pas vu la suite de ton message après le début de l'exemple de sortie. Maintenant si je reprend ton message, effectivement la "solution" proposée ne peut convenir, c'est le moins que l'on puisse dire. J'étais quand même étonné que tu demandes quelque chose d'aussi simple ;-)
---DGI972---
Le 11/06/2009, jbongran a supposé :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message de news: [...]
Bonjour,
Non c'est beaucoup plus compliqué que ca: il faut mettre 1 seul vbcrlf si l'on rencontre un CAB ou un ROD en position 23 lg 3 et 10 vbcrlf si c'est un DET ou MSG mais si il y a plusieur DT ou MSB concécutif (par ex: pour 2 x DET101 à la suite il faut pas faire de vbcrlf entre eux et aprés le dernier DET 101 mettre 8 vbcrlf).
merci encore
J'essaye de me rattraper ;-)
Option Explicit Dim fso, fileIn, fileOut, strLine, strTemp, strType, strPreviousType Dim cpt, strReturnLine, blnDoIt, strRL cpt = 10 blnDoIt = False strPreviousType = "" strRL = VbCrLf strReturnLine = "" Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set fileIn = fso.OpenTextFile("e:testdgi.txt", 1, False, -2) Set fileOut = fso.OpenTextFile("e:testdgi_out.txt", 2, True, -2) Do Until fileIn.AtEndOfStream strLine = Trim(fileIn.ReadLine) strType = Mid(strLine, 28, 6) Select Case Left(strType, 3) Case "DET", "MSG" blnDoIt = True If strPreviousType = "" Then strPreviousType = strType fileOut.WriteLine strReturnLine & strLine cpt = 9 Else If strPreviousType = strType Then fileOut.WriteLine strLine cpt = cpt -1 Else strPreviousType = strType WriteLineReturns cpt fileOut.WriteLine strLine cpt = 9 End If End If Case Else If blnDoIt Then WriteLineReturns cpt strPreviousType = "" blnDoIt = False cpt = 10 End If If strLine = "1" Then fileOut.WriteLine strLine strReturnLine = "" Else fileOut.WriteLine strReturnLine & strLine strReturnLine = VbCrLf End If End Select Loop If blnDoIt Then WriteLineReturns cpt -1 fileIn.Close fileOut.Close Set fileIn = Nothing Set fileOut = Nothing Set fso = Nothing
Sub WriteLineReturns(intHowMany) Dim i For i = 1 To intHowMany fileOut.WriteLine Next End Sub
YES WE CAN
C'est plus que du rattrage ... merci ca colle
Le 11/06/2009, jbongran a supposé :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message
de news:mn.5a077d969c62814c.33554@NOSPAMlaposte.net... [...]
Bonjour,
Non c'est beaucoup plus compliqué que ca:
il faut mettre 1 seul vbcrlf si l'on rencontre un CAB ou un ROD en
position 23 lg 3
et 10 vbcrlf si c'est un DET ou MSG mais si il y a plusieur DT ou MSB
concécutif (par ex: pour 2 x DET101 à la suite il faut pas faire de
vbcrlf entre eux et aprés le dernier DET 101 mettre 8 vbcrlf).
merci encore
J'essaye de me rattraper ;-)
Option Explicit
Dim fso, fileIn, fileOut, strLine, strTemp, strType, strPreviousType
Dim cpt, strReturnLine, blnDoIt, strRL
cpt = 10
blnDoIt = False
strPreviousType = ""
strRL = VbCrLf
strReturnLine = ""
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set fileIn = fso.OpenTextFile("e:testdgi.txt", 1, False, -2)
Set fileOut = fso.OpenTextFile("e:testdgi_out.txt", 2, True, -2)
Do Until fileIn.AtEndOfStream
strLine = Trim(fileIn.ReadLine)
strType = Mid(strLine, 28, 6)
Select Case Left(strType, 3)
Case "DET", "MSG"
blnDoIt = True
If strPreviousType = "" Then
strPreviousType = strType
fileOut.WriteLine strReturnLine & strLine
cpt = 9
Else
If strPreviousType = strType Then
fileOut.WriteLine strLine
cpt = cpt -1
Else
strPreviousType = strType
WriteLineReturns cpt
fileOut.WriteLine strLine
cpt = 9
End If
End If
Case Else
If blnDoIt Then
WriteLineReturns cpt
strPreviousType = ""
blnDoIt = False
cpt = 10
End If
If strLine = "1" Then
fileOut.WriteLine strLine
strReturnLine = ""
Else
fileOut.WriteLine strReturnLine & strLine
strReturnLine = VbCrLf
End If
End Select
Loop
If blnDoIt Then WriteLineReturns cpt -1
fileIn.Close
fileOut.Close
Set fileIn = Nothing
Set fileOut = Nothing
Set fso = Nothing
Sub WriteLineReturns(intHowMany)
Dim i
For i = 1 To intHowMany
fileOut.WriteLine
Next
End Sub
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message de news: [...]
Bonjour,
Non c'est beaucoup plus compliqué que ca: il faut mettre 1 seul vbcrlf si l'on rencontre un CAB ou un ROD en position 23 lg 3 et 10 vbcrlf si c'est un DET ou MSG mais si il y a plusieur DT ou MSB concécutif (par ex: pour 2 x DET101 à la suite il faut pas faire de vbcrlf entre eux et aprés le dernier DET 101 mettre 8 vbcrlf).
merci encore
J'essaye de me rattraper ;-)
Option Explicit Dim fso, fileIn, fileOut, strLine, strTemp, strType, strPreviousType Dim cpt, strReturnLine, blnDoIt, strRL cpt = 10 blnDoIt = False strPreviousType = "" strRL = VbCrLf strReturnLine = "" Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set fileIn = fso.OpenTextFile("e:testdgi.txt", 1, False, -2) Set fileOut = fso.OpenTextFile("e:testdgi_out.txt", 2, True, -2) Do Until fileIn.AtEndOfStream strLine = Trim(fileIn.ReadLine) strType = Mid(strLine, 28, 6) Select Case Left(strType, 3) Case "DET", "MSG" blnDoIt = True If strPreviousType = "" Then strPreviousType = strType fileOut.WriteLine strReturnLine & strLine cpt = 9 Else If strPreviousType = strType Then fileOut.WriteLine strLine cpt = cpt -1 Else strPreviousType = strType WriteLineReturns cpt fileOut.WriteLine strLine cpt = 9 End If End If Case Else If blnDoIt Then WriteLineReturns cpt strPreviousType = "" blnDoIt = False cpt = 10 End If If strLine = "1" Then fileOut.WriteLine strLine strReturnLine = "" Else fileOut.WriteLine strReturnLine & strLine strReturnLine = VbCrLf End If End Select Loop If blnDoIt Then WriteLineReturns cpt -1 fileIn.Close fileOut.Close Set fileIn = Nothing Set fileOut = Nothing Set fso = Nothing
Sub WriteLineReturns(intHowMany) Dim i For i = 1 To intHowMany fileOut.WriteLine Next End Sub
YES WE CAN
C'est plus que du rattrage ... merci ca colle
Gilles LAURENT [MVP]
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message de news:
Bonjour,
[...] | YES WE CAN
;-)
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:mn.5cff7d9629c68433.55474@NOSPAMlaposte.net
Bonjour,
[...]
| YES WE CAN
;-)
--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message de news:
Bonjour,
[...] | YES WE CAN
;-)
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr
---DGI972---
jbongran a écrit :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message de news: [...]
Bonjour,
Non c'est beaucoup plus compliqué que ca: il faut mettre 1 seul vbcrlf si l'on rencontre un CAB ou un ROD en position 23 lg 3 et 10 vbcrlf si c'est un DET ou MSG mais si il y a plusieur DT ou MSB concécutif (par ex: pour 2 x DET101 à la suite il faut pas faire de vbcrlf entre eux et aprés le dernier DET 101 mettre 8 vbcrlf).
merci encore
J'essaye de me rattraper ;-)
Option Explicit Dim fso, fileIn, fileOut, strLine, strTemp, strType, strPreviousType Dim cpt, strReturnLine, blnDoIt, strRL cpt = 10 blnDoIt = False strPreviousType = "" strRL = VbCrLf strReturnLine = "" Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set fileIn = fso.OpenTextFile("e:testdgi.txt", 1, False, -2) Set fileOut = fso.OpenTextFile("e:testdgi_out.txt", 2, True, -2) Do Until fileIn.AtEndOfStream strLine = Trim(fileIn.ReadLine) strType = Mid(strLine, 28, 6) Select Case Left(strType, 3) Case "DET", "MSG" blnDoIt = True If strPreviousType = "" Then strPreviousType = strType fileOut.WriteLine strReturnLine & strLine cpt = 9 Else If strPreviousType = strType Then fileOut.WriteLine strLine cpt = cpt -1 Else strPreviousType = strType WriteLineReturns cpt fileOut.WriteLine strLine cpt = 9 End If End If Case Else If blnDoIt Then WriteLineReturns cpt strPreviousType = "" blnDoIt = False cpt = 10 End If If strLine = "1" Then fileOut.WriteLine strLine strReturnLine = "" Else fileOut.WriteLine strReturnLine & strLine strReturnLine = VbCrLf End If End Select Loop If blnDoIt Then WriteLineReturns cpt -1 fileIn.Close fileOut.Close Set fileIn = Nothing Set fileOut = Nothing Set fso = Nothing
Sub WriteLineReturns(intHowMany) Dim i For i = 1 To intHowMany fileOut.WriteLine Next End Sub
Bonjour,
J'ai une nouvelle condition a rajouter ...
Le fichier commence tjrs par des xxxxxxxxxxCAB, il y a tjrs un xxxxxxxxDET102 mais pas forcement des xxxxxxxxxDET101 après et c'est la le PB. Je souhaiterais 10 crlf en plus après le DET102 quand il n'y a pas de DET101.
Je peux réouvrir le fichier et le refermer une nouvelle fois pour cette nouvelle condition cela me pose pas de pb.
jbongran a écrit :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message
de news:mn.5a077d969c62814c.33554@NOSPAMlaposte.net... [...]
Bonjour,
Non c'est beaucoup plus compliqué que ca:
il faut mettre 1 seul vbcrlf si l'on rencontre un CAB ou un ROD en
position 23 lg 3
et 10 vbcrlf si c'est un DET ou MSG mais si il y a plusieur DT ou MSB
concécutif (par ex: pour 2 x DET101 à la suite il faut pas faire de
vbcrlf entre eux et aprés le dernier DET 101 mettre 8 vbcrlf).
merci encore
J'essaye de me rattraper ;-)
Option Explicit
Dim fso, fileIn, fileOut, strLine, strTemp, strType, strPreviousType
Dim cpt, strReturnLine, blnDoIt, strRL
cpt = 10
blnDoIt = False
strPreviousType = ""
strRL = VbCrLf
strReturnLine = ""
Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set fileIn = fso.OpenTextFile("e:testdgi.txt", 1, False, -2)
Set fileOut = fso.OpenTextFile("e:testdgi_out.txt", 2, True, -2)
Do Until fileIn.AtEndOfStream
strLine = Trim(fileIn.ReadLine)
strType = Mid(strLine, 28, 6)
Select Case Left(strType, 3)
Case "DET", "MSG"
blnDoIt = True
If strPreviousType = "" Then
strPreviousType = strType
fileOut.WriteLine strReturnLine & strLine
cpt = 9
Else
If strPreviousType = strType Then
fileOut.WriteLine strLine
cpt = cpt -1
Else
strPreviousType = strType
WriteLineReturns cpt
fileOut.WriteLine strLine
cpt = 9
End If
End If
Case Else
If blnDoIt Then
WriteLineReturns cpt
strPreviousType = ""
blnDoIt = False
cpt = 10
End If
If strLine = "1" Then
fileOut.WriteLine strLine
strReturnLine = ""
Else
fileOut.WriteLine strReturnLine & strLine
strReturnLine = VbCrLf
End If
End Select
Loop
If blnDoIt Then WriteLineReturns cpt -1
fileIn.Close
fileOut.Close
Set fileIn = Nothing
Set fileOut = Nothing
Set fso = Nothing
Sub WriteLineReturns(intHowMany)
Dim i
For i = 1 To intHowMany
fileOut.WriteLine
Next
End Sub
Bonjour,
J'ai une nouvelle condition a rajouter ...
Le fichier commence tjrs par des xxxxxxxxxxCAB, il y a tjrs un
xxxxxxxxDET102 mais pas forcement des xxxxxxxxxDET101 après et c'est la
le PB.
Je souhaiterais 10 crlf en plus après le DET102 quand il n'y a pas de
DET101.
Je peux réouvrir le fichier et le refermer une nouvelle fois pour cette
nouvelle condition cela me pose pas de pb.
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message de news: [...]
Bonjour,
Non c'est beaucoup plus compliqué que ca: il faut mettre 1 seul vbcrlf si l'on rencontre un CAB ou un ROD en position 23 lg 3 et 10 vbcrlf si c'est un DET ou MSG mais si il y a plusieur DT ou MSB concécutif (par ex: pour 2 x DET101 à la suite il faut pas faire de vbcrlf entre eux et aprés le dernier DET 101 mettre 8 vbcrlf).
merci encore
J'essaye de me rattraper ;-)
Option Explicit Dim fso, fileIn, fileOut, strLine, strTemp, strType, strPreviousType Dim cpt, strReturnLine, blnDoIt, strRL cpt = 10 blnDoIt = False strPreviousType = "" strRL = VbCrLf strReturnLine = "" Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set fileIn = fso.OpenTextFile("e:testdgi.txt", 1, False, -2) Set fileOut = fso.OpenTextFile("e:testdgi_out.txt", 2, True, -2) Do Until fileIn.AtEndOfStream strLine = Trim(fileIn.ReadLine) strType = Mid(strLine, 28, 6) Select Case Left(strType, 3) Case "DET", "MSG" blnDoIt = True If strPreviousType = "" Then strPreviousType = strType fileOut.WriteLine strReturnLine & strLine cpt = 9 Else If strPreviousType = strType Then fileOut.WriteLine strLine cpt = cpt -1 Else strPreviousType = strType WriteLineReturns cpt fileOut.WriteLine strLine cpt = 9 End If End If Case Else If blnDoIt Then WriteLineReturns cpt strPreviousType = "" blnDoIt = False cpt = 10 End If If strLine = "1" Then fileOut.WriteLine strLine strReturnLine = "" Else fileOut.WriteLine strReturnLine & strLine strReturnLine = VbCrLf End If End Select Loop If blnDoIt Then WriteLineReturns cpt -1 fileIn.Close fileOut.Close Set fileIn = Nothing Set fileOut = Nothing Set fso = Nothing
Sub WriteLineReturns(intHowMany) Dim i For i = 1 To intHowMany fileOut.WriteLine Next End Sub
Bonjour,
J'ai une nouvelle condition a rajouter ...
Le fichier commence tjrs par des xxxxxxxxxxCAB, il y a tjrs un xxxxxxxxDET102 mais pas forcement des xxxxxxxxxDET101 après et c'est la le PB. Je souhaiterais 10 crlf en plus après le DET102 quand il n'y a pas de DET101.
Je peux réouvrir le fichier et le refermer une nouvelle fois pour cette nouvelle condition cela me pose pas de pb.
Gilles LAURENT [MVP]
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message de news: | Bonjour,
Bonjour,
| J'ai une nouvelle condition a rajouter ... [...]
Ci-dessous une version alternative à celle de Jérôme intégrant la nouvelle condition. En espérant que cela répondra à votre besoin.
Usage : > type dgi.txt | cscript //nologo codesnippet.vbs>dgi_out.txt
--- CodeSnippet.vbs --- Set oRe=New RegExp: oRe.Pattern="((^1|DET|MSG)d{0,})" nMaxCrLf=9: nCrLf=0: sCode="1" aLines=Split(WScript.StdIn.ReadAll(), VBCrLf) For Each sLine In aLines If Not oRe.Test(sLine) Then WScript.Echo sLine & VBCrLf Else sNewCode=oRe.Execute(sLine)(0) If sCode<>sNewCode And sCode<>"1" Then If sCode="DET102" And sNewCode<>"DET101" Then nMaxCrLf For nIndex=1 To nMaxCrLf-nCrLf: WScript.Echo: Next WScript.Echo sLine nMaxCrLf=9: nCrLf=0 Else WScript.Echo sLine If sCode<>"1" Then nCrLf=nCrLf+1 End If sCode=sNewCode End If Next --- CodeSnippet.vbs ---
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:mn.79a37d96f97591fe.55474@NOSPAMlaposte.net
| Bonjour,
Bonjour,
| J'ai une nouvelle condition a rajouter ...
[...]
Ci-dessous une version alternative à celle de Jérôme intégrant la
nouvelle condition. En espérant que cela répondra à votre besoin.
Usage :
> type dgi.txt | cscript //nologo codesnippet.vbs>dgi_out.txt
--- CodeSnippet.vbs ---
Set oRe=New RegExp: oRe.Pattern="((^1|DET|MSG)d{0,})"
nMaxCrLf=9: nCrLf=0: sCode="1"
aLines=Split(WScript.StdIn.ReadAll(), VBCrLf)
For Each sLine In aLines
If Not oRe.Test(sLine) Then
WScript.Echo sLine & VBCrLf
Else
sNewCode=oRe.Execute(sLine)(0)
If sCode<>sNewCode And sCode<>"1" Then
If sCode="DET102" And sNewCode<>"DET101" Then nMaxCrLf
For nIndex=1 To nMaxCrLf-nCrLf: WScript.Echo: Next
WScript.Echo sLine
nMaxCrLf=9: nCrLf=0
Else
WScript.Echo sLine
If sCode<>"1" Then nCrLf=nCrLf+1
End If
sCode=sNewCode
End If
Next
--- CodeSnippet.vbs ---
--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message de news: | Bonjour,
Bonjour,
| J'ai une nouvelle condition a rajouter ... [...]
Ci-dessous une version alternative à celle de Jérôme intégrant la nouvelle condition. En espérant que cela répondra à votre besoin.
Usage : > type dgi.txt | cscript //nologo codesnippet.vbs>dgi_out.txt
--- CodeSnippet.vbs --- Set oRe=New RegExp: oRe.Pattern="((^1|DET|MSG)d{0,})" nMaxCrLf=9: nCrLf=0: sCode="1" aLines=Split(WScript.StdIn.ReadAll(), VBCrLf) For Each sLine In aLines If Not oRe.Test(sLine) Then WScript.Echo sLine & VBCrLf Else sNewCode=oRe.Execute(sLine)(0) If sCode<>sNewCode And sCode<>"1" Then If sCode="DET102" And sNewCode<>"DET101" Then nMaxCrLf For nIndex=1 To nMaxCrLf-nCrLf: WScript.Echo: Next WScript.Echo sLine nMaxCrLf=9: nCrLf=0 Else WScript.Echo sLine If sCode<>"1" Then nCrLf=nCrLf+1 End If sCode=sNewCode End If Next --- CodeSnippet.vbs ---
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr
---DGI972---
Gilles LAURENT [MVP] a écrit :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message de news:
Bonjour,
Bonjour,
J'ai une nouvelle condition a rajouter ...
[...]
Ci-dessous une version alternative à celle de Jérôme intégrant la nouvelle condition. En espérant que cela répondra à votre besoin.
Usage : > type dgi.txt | cscript //nologo codesnippet.vbs>dgi_out.txt
--- CodeSnippet.vbs --- Set oRe=New RegExp: oRe.Pattern="((^1|DET|MSG)d{0,})" nMaxCrLf=9: nCrLf=0: sCode="1" aLines=Split(WScript.StdIn.ReadAll(), VBCrLf) For Each sLine In aLines If Not oRe.Test(sLine) Then WScript.Echo sLine & VBCrLf Else sNewCode=oRe.Execute(sLine)(0) If sCode<>sNewCode And sCode<>"1" Then If sCode="DET102" And sNewCode<>"DET101" Then nMaxCrLf For nIndex=1 To nMaxCrLf-nCrLf: WScript.Echo: Next WScript.Echo sLine nMaxCrLf=9: nCrLf=0 Else WScript.Echo sLine If sCode<>"1" Then nCrLf=nCrLf+1 End If sCode=sNewCode End If Next --- CodeSnippet.vbs ---
AAHhhhhhhhh berk en cscript Les accents sont mal convertis. :'(
Gilles LAURENT [MVP] a écrit :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:mn.79a37d96f97591fe.55474@NOSPAMlaposte.net
Bonjour,
Bonjour,
J'ai une nouvelle condition a rajouter ...
[...]
Ci-dessous une version alternative à celle de Jérôme intégrant la
nouvelle condition. En espérant que cela répondra à votre besoin.
Usage :
> type dgi.txt | cscript //nologo codesnippet.vbs>dgi_out.txt
--- CodeSnippet.vbs ---
Set oRe=New RegExp: oRe.Pattern="((^1|DET|MSG)d{0,})"
nMaxCrLf=9: nCrLf=0: sCode="1"
aLines=Split(WScript.StdIn.ReadAll(), VBCrLf)
For Each sLine In aLines
If Not oRe.Test(sLine) Then
WScript.Echo sLine & VBCrLf
Else
sNewCode=oRe.Execute(sLine)(0)
If sCode<>sNewCode And sCode<>"1" Then
If sCode="DET102" And sNewCode<>"DET101" Then nMaxCrLf
For nIndex=1 To nMaxCrLf-nCrLf: WScript.Echo: Next
WScript.Echo sLine
nMaxCrLf=9: nCrLf=0
Else
WScript.Echo sLine
If sCode<>"1" Then nCrLf=nCrLf+1
End If
sCode=sNewCode
End If
Next
--- CodeSnippet.vbs ---
AAHhhhhhhhh berk en cscript
Les accents sont mal convertis.
:'(
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message de news:
Bonjour,
Bonjour,
J'ai une nouvelle condition a rajouter ...
[...]
Ci-dessous une version alternative à celle de Jérôme intégrant la nouvelle condition. En espérant que cela répondra à votre besoin.
Usage : > type dgi.txt | cscript //nologo codesnippet.vbs>dgi_out.txt
--- CodeSnippet.vbs --- Set oRe=New RegExp: oRe.Pattern="((^1|DET|MSG)d{0,})" nMaxCrLf=9: nCrLf=0: sCode="1" aLines=Split(WScript.StdIn.ReadAll(), VBCrLf) For Each sLine In aLines If Not oRe.Test(sLine) Then WScript.Echo sLine & VBCrLf Else sNewCode=oRe.Execute(sLine)(0) If sCode<>sNewCode And sCode<>"1" Then If sCode="DET102" And sNewCode<>"DET101" Then nMaxCrLf For nIndex=1 To nMaxCrLf-nCrLf: WScript.Echo: Next WScript.Echo sLine nMaxCrLf=9: nCrLf=0 Else WScript.Echo sLine If sCode<>"1" Then nCrLf=nCrLf+1 End If sCode=sNewCode End If Next --- CodeSnippet.vbs ---
AAHhhhhhhhh berk en cscript Les accents sont mal convertis. :'(
Gilles LAURENT [MVP]
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message de news: | | AAHhhhhhhhh berk en cscript | Les accents sont mal convertis. | :'(
Je pense avoir répondu au cahier des charges ;-) Ils sont où les accents ?
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:mn.8be17d9639bb7b2d.33554@NOSPAMlaposte.net
|
| AAHhhhhhhhh berk en cscript
| Les accents sont mal convertis.
| :'(
Je pense avoir répondu au cahier des charges ;-)
Ils sont où les accents ?
--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message de news: | | AAHhhhhhhhh berk en cscript | Les accents sont mal convertis. | :'(
Je pense avoir répondu au cahier des charges ;-) Ils sont où les accents ?
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr
---DGI972---
Gilles LAURENT [MVP] a écrit :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message de news:
AAHhhhhhhhh berk en cscript Les accents sont mal convertis. :'(
Je pense avoir répondu au cahier des charges ;-) Ils sont où les accents ?
Pour des raisons de confidentialités j'ai tronqué le véritable fichier. Et ce n'est que la partie visible de l'iceberg, je fais une traitement avant et aprés le fait de faire 10 crlf selon les différentes conditions.
Gilles LAURENT [MVP] a écrit :
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:mn.8be17d9639bb7b2d.33554@NOSPAMlaposte.net
AAHhhhhhhhh berk en cscript
Les accents sont mal convertis.
:'(
Je pense avoir répondu au cahier des charges ;-)
Ils sont où les accents ?
Pour des raisons de confidentialités j'ai tronqué le véritable fichier.
Et ce n'est que la partie visible de l'iceberg, je fais une traitement
avant et aprés le fait de faire 10 crlf selon les différentes
conditions.
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message de news:
AAHhhhhhhhh berk en cscript Les accents sont mal convertis. :'(
Je pense avoir répondu au cahier des charges ;-) Ils sont où les accents ?
Pour des raisons de confidentialités j'ai tronqué le véritable fichier. Et ce n'est que la partie visible de l'iceberg, je fais une traitement avant et aprés le fait de faire 10 crlf selon les différentes conditions.
Gilles LAURENT [MVP]
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message de news:
Bonjour,
| Pour des raisons de confidentialités j'ai tronqué le véritable | fichier. Et ce n'est que la partie visible de l'iceberg, je fais une | traitement avant et aprés le fait de faire 10 crlf selon les | différentes conditions.
Pour conserver les caractères accentués lors du traitement tout en restant dans la même philosophie, c'est à dire en ligne de commande en s'affranchissant du FSO, vous pouvez procéder de la manière suivante :
--- batch.cmd --- @echo off type dgi.txt | cscript //nologo codesnippet.vbs>dgi_temp.txt cmd /u /c type dgi_temp.txt>dgi_out.txt del dgi_temp.txt --- batch.cmd ---
Note: Le fichier de sortie dgi_out.txt sera au format Unicode
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le
message de
news:mn.8cfa7d963ce81d2d.55474@NOSPAMlaposte.net
Bonjour,
| Pour des raisons de confidentialités j'ai tronqué le véritable
| fichier. Et ce n'est que la partie visible de l'iceberg, je fais une
| traitement avant et aprés le fait de faire 10 crlf selon les
| différentes conditions.
Pour conserver les caractères accentués lors du traitement tout en
restant dans la même philosophie, c'est à dire en ligne de commande en
s'affranchissant du FSO, vous pouvez procéder de la manière suivante :
--- batch.cmd ---
@echo off
type dgi.txt | cscript //nologo codesnippet.vbs>dgi_temp.txt
cmd /u /c type dgi_temp.txt>dgi_out.txt
del dgi_temp.txt
--- batch.cmd ---
Note: Le fichier de sortie dgi_out.txt sera au format Unicode
--
Gilles LAURENT
MVP Windows Server - Admin Frameworks
http://glsft.free.fr
"---DGI972---" <gilles.dermigny@*NO SPAM*laposte.net> a écrit dans le message de news:
Bonjour,
| Pour des raisons de confidentialités j'ai tronqué le véritable | fichier. Et ce n'est que la partie visible de l'iceberg, je fais une | traitement avant et aprés le fait de faire 10 crlf selon les | différentes conditions.
Pour conserver les caractères accentués lors du traitement tout en restant dans la même philosophie, c'est à dire en ligne de commande en s'affranchissant du FSO, vous pouvez procéder de la manière suivante :
--- batch.cmd --- @echo off type dgi.txt | cscript //nologo codesnippet.vbs>dgi_temp.txt cmd /u /c type dgi_temp.txt>dgi_out.txt del dgi_temp.txt --- batch.cmd ---
Note: Le fichier de sortie dgi_out.txt sera au format Unicode
-- Gilles LAURENT MVP Windows Server - Admin Frameworks http://glsft.free.fr