Forum Liberty Basic France

Le 25/03/2021 à 12h17

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2406
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

   
Le 28/03/2021 à 21h29

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 738
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 courante avec GNU/Linux Mageia7+ Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 29/03/2021 à 01h41

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2406
Christophe:
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

   
Le 29/03/2021 à 10h00

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 738
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 courante avec GNU/Linux Mageia7+ Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 29/03/2021 à 14h27

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2406
Christophe:
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

   
Le 29/03/2021 à 20h39

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 738
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 :
    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 courante avec GNU/Linux Mageia7+ Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 30/03/2021 à 00h53

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2406
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

   
Le 01/04/2021 à 17h47

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 738
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 :
 
  '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 courante avec GNU/Linux Mageia7+ Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 02/04/2021 à 01h24

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2406
Oui mais si tu passe outre l'erreur, elle reste, et c'est pas bon.
____________________
Roro

   
Le 07/04/2021 à 10h34

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 738
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 :
 
  '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 courante avec GNU/Linux Mageia7+ Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 07/04/2021 à 15h16

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 738
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 :
 
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]
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 :
 
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 courante avec GNU/Linux Mageia7+ Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 08/04/2021 à 17h21

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2406
ça ne compile pas, ça s'arrête sur "resume" en surbrillance.
____________________
Roro

   
Le 10/04/2021 à 12h23

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 738
Ah ? un premier vrai dysfonctionnement avec Wine ? Intéressant, j'investigationne durant le week-end...
à+
____________________
Just BASIC v2.0 :
  • utilisation courante avec GNU/Linux Mageia7+ Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   
Le 10/04/2021 à 12h28

Modérateur

Groupe: Modérateur

Inscrit le: 09/02/2015
Messages: 738
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 courante avec GNU/Linux Mageia7+ Wine (Pas trouvé d'incohérences ou de bug de compilation à ce jour)
  • utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc

   

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie