Petit soucis avec un message "input past end of file"
cs_droopyv
Messages postés20Date d'inscriptionlundi 27 janvier 2003StatutMembreDernière intervention27 mars 2009
-
29 août 2007 à 12:17
cs_droopyv
Messages postés20Date d'inscriptionlundi 27 janvier 2003StatutMembreDernière intervention27 mars 2009
-
30 août 2007 à 13:22
j'ai fait un script examine deux fichiers avec des nombres a l'interieur, et je créé un fichier excel et je classe ces nombres si il sont egaux ou pas. Tous ce passe bien mais quand mon fichier dépasse 7000 lignes , j'ai ce fameux message qui apparait "input past end of file" et la je ne vois pas pourquoi pourriez vous m'aider.
Quand je le fais avec 100 ou 200 lignes j'ai pas de soucis mais peut etre que c'est du au trop grand nombre de lignes ??
Merci beaucoup
Prevenez moi si vous avez besoin d'informations
A voir également:
Petit soucis avec un message "input past end of file"
cs_droopyv
Messages postés20Date d'inscriptionlundi 27 janvier 2003StatutMembreDernière intervention27 mars 2009 29 août 2007 à 14:17
ok voila mon code en complet
'On error Resume Next
Set Fso = CreateObject("Scripting.FileSystemObject")
'Lien vers les deux fichiers examinés
Set Txt3 = Fso.OpenTextFile("F:\test\download_03\resultat_d3.txt", 1)
Set Txt4 = Fso.OpenTextFile("F:\test\download_04\resultat_d4.txt", 1)
Set xlapp = CreateObject("Excel.Application")
'variables
Dim xlapp ' As Excel.Application
Dim classeur ' As Excel.Workbook
Dim feuille ' As Excel.Worksheet
Dim feuille2 ' As Excel.Worksheet
'Compteur pour les lignes d'excel commencent à partir des lignes 2
cpt=2
'classeur non visible a l'ecran
xlapp.Visible = False
'definition d'un classeur et deux feuilles
Set classeur = xlapp.Workbooks.add
Set feuille1 = classeur.WorkSheets(1)
Set feuille2 = classeur.WorkSheets(2)
'personnalistion des deux feuilles
feuille1.name = ("Fichiers non ok")
feuille1.Range("A1") = "Md5 de download 3"
feuille1.Range("B1") = "Md5 de download 4"
feuille1.Range("C1") = "fichier non ok"
feuille1.Range("D1") = "nom fichier download 3"
feuille1.Range("E1") = "nom fichier download 4"
'boucle qui examine ligne par ligne, les deix fichiers
Do Until txt3.AtEndOfStream and txt4.AtEndOfStream
entier_3 = txt3.ReadLine()
entier_4 = txt4.readline()
'nombre de caractere total pour le serveur3 et serveur4
total3 = len(entier_3)
total4 = len(entier_4)
'Prendre les 34 caracteres en partant de gauche
gauch3 = left(entier_3, 34)
gauch4 = left(entier_4, 34)
'calcul du nombre de caractere pour la droite
calcul3 = (total3 - 34)
calcul4 = (total4 - 34)
'prendre les X caracteres de droite
droit3 = right(entier_3, calcul3)
droit4 = right(entier_4, calcul4)
'regarde si les 34 caracteres de gauche du serveur3 et serveur 4 sont egaux ou pas
if gauch3 = gauch4 then
feuille2.Range("A" & cpt) = ""&gauch3
feuille2.Range("B" & cpt) = ""&gauch4
'Mets la couleur bleue sur les lignes ok
feuille2.Range("c" & cpt).Interior.ColorIndex = 5
feuille2.RAnge("C" & cpt) = "ok"
feuille2.Range("D" & cpt) = ""&droit3
feuille2.Range("E" & cpt) = ""&droit4
'Mets automatiquement les colonnes a l abonne taille
feuille2.Columns.AutoFit
else
feuille1.Columns.AutoFit
feuille1.Range("A" & cpt) = "" & gauch3
feuille1.Range("B" & cpt) = "" & gauch4
'Mets la couneur rouge sur les lignes non ok
feuille1.Range("c" & cpt).Interior.ColorIndex = 3
feuille1.Range("C" & cpt) = "pas ok"
feuille1.Range("D" & cpt) = ""&droit3
feuille1.Range("E" & cpt) = ""&droit4
end if
'compteur de ligne
cpt=cpt+1
'msgbox "clipclop"
loop
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 29 août 2007 à 19:29
Salut
Dans ton Do-Loop, tu testes si tu es arrivé à la fin des fichiers.
Si un des fichiers comportent moins de lignes que l'autre, c'est le clash :
Do Until txt3.AtEndOfStream and txt4.AtEndOfStream
signifie qu'il faut que les deux fichiers arrivent à la fin pour stopper la boucle.
Il faut donc détecter la fin d'un des fichiers :
Do Until txt3.AtEndOfStream OR txt4.AtEndOfStream
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 29 août 2007 à 19:56
Bonsoir à tous,
Bonsoir Jack,
Oui, tu as raison pour le nombre de ligne.
De même, il faut rajouter un test pour le nombre de caractères par ligne.
'nombre de caractere total pour le serveur3 et serveur4
total3 = len(entier_3)
total4 = len(entier_4)
If total3 >= 34 And total4 >= 34 Then
Je teste at home.
Les résultats sont surprenants !!!
Dans l'exemple ci-dessous, à l'affichage du msgbox,
je modifie 2 lignes du fichier2
- une ligne de la partie droite;
- une ligne de la partie gauche.
Résultat, dans le xls, seule la ligne modifiée à gauche est écrite dans l'onglet "fichiers non ok".
Sur un fichier d'une centaine de lignes, c'est rapide. Par contre, si 20000 lignes, ça laisse le temps
de se servir et de boire un apéro.
Salut et bonne soirée.
jean-marc
Dim objFso, objTextStream
Dim fichier1, fichier2, ligne, i
fichier1 = "D:\SCRIPTS\Fichiers\fichier1.txt"
fichier2 = "D:\SCRIPTS\Fichiers\fichier2.txt"
ligne = "partie_gauche_123456789101112131415__fichier_123456789101112131415_partie_droite"
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objTextStream = objFso.OpenTextFile("D:\SCRIPTS\Fichiers\fichier1.txt", 2, True)
For i = 1 To 20
objTextStream.Write "ligne" & i &Space(5) & ligne &vbcrlf
Next
objTextStream.Close
objFso.CopyFile fichier1, fichier2, True
Set objTextStream = Nothing
MsgBox "avant de répondre ok à ce msgbox, modifiez quelques lignes du fichier2" &vbCrLf&_
"et enregistrer ce fichier"
Dim Txt3, Txt4, resultat
'Lien vers les deux fichiers examinés
Set Txt3 = objFso.OpenTextFile("D:\SCRIPTS\Fichiers\fichier1.txt", 1)
Set Txt4 = objFso.OpenTextFile("D:\SCRIPTS\Fichiers\fichier2.txt", 1)
resultat = "D:\SCRIPTS\Fichiers\md5_xls.xls"
'variables
Dim xlapp ' As Excel.Application
Dim classeur ' As Excel.Workbook
Dim feuille1 ' As Excel.Worksheet
Dim feuille2 ' As Excel.Worksheet
Set xlapp = CreateObject("Excel.Application")
'Compteur pour les lignes d'excel commencent à partir des lignes 2
cpt=2
'classeur non visible a l'ecran
xlapp.Visible = False
'definition d'un classeur et deux feuilles
Set classeur = xlapp.Workbooks.add
Set feuille1 = classeur.WorkSheets(1)
Set feuille2 = classeur.WorkSheets(2)
'personnalistion des deux feuilles
feuille1.name = ("Fichiers non ok")
feuille1.Range("A1") = "Md5 de download 3"
feuille1.Range("B1") = "Md5 de download 4"
feuille1.Range("C1") = "fichier non ok"
feuille1.Range("D1") = "nom fichier download 3"
feuille1.Range("E1") = "nom fichier download 4"
'boucle qui examine ligne par ligne, les deux fichiers
Do Until txt3.AtEndOfStream and txt4.AtEndOfStream
entier_3 = txt3.ReadLine()
entier_4 = txt4.readline()
'nombre de caractere total pour le serveur3 et serveur4
total3 = len(entier_3)
total4 = len(entier_4)
If total3 >= 34 And total4 >= 34 Then
'Prendre les 34 caracteres en partant de gauche
gauch3 = left(entier_3, 34)
gauch4 = left(entier_4, 34)
'calcul du nombre de caractere pour la droite
calcul3 = (total3 - 34)
calcul4 = (total4 - 34)
'regarde si les 34 caracteres de gauche du serveur3 et serveur 4 sont egaux ou pas
If gauch3 = gauch4 then
feuille2.Range("A" & cpt) = ""&gauch3
feuille2.Range("B" & cpt) = ""&gauch4
'Mets la couleur bleue sur les lignes ok
feuille2.Range("c" & cpt).Interior.ColorIndex = 5
feuille2.RAnge("C" & cpt) = "ok"
feuille2.Range("D" & cpt) = ""&droit3
feuille2.Range("E" & cpt) = ""&droit4
'Mets automatiquement les colonnes à la bonne taille
feuille2.Columns.AutoFit
Else
feuille1.Range("A" & cpt) = "" & gauch3
feuille1.Range("B" & cpt) = "" & gauch4
'Mets la couleur rouge sur les lignes non ok
feuille1.Range("c" & cpt).Interior.ColorIndex = 3
feuille1.Range("C" & cpt) = "pas ok"
feuille1.Range("D" & cpt) = ""&droit3
feuille1.Range("E" & cpt) = ""&droit4
feuille1.Columns.AutoFit
end if
Set fso = CreateObject("Scripting.FileSystemObject")
Set ObjTextStream = Fso.OpenTextFile(Path & Fic1, 1)
Do While Not ObjTextStream.AtEndOfStream
strtmp1 = split(ObjTextStream.ReadLine, vbLf)
For i = 0 to Ubound(strtmp1)
imax = imax + 1
ReDim Preserve Tableau1(1, imax)
Tableau1(1, imax) = strtmp1(i)
Next
Loop
ObjTextStream.Close
imax = 0
Set ObjTextStream = Fso.OpenTextFile(Path & Fic2, 1)
Do While Not ObjTextStream.AtEndOfStream
strtmp2 = split(ObjTextStream.ReadLine, vbLf)
For i = 0 to Ubound(strtmp2)
imax = imax + 1
ReDim Preserve Tableau2(1, imax)
Tableau2(1, imax) = strtmp2(i)
Next
Loop
ObjTextStream.Close
For r = 1 To imax
If Tableau1(1, r) <> Tableau2(1, r) Then
MsgBox "La ligne " & r & " est différente entre les 2 fichiers" &vbCrLf&vbCrLf&_
"1er tableau " & vbCrLf& Tableau1(1, r) &vbCrLf&vbCrLf&_
"2ème tableau " & vbCrLf& Tableau2(1, r)
End If
Next
Set Fso = Nothing
Set ObjTextStream = Nothing
cs_droopyv
Messages postés20Date d'inscriptionlundi 27 janvier 2003StatutMembreDernière intervention27 mars 2009 30 août 2007 à 13:22
Merci a vous
Je prends et je teste pour voir l emieux pour moi , car j'atteins les 8000 lignes ( qui sont le resultat d'un calcul de crc de fichier video) donc je pense que ds quelques mois nous allons atteindre les 15000 voir plus, donc je fair attention aussi pour le temps.