Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| recherche des boucles IF/END_IF | |
| | Auteur | Message |
---|
Invité Invité
| Sujet: recherche des boucles IF/END_IF Sam 28 Juil 2012 - 19:41 | |
| mise à jour dimanche 29/07/12Bonjour, J'avais déjà fais cela, sans me souvenir si je l'ai publié ou non, et je n'ai rien retrouvé. Ni sur le forum, ni sur mon ordi. Je pense que le programme est resté sur mon viel ordi. Il s'agit de retrouver les if et end_if lorsque qu'au démarrage, on a l'apparition de la boite vous informant que vous avez plus de IF que de END_IF ou l'inverse. Je suis bloqué par mon programme car à force de modifier la méthode, je me trouve avec cette erreur, sans arrivé à la retrouver (plus de 2200lignes pour l'instant) Donc ce programme m'a permit de restituer cette erreur. Très certainement il y a des cas qui peuvent poser problème, toujours est-il que malgrès différent type de codage, cela à marché. Je ne me suis occupé que de mon problème, avec if et end_if, pour reprendre mon programme bloqué. - Code:
-
' RETROUVER les boucles if
label coller , ouvrir , depile , ligne ,saut , label , return dim ouv$,fer$,sinon$,alor$ ,f$ dim separ$, explode%, copie$, v_explode%, mot$(1000), nb_coord% ,g% , mn$ ,l% ,lig$ , sp% , d$ , d% ,saut$ dim a%,a$,m$,b%,b$ ,li%(10000,2) ,c$ ouv$="IF " :fer$="END_IF" : sinon$="ELSE" :alor$=" THEN "
' choix de memo, vu qu'il est le seul qui puisse recevoir le presse-paier memo 1:left 1,screen_x -width(0)-10:top 1,10:width 1,width(0)-20:height 1,height(0)-130 :bar_both 1 : hide 1
button 2:left 2, 10:width 2,60:caption 2,"coller" :on_click 2,coller button 3:left 3,100:width 3,60:caption 3,"ouvrir" :on_click 3,ouvrir open_dialog 5 list 6:top 6,40:height 6,height(0)-100:width 6,400 :font_name 6,"Courier New" : hide 6 dlist 10:' left 10,620:top 10,:width 10,300 alpha 8:top 8,height(1)+70:left 8,620 END coller: clipboard_paste 1 :gosub depile return ouvrir: filter 5,"Choisir le fichier|*.bas;*.bak;*.txt" f$=file_name$(5) if f$ <> "_" then file_load 1,f$
' ---------------------------------' depile: ' g%: guillemet g%= 0 : sp% = 1 if count(1)>0 for a%=1 to count(1) caption 0,str$(a%) +" / "+str$(count(1)) a$= item_read$(1,a%) : m$ = trim$(upper$(a$)) :g%=0 :clear 10 :l%=0 :c$="" if left$(m$,2)="' " or left$(m$,4) = "REM " else for b%=1 to len(m$) b$=mid$(m$,b%,1) if b$=chr$(34) then g%=-1-g% if b$=":" and g%=0 item_add 10,trim$(c$) : c$="" mn$=trim$(mid$(m$,b%+1,len(m$))) if left$(mn$,2)="' " or left$(mn$,4)="REM " then c$="":exit_for if c$ <> "" then item_add 10,trim$(c$) else c$=c$+b$ end_if next b% item_add 10,trim$(c$) end_if if scancode=27 then exit_for if count(10)>0 ' on commence à regarder les boucles /if/ for b%=1 to count(10) ' on peut prendre a$, on a fini la ligne a$ = item_read$(10,b%) ' caption 8,a$ b$ ="" if left$(a$,3) = ouv$ and instr(a$,alor$) > 0 :' "/if et then" b$="<**IF/THEN**> " gosub ligne else ' if sans then if left$(a$,3) = ouv$ gosub ligne sp%=sp% + 1 end_if end_if ' ligne avec else if left$(a$,4) = sinon$ sp%=sp%-1 gosub ligne sp% = sp% +1 end_if ' ligne avec end_if if left$(a$,6) = fer$ sp%=sp%-1 gosub ligne gosub saut end_if if left$(a$,6) = "RETURN" then b$=">>> " :gosub ligne:gosub return if right$(item_read$(1,a%),1) = ":" then gosub label :exit_for next b% end_if ' display next a% show 6 :full_space 0:full_space 6 end_if return
ligne: d$="" : for d%=1 to sp%:d$=d$+"| ":next d% if sp% <1 then d$="" lig$ = right$(" "+str$(a%),5) item_add 6,lig$ + d$ + b$ + trim$(item_read$(1,a%)) return ' ------ return: d$="":for d%=1 to sp%:d$=d$+"|...":next d% item_add 6,"....." + d$ + STRING$(70,".") +" Ligne RETURN ......" return label: item_add 6,"LABEL ===>" + trim$(item_read$(1,a%)) item_add 6,"**********" + STRING$( len( trim$(item_read$(1,a%))),"*") return saut: d$="":for d%=1 to sp%:d$=d$+"| ":next d% item_add 6," " + d$ return
Il reste des trucs du débogage, mais n'apparaissent pas à l'exécution.
Dernière édition par cosmos70 le Dim 29 Juil 2012 - 11:32, édité 2 fois |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| | | | Invité Invité
| Sujet: Re: recherche des boucles IF/END_IF Dim 29 Juil 2012 - 11:33 | |
| Avant de mettre le programme aux oubliettes un certain temps, j'ai apporté des améliorations. Versions plus lisible, les boucles plus facile à suivre. |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: recherche des boucles IF/END_IF Dim 29 Juil 2012 - 23:48 | |
| Merci Cosmos, c'est le genre de "petites" fonctions qui peuvent faire gagner beaucoup de temps | |
| | | Invité Invité
| Sujet: Re: recherche des boucles IF/END_IF Lun 30 Juil 2012 - 0:26 | |
| Merci. Oui effectivement, Mais depuis j'ai eu un autre problème avec les message d'erreurs qu'on a lorsqu'on a un débordement sur une liste (lire plus de lignes qu'il n'y en a). Sur la quantité de listes, pas moyen de trouver où il y avait une erreur. J'ai essayé avec l'exemple que j'ai mis avec le timer, pour lire une variable. Cela me provoquait une erreur sans retour de repeat, problème qu'on rencontre, lorsque le timer stoppe une fonction en cour qui n'est pas fini, puis dépassement de pile (+ de 1000 return) Finalement j'ai trouvé une autre solution, qui elle ne pose pas de problème: je fais une forme suplémentaire de 50 x 30 pixel, sans la bordure, et avec un bouton. Et à chaque entré de sous/programme, et chaque sortie, je fais caption x,number_current_line, où x est le numero de bouton.
Chaque fois qu'il y a ce genre d'erreur, il y a un blocage, et Panoramic ne se reprend plus normalement. Donc le numéro qui est affiché sur le bouton, est le dernier valide. Il suffit de regarder les lignes qui suivent pour trouver le list correspondant. Et "caption x,number_current_line" on peut le répéter vers l'approche de l'erreur, si il y a plusieurs listes, et un doute. Il suffit de décaler la forme 0 un peu vers le bas, pour suivre les lignes. ÉVidemment si le caption 0, n'est pas utilisé, on peut le prendre à la place. |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: recherche des boucles IF/END_IF Lun 30 Juil 2012 - 1:03 | |
| En effet, un moyen comme un autre de voir où ça plante. Mais bon au lieu du bouton tu pourrais aussi changer un alpha par exemple. Mais bon, ce n'est pas le plus important, le plus important étant en effet de voir où ça bloque. Ça me rappel un peu le principe des points d’arrêt courant lors d'un debuggage | |
| | | Invité Invité
| Sujet: Re: recherche des boucles IF/END_IF Lun 30 Juil 2012 - 8:31 | |
| Bonjour, Oui tu as raison. J'ai mis bouton car sur le coup, j'ai pensé que le bouton se place au dessus des autres objets. Mais comme c'est une autre forme, et qu'en Panoramic, on ne peut forcer une forme par dessus une autre, seulement provisoirement, et to_foreground n'est qu'instantané. Mais c'est pas important. |
| | | Contenu sponsorisé
| Sujet: Re: recherche des boucles IF/END_IF | |
| |
| | | | recherche des boucles IF/END_IF | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |