Forum Liberty Basic France
• Index
Code VB :
for x=1 to 100000 on error goto [err] read t$ a=a+1 next x wait [err] print a wait data "a","z","e","r","t","y","u","i","o","p"
____________________
Roro
Roro
Bien vu, mais il faut savoir, si je ne m'abuse, que le programme doit prendre en charge la totalité des erreurs possibles et pas seulement le past end of data, ça peut compliquer la tâche.
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Christophe:
Pas de soucis, on peut mettre autant de "on error" qu'on veut, en les traitant séparément.
Bien vu, mais il faut savoir, si je ne m'abuse, que le programme doit prendre en charge la totalité des erreurs possibles et pas seulement le past end of data, ça peut compliquer la tâche.
Pas de soucis, on peut mettre autant de "on error" qu'on veut, en les traitant séparément.
____________________
Roro
Roro
Oui, ça en fait beaucoup quand même, mais c'est pas infaisable, on devrait pouvoir s'arranger pour fermer correctement un programme si on rencontre un code d'erreur qu'on n'attendait pas
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Christophe:
Ah ben non alors...! Tout doit être sous contrôle, pas "d'inattendu" !
Mais pourquoi: "Beaucoup" ?
Oui, ça en fait beaucoup quand même, mais c'est pas infaisable, on devrait pouvoir s'arranger pour fermer correctement un programme si on rencontre un code d'erreur qu'on n'attendait pas
Ah ben non alors...! Tout doit être sous contrôle, pas "d'inattendu" !
Mais pourquoi: "Beaucoup" ?
____________________
Roro
Roro
Si tu veux utiliser un "on error goto" pour traiter un type particulier d'erreur, tu es obligé d'élaborer une stratégie pour toutes les autres erreurs d'exécution. Dans ton exemple j'ai rajouté une division par zéro, erreur tout à fait inattendue dans la lecture des datas, et elle est bel et bien détectée, puisque [err] affiche 1, et plus 10, valeur provoquant le past end of data :
Code VB :
Donc si tu utilises l'on error goto pour compter des datas, il faut que tu saches quoi faire si c'est une autre erreur qui déclenche le branchement à ta routine d'erreur .
Code VB :
for x=1 to 100000 on error goto [err] read t$ a=a+1 b=a/(x-1) next x wait [err] print a wait data "a","z","e","r","t","y","u","i","o","p"
Donc si tu utilises l'on error goto pour compter des datas, il faut que tu saches quoi faire si c'est une autre erreur qui déclenche le branchement à ta routine d'erreur .
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Code VB :
for x=1 to 100000 on error goto [err] read t$ a=a+1 b=a/(x-1) next x wait [err] print a if a=1 then notice, "Y a un os dans la procédure" wait data "a","z","e","r","t","y","u","i","o","p"
____________________
Roro
Roro
par exemple 
Y'a plus qu'à faire un RESUME pour repartir dans la boucle initiale. J'ai jamais pratiqué, mais voici ce que propose l'aide :
Code VB :

Y'a plus qu'à faire un RESUME pour repartir dans la boucle initiale. J'ai jamais pratiqué, mais voici ce que propose l'aide :
Code VB :
'demonstrate the use of RESUME on error goto [whoops] global divideBy call causeWhoops end [whoops] print "whoops!" print "Error "; Err$; " "; " code "; Err resume sub causeWhoops print 10 / divideBy end sub
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Oui mais si tu passe outre l'erreur, elle reste, et c'est pas bon.
____________________
Roro
Roro
Oui, en effet, j'avais pas vu, l'exemple est mal choisi. Le même exemple avec suppression du problème avant d'appliquer le resume
Code VB :
C'est en cela qu'en utilisant on error goto, c'est au programmeur de prévoir ce qu'il faut faire pour chaque erreur susceptible de se produire, et pas seulement l'erreur qu'il veut traiter.
A l'heure actuelle, je ne sais pas comment on pourrait faire un on error goto qui ne réagisse que pour un seul numéro d'erreur.
Ou je suis passé à côté de sa philosophie : les erreurs qu'il traite sont souvent fatales à l’exécution d'un programme, et on utilise "on error goto" pour donner une chance de rectifier l'erreur et de continuer le programme, et pas pour remplacer une programmation boiteuse
Code VB :
'demonstrate the use of RESUME on error goto [whoops] global divideBy call causeWhoops end [whoops] print "whoops!" print "Error "; Err$; " "; " code "; Err divideBy=1 print "divideBy modifié pour qu'il n'y ait plus de division par zéro" resume sub causeWhoops print "résultat=";10 / divideBy end sub
C'est en cela qu'en utilisant on error goto, c'est au programmeur de prévoir ce qu'il faut faire pour chaque erreur susceptible de se produire, et pas seulement l'erreur qu'il veut traiter.
A l'heure actuelle, je ne sais pas comment on pourrait faire un on error goto qui ne réagisse que pour un seul numéro d'erreur.
Ou je suis passé à côté de sa philosophie : les erreurs qu'il traite sont souvent fatales à l’exécution d'un programme, et on utilise "on error goto" pour donner une chance de rectifier l'erreur et de continuer le programme, et pas pour remplacer une programmation boiteuse
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Comme souvent, j'ai dû réfléchir un peu plus que prévu. J'ai voulu traiter tous les codes d'erreur, dont le past end of data, de telle sorte que le programme compte les datas, ou s'arrête proprement en cas d'erreur inattendue. Le listing :
Code VB :
Pour reprendre plus en détail,
Code VB : sera actif dès que l'execution passera sur lui, il n'y a pas d'instruction pour le désactiver. Toutes les erreurs d'exécution brancheront sur [erreur]
On entre maintenant dans la boucle de lecture des datas
Code VB :
Cette boucle est une boucle infinie,et il viendra un moment où les datas seront tous lus, ce qui provoquera une erreur 4, past end of data, lorsque l'exécution arrivera sur READ t$, et nous amènera dans le sous-programme de gestion d'erreur :
Code VB :
<Err> et <Err$> sont les codes et descriptif d'erreur utilisés par JB/LB, ce ne sont pas des variables crées par le programmeur. L'erreur 4 emmène l'exécution sur FIN=1, qui dira à la boucle de lecture qu'elle a fini son travail, puis sur RESTORE, et enfin on retournera dans la boucle avec RESUME.
Pourquoi RESTORE ? parce qu'une fois que l'erreur est traitée, l'exécution reprend à l'instruction qui a fait réagir l'on error goto : READ t$. Il n'y avait déjà plus de data à lire lorsqu'on est arrivé dans [erreur], il n'y en aura pas plus à lire maintenant, et on bouclera à l'infini. Donc en plaçant un RESTORE, on réinitialise la liste des datas, et READ fonctionne à nouveau. Mais la boucle s'arrête puisque FIN a été placé à 1, remplissant la condition de fin de la boucle
Mais si Err est différent de 4 et que nous ne savons pas trop comment gérer d'autres erreurs, on va se contenter de fermer proprement ce qui est ouvert, avant de quitter le programme, et ce sera juste pour éviter un arrêt brutal qui aurait eu lieu, de toute façon, si nous n'avions pas le ON ERROR GOTO. pour en arriver là, il suffit de dé-commenter la ligne 'c=boucle/(boucle-3) et de lancer le programme : le programme affichera le code et le libellé de l'erreur, puis branchera sur la routine de fin qui permettra une fermeture propre des fenêtres ou fichiers éventuellement ouverts
Bon, ça, c'est ce que j'ai compris du principe...
Code VB :
on error goto [erreur] boucle=0 fin=0 while fin=0 read t$ boucle=boucle+1 'c=boucle/(boucle-3) wend print "on a trouvé ";boucle-1;" datas" goto [finiprogramme] [erreur] if Err=4 then fin=1 restore resume else print "Error string is " + chr$(34) + Err$ + chr$(34) print "Error number is ";Err goto [finiprogramme] end if [finiprogramme] print "on ferme ce qu'il faut fermer" print "fin du programme" end data "a","z","e","r","t","y","u","i","o","p"
Pour reprendre plus en détail,
Code VB :
on error goto [erreur]
On entre maintenant dans la boucle de lecture des datas
Code VB :
boucle=0 fin=0 while fin=0 read t$ boucle=boucle+1 'c=boucle/(boucle-3) wend
Cette boucle est une boucle infinie,et il viendra un moment où les datas seront tous lus, ce qui provoquera une erreur 4, past end of data, lorsque l'exécution arrivera sur READ t$, et nous amènera dans le sous-programme de gestion d'erreur :
Code VB :
[erreur] if Err=4 then fin=1 restore resume else print "Error string is " + chr$(34) + Err$ + chr$(34) print "Error number is ";Err goto [finiprogramme] end if
<Err> et <Err$> sont les codes et descriptif d'erreur utilisés par JB/LB, ce ne sont pas des variables crées par le programmeur. L'erreur 4 emmène l'exécution sur FIN=1, qui dira à la boucle de lecture qu'elle a fini son travail, puis sur RESTORE, et enfin on retournera dans la boucle avec RESUME.
Pourquoi RESTORE ? parce qu'une fois que l'erreur est traitée, l'exécution reprend à l'instruction qui a fait réagir l'on error goto : READ t$. Il n'y avait déjà plus de data à lire lorsqu'on est arrivé dans [erreur], il n'y en aura pas plus à lire maintenant, et on bouclera à l'infini. Donc en plaçant un RESTORE, on réinitialise la liste des datas, et READ fonctionne à nouveau. Mais la boucle s'arrête puisque FIN a été placé à 1, remplissant la condition de fin de la boucle
Mais si Err est différent de 4 et que nous ne savons pas trop comment gérer d'autres erreurs, on va se contenter de fermer proprement ce qui est ouvert, avant de quitter le programme, et ce sera juste pour éviter un arrêt brutal qui aurait eu lieu, de toute façon, si nous n'avions pas le ON ERROR GOTO. pour en arriver là, il suffit de dé-commenter la ligne 'c=boucle/(boucle-3) et de lancer le programme : le programme affichera le code et le libellé de l'erreur, puis branchera sur la routine de fin qui permettra une fermeture propre des fenêtres ou fichiers éventuellement ouverts
Bon, ça, c'est ce que j'ai compris du principe...
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
ça ne compile pas, ça s'arrête sur "resume" en surbrillance.
____________________
Roro
Roro
Ah ? un premier vrai dysfonctionnement avec Wine ? Intéressant, j'investigationne durant le week-end...
à+
à+
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Sûr à 99% que tu utilises la version 1 de JustBasic, laquelle effectivement reste sur "resume" en surbrillance, essaie la 2

____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
• Index
1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie