OVH Cloud OVH Cloud

Erreur : L'entrée dépasse la fin du fichier

2 réponses
Avatar
----DGI972---
Bonjour,
J'ai réalisé un petit Script qui lit un fichier déja trié en entrée (environ
35 000 lignes) pour fabriquer des fichiers en sortie par block de 9000
lignes.
Le nom des fichiers de sortie s'incréménte aussi.
Le Script fonctionne mais, il me créé 4 fichier tbrib1, tbrib2... tbrib4
mais à la fin de l'exécution du Script j'ai le message d'erreur suivant:
Erreur : L'entrée dépasse la fin du fichier
à la ligne: fileOut.WriteLine fileIn.ReadLine.
Je n'arrive pas à voir d'ou viens le Pb. Tempo, délais ???
Je suis si proche de la fin de mon Pb !!!

Voiçi les quelques lignes de mon Script:

Option Explicit
Dim fso, objShell, CPT, ID, fileIn, ENT, fileOut, Sline,StrIn
Set fso = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")

ID = 1
CPT = 1
Set fileIn = fso.OpenTextFile("C:\SBA_MAR\PROGRAM\tbrib0s", 1, True)
Set fileOut = fso.OpenTextFile("C:\SBA_MAR\PROGRAM\tbrib"&ID&"s", 2,
True)'tbrib1s pour les 9000 premières lignes

Do While Not fileIn.AtEndOfStream
ENT="TBRIB"&ID&" TABL T" 'Fabrication de l'entête du fichier TBRIB1
TAB T
fileOut.WriteLine ENT

Do UNTIL CPT = 9000
fileOut.WriteLine fileIn.ReadLine
CPT = CPT + 1
Loop

fileOut.Close
CPT = 1
ID = ID+1
Set fileOut = fso.OpenTextFile("C:\SBA_MAR\PROGRAM\tbrib"&ID&"s", 2, True)
Loop

fileOut.Close

Merci d'avance

2 réponses

Avatar
Fred
Dans son message
----DGI972--- nous dit :

Bonjour,
J'ai réalisé un petit Script qui lit un fichier déja trié en entrée
(environ 35 000 lignes) pour fabriquer des fichiers en sortie par
block de 9000 lignes.
Le nom des fichiers de sortie s'incréménte aussi.
Le Script fonctionne mais, il me créé 4 fichier tbrib1, tbrib2...
tbrib4 mais à la fin de l'exécution du Script j'ai le message
d'erreur suivant: Erreur : L'entrée dépasse la fin du fichier
à la ligne: fileOut.WriteLine fileIn.ReadLine.
Je n'arrive pas à voir d'ou viens le Pb. Tempo, délais ???
Je suis si proche de la fin de mon Pb !!!

Voiçi les quelques lignes de mon Script:

Option Explicit
Dim fso, objShell, CPT, ID, fileIn, ENT, fileOut, Sline,StrIn
Set fso = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")

ID = 1
CPT = 1
Set fileIn = fso.OpenTextFile("C:SBA_MARPROGRAMtbrib0s", 1, True)
Set fileOut = fso.OpenTextFile("C:SBA_MARPROGRAMtbrib"&ID&"s", 2,
True)'tbrib1s pour les 9000 premières lignes

Do While Not fileIn.AtEndOfStream
ENT="TBRIB"&ID&" TABL T" 'Fabrication de l'entête du fichier
TBRIB1 TAB T
fileOut.WriteLine ENT

Do UNTIL CPT = 9000
fileOut.WriteLine fileIn.ReadLine
CPT = CPT + 1
Loop

fileOut.Close
CPT = 1
ID = ID+1
Set fileOut = fso.OpenTextFile("C:SBA_MARPROGRAMtbrib"&ID&"s", 2,
True) Loop

fileOut.Close

Merci d'avance


Bonsoir,
4 * 9000 = 36000 !
N'est-ce pas la clé du problème ?

Tu t'exposes à ce genre de difficulté dès lors que tu imbriques des boucles.
Ton FileIn.AtEndOfStream n'est évalué que toutes les 9000 lignes.
Autant dire qu'il est peu efficace.

Tente quelque chose du style

Cpt = 0 : Id = 1
Set fileIn = fso.OpenTextFile("C:SBA_MARPROGRAMtbrib0s", 1, True)
While Not FileIn.AtEndOfStream
If Cpt=0 Then
Set fileOut = fso.OpenTextFile("C:SBA_MARPROGRAMtbrib"&Id&"s", 2,
True)
'Ecriture de l'en-tête
Ent = "TBRIB" & Id & " TABL T"
fileOut.WriteLine Ent
End If

FileOut.WriteLine FileIn.ReadLine
Cpt = Cpt + 1

If Cpt = 9000 Then
Cpt = 0
Id = Id + 1
fileOut.Close
End If
Wend

If Cpt <> 0 Then fileOut.Close
fileIn.Close


Avec cet algorithme, 1 tour de boucle = 1 ligne.
Attention : non testé, mais cela ne devrait pas être très loin de la
solution.

--
Fred

Avatar
---DGI972---
ET EN PLUS CELA FONCTIONNE !!!
Merci je vais pouvoir me coucher tôt ce soir


--

"Fred" a écrit dans le message de news:

Dans son message
----DGI972--- nous dit :

Bonjour,
J'ai réalisé un petit Script qui lit un fichier déja trié en entrée
(environ 35 000 lignes) pour fabriquer des fichiers en sortie par
block de 9000 lignes.
Le nom des fichiers de sortie s'incréménte aussi.
Le Script fonctionne mais, il me créé 4 fichier tbrib1, tbrib2...
tbrib4 mais à la fin de l'exécution du Script j'ai le message
d'erreur suivant: Erreur : L'entrée dépasse la fin du fichier
à la ligne: fileOut.WriteLine fileIn.ReadLine.
Je n'arrive pas à voir d'ou viens le Pb. Tempo, délais ???
Je suis si proche de la fin de mon Pb !!!

Voiçi les quelques lignes de mon Script:

Option Explicit
Dim fso, objShell, CPT, ID, fileIn, ENT, fileOut, Sline,StrIn
Set fso = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")

ID = 1
CPT = 1
Set fileIn = fso.OpenTextFile("C:SBA_MARPROGRAMtbrib0s", 1, True)
Set fileOut = fso.OpenTextFile("C:SBA_MARPROGRAMtbrib"&ID&"s", 2,
True)'tbrib1s pour les 9000 premières lignes

Do While Not fileIn.AtEndOfStream
ENT="TBRIB"&ID&" TABL T" 'Fabrication de l'entête du fichier
TBRIB1 TAB T
fileOut.WriteLine ENT

Do UNTIL CPT = 9000
fileOut.WriteLine fileIn.ReadLine
CPT = CPT + 1
Loop

fileOut.Close
CPT = 1
ID = ID+1
Set fileOut = fso.OpenTextFile("C:SBA_MARPROGRAMtbrib"&ID&"s", 2,
True) Loop

fileOut.Close

Merci d'avance


Bonsoir,
4 * 9000 = 36000 !
N'est-ce pas la clé du problème ?

Tu t'exposes à ce genre de difficulté dès lors que tu imbriques des
boucles.
Ton FileIn.AtEndOfStream n'est évalué que toutes les 9000 lignes.
Autant dire qu'il est peu efficace.

Tente quelque chose du style

Cpt = 0 : Id = 1
Set fileIn = fso.OpenTextFile("C:SBA_MARPROGRAMtbrib0s", 1, True)
While Not FileIn.AtEndOfStream
If Cpt=0 Then
Set fileOut = fso.OpenTextFile("C:SBA_MARPROGRAMtbrib"&Id&"s",
2, True)
'Ecriture de l'en-tête
Ent = "TBRIB" & Id & " TABL T"
fileOut.WriteLine Ent
End If

FileOut.WriteLine FileIn.ReadLine
Cpt = Cpt + 1

If Cpt = 9000 Then
Cpt = 0
Id = Id + 1
fileOut.Close
End If
Wend

If Cpt <> 0 Then fileOut.Close
fileIn.Close


Avec cet algorithme, 1 tour de boucle = 1 ligne.
Attention : non testé, mais cela ne devrait pas être très loin de la
solution.

--
Fred