Pb avec EOF dans boucle

Pb avec EOF dans boucle - VB/VBA/VBS - Programmation

Marsh Posté le 19-01-2006 à 21:38:06    

Bonjour
voia le bout de code qui pose probleme :
 

Citation :

   Close #1, #2, #3
 
    Open "c:/bateau.txt" For Output As #1
    Open "c:/ttt.txt" For Input As #2
   While Not EOF(2) = True
    Input #2, truc
    Print #1, truc;
    Print #1, " ";
    Wend:
Close #1, #2, #3
 
On Error GoTo erreurboucle:
    Open "c:/bateau.txt" For Input As #1
    Open "c:/ttt.txt" For Output As 2
   While Not EOF(1) = True
   Input #1, truc
   Print #2, truc;
    Wend:
erreurboucle:
Close #1, #2, #3


 
Je coince souvent mais pas tout le temps sur la ligne en gras : VB me dit fin de fichier, erreur
 
Question : comment placer mon ON ERROR ou comment faire une boucle qui passe ?
 
Merci


---------------
http://www.ypikay.com
Reply

Marsh Posté le 19-01-2006 à 21:38:06   

Reply

Marsh Posté le 20-01-2006 à 08:51:43    

Il manque un "#" devant le 2 du open de ta boucle On Error...
Peut être ce n'est que ça...


---------------
Le savoir est une des rares choses qui augmente quand on le partage, n'hésitons pas !
Reply

Marsh Posté le 20-01-2006 à 12:08:32    

oui le # est enlevé par VB mais non c'est pas ça, il me marque l'erreur une fois de temps en temps...
Sinon la syntaxe, on est d'accord, elle est correcte ?
Le soucis c'est que le ON ERROR ne marche pas et ça me fait perdre des heures de traitement à chaque fois...
à part wend et on error, que pourraisd je utiliser pour parer à ce plantage ?


---------------
http://www.ypikay.com
Reply

Marsh Posté le 20-01-2006 à 17:07:48    

Salut,  
 
essaye d'enlever les deux points (:) après le on error.
ensuite retire le "=true" après while not eof(1)
 
ensuite, as tu défini truc quelque part ? ex truc = str(15)
L'erreur ne viendrait pas du fait que la longueur restant dans le fichier est inférieure à la longueur que tu essaye de lire
 
essaye de rajouter ça à la fin de ta boucle
 
if (lof(1)-loc(1)<len(truc) then
truc = str(lof(1)-loc(1))
end if
 
ce qui te permet d'attribuer à la taille du buffer la longueur restant dans le fichier.
 
sinon, charge la totalité du fichier dans le buffer. Normalement ça pose pas de problème car tu peut mettre quasiment 1Go dans un buffer
 
dim buffer as string
buffer = lof(1)
input #1,buffer
 
 
@+++

Reply

Marsh Posté le 20-01-2006 à 17:13:06    

oulà buffer = str(lof(1)).
 
Fatigué moa

Reply

Marsh Posté le 20-01-2006 à 18:26:35    

ladislas2609 a écrit :

Salut,  
 
essaye d'enlever les deux points (:) après le on error.
ensuite retire le "=true" après while not eof(1)
 
ensuite, as tu défini truc quelque part ? ex truc = str(15)
L'erreur ne viendrait pas du fait que la longueur restant dans le fichier est inférieure à la longueur que tu essaye de lire
 
essaye de rajouter ça à la fin de ta boucle
 
if (lof(1)-loc(1)<len(truc) then
truc = str(lof(1)-loc(1))
end if
 
ce qui te permet d'attribuer à la taille du buffer la longueur restant dans le fichier.
 
sinon, charge la totalité du fichier dans le buffer. Normalement ça pose pas de problème car tu peut mettre quasiment 1Go dans un buffer
 
dim buffer as string
buffer = lof(1)
input #1,buffer
 
 
@+++


 
j'ai posé un compteur à l'intérieur de la boucle mais je crois que ca se produit quand le premier fichier lu est vide...
pour le moment j'attends qu'il plante pour lire le compteur...


---------------
http://www.ypikay.com
Reply

Marsh Posté le 20-01-2006 à 21:02:22    

truc est défini comment ?  
C'est quel type de variable ? Une chaîne, un integer, ?? ?
 
S'il bloque sur le ligne en gras, c'est que le test eof() n'est pas FALSE sinon, passerait.
Rq : if not a = B then, on sait pas trop quoi lire, if (not (a = B)) then est plus sûr. Voire if (a <> B) then.
 
Les trucs à lire, ce sont des nombres, bouts de texte ? Line input est peut-être plus "flexible", mais si ce sont des nombres à lire, ça complique (faut découper, line input lit toute la ligne en bloc)

Reply

Marsh Posté le 20-01-2006 à 21:10:50    

Ah... j'ai trouvé. ça y est il a planté...
si il ne commence qu'une boucle dans le premier fichier c'est que ce fichier est vide:
premiere boucle - j'incremente mon compteur (ici xyza) de 0 à 1
valeur de compteur =1
or je colle le compteur avant qu'il tente de lire le fichier.
 
quand il attaque l'écriture du deuxieme fichier,
si le compteur xyza = 1 alors je le sors de la boucle...
ce qui donne :
 

Citation :

   Open "c:/bateau.txt" For Output As #1
    Open "c:/ttt.txt" For Input As #2
   While Not EOF(2) = True
   xyza = xyza + 1
    Input #2, truc
    Print #1, truc;
    Print #1, " ";
    Wend:
Close #1, #2,
If xyza = 1 Then GoTo erreurboucle:
 
    Open "c:/bateau.txt" For Input As #1
    Open "c:/ttt.txt" For Output As 2
   While Not EOF(1) = True
    Input #1, truc
    Print #2, truc;
    Wend:
erreurboucle:
Close #1, #2,


 
En tout cas merci beaucoup à tous


---------------
http://www.ypikay.com
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed