Avril 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 |
|
| | est-ce un bug sur IF et END_IF? | |
| | |
Auteur | Message |
---|
Nardo26
Nombre de messages : 2294 Age : 55 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: est-ce un bug sur IF et END_IF? Mer 10 Nov 2010 - 0:52 | |
| Excuse moi pour cette réponse tardive : j'ai des absences parfois sur le forum, car je me bat actuellement avec des balises html qui ne veulent pas faire ce qu'elles sont censées faire ! Quand à la doc, c'est ce que j'ai vérifié après coup... Je me suis dis que Jack avait peut-être déjà écrit cette règle quelque part... et qu'on défonçait des portes ouvertes... Ouf ! ce n'est pas le cas !... (on aurait l'air malin ! ) | |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: est-ce un bug sur IF et END_IF? Mer 10 Nov 2010 - 1:55 | |
| | |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: est-ce un bug sur IF et END_IF? Mer 10 Nov 2010 - 14:04 | |
| Une structure curieuse également: - Code:
-
DIM a$, b$ a$="2": b$ = "5" IF a$ = "1": b$ = "33" ELSE b$ = "44": END_IF PRINT "a$="+a$+" b$="+b$ ça ne génère pas d'erreur, mais b$ reste inchangé. Par contre, si la condition est vraie (a$ = "1") là ça part en erreur: structure string incorrecte (si la condition n'est pas vraie, la ligne n'est pas exécutée, elle est ignorée). | |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: est-ce un bug sur IF et END_IF? Mer 10 Nov 2010 - 19:13 | |
| C'est plus complexe que ça. ELSE doit être seul sur la ligne pour être reconnu correctement. En fait, dans ton exemple, si la condition est fausse, il ignure complètement le reste de la ligne. Mais fais ceci: - Code:
-
DIM a$, b$ a$="2": b$ = "5" IF a$ = "1": b$ = "33" ELSE b$ = "44": END_IF PRINT "a$="+a$+" b$="+b$ toujours avec la condition fausse, alors il exécute le ELSE ! Résultat différent ! | |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: est-ce un bug sur IF et END_IF? Mer 10 Nov 2010 - 19:24 | |
| Et ma petite contribution pour l'analyse des structures IF...ELSE...END_IF, WHILE...END_WHILE, REPEAT...UNTIL, FOR...NEXT. Sans prétention, sans analyse des labels ni variables, mais test complet de la structure logique, avec affichage du numéro de ligne générant une erreur de end_if en trop, par exemple (ce qui manque en Panoramic). J'applique les principes de Nardo26 (que je salue au passage). Le programme produit un source "aplani" avec le numéro de ligne d'origine et le texte d'origine de la ligne en commentaire, et une ligne par commande, ainsi qu'un source "replié" avec les mêmes lignes qu'à l'origine, mais contenant une indentation correcte. Une variable permet de régler la taille de l'indentation. Des boutons permettent d'afficher l'une ou l'autre version, et un bouton permet de sauvegarder la version affichée. le deux versions générés sont exécutables par l'éditeur Panoramic sans modification, ce qui est intéressant pour débugger (dans la version "aplanie", Panoramic pourra donner un numéro de ligne précis pour chaque commande). Pour les amateurs: j'ai appliqué la méthode des "objets nommés" pour la première fois dans un de mes programmes - c'est vrai que c'est génial. Voici le code: - Code:
-
label aplanir_source, afficher_aplani, afficher_replie, indenter, replier
dim source_file$, resultat_file$, string_indentation$, contenu$ dim numero_objets%, flag_string%, taille_indentation%, niveau_indentation% dim s$, s1$, chr34$, alors$, lig% dim i%, j%
numero_objets% = 0
' configuration de l'écran full_space 0
' création du dialogue d'ouverture dim open_dialog% : numero_objets% = numero_objets% + 1 open_dialog% = numero_objets% : open_dialog open_dialog%
' création du dialogue de sauvegarde dim save_dialog% : numero_objets% = numero_objets% + 1 save_dialog% = numero_objets% : save_dialog save_dialog%
' création du bouton d'ouverture dim button_open% : numero_objets% = numero_objets% + 1 button_open% = numero_objets% : button button_open% label click_open : on_click button_open%, click_open top button_open%,10 : left button_open%,10 : caption button_open%,"Ouvrir"
' création du bouton de lancement dim button_start% : numero_objets% = numero_objets% + 1 button_start% = numero_objets% : button button_start% : hide button_start% label click_start : on_click button_start%, click_start top button_start%,10 : left button_start%,100 : caption button_start%,"Démarrer"
' création du bouton de résultat aplani dim button_aplani% : numero_objets% = numero_objets% + 1 button_aplani% = numero_objets% : button button_aplani% : hide button_aplani% label click_aplani : on_click button_aplani%, click_aplani top button_aplani%,10 : left button_aplani%,200 : caption button_aplani%,"Aplani"
' création du bouton de résultat replié dim button_replie% : numero_objets% = numero_objets% + 1 button_replie% = numero_objets% : button button_replie% : hide button_replie% label click_replie : on_click button_replie%, click_replie top button_replie%,10 : left button_replie%,300 : caption button_replie%,"Replié"
' création du bouton de sauvegarde dim button_sauver% : numero_objets% = numero_objets% + 1 button_sauver% = numero_objets% : button button_sauver% : hide button_sauver% label click_sauver : on_click button_sauver%, click_sauver top button_sauver%,10 : left button_sauver%,400 : caption button_sauver%,"Sauver"
' creation du alpha de nom de fichier dim alpha_nom% : numero_objets% = numero_objets% + 1 alpha_nom% = numero_objets% : alpha alpha_nom% top alpha_nom%,40 : left alpha_nom%,10 : caption alpha_nom%,"Source:"
' creation du alpha d'avancement du travail dim alpha_progression% : numero_objets% = numero_objets% + 1 alpha_progression% = numero_objets% : alpha alpha_progression% top alpha_progression%,10 : left alpha_progression%,620 caption alpha_progression%,"Progression:"+"attente sélection de fichier"
' création du mémo source dim memo_source% : numero_objets% = numero_objets% + 1 memo_source% = numero_objets% : memo memo_source% top memo_source%,60 : left memo_source%,10 : width memo_source%,600 : height memo_source%,700
' création du mémo résultat dim memo_resultat% : numero_objets% = numero_objets% + 1 memo_resultat% = numero_objets% : memo memo_resultat% : hide memo_resultat% top memo_resultat%,60 : left memo_resultat%,620 : width memo_resultat%,600 : height memo_resultat%,700
' création de les dlist intermédiaires dim dlist_aplani% : numero_objets% = numero_objets% + 1 dlist_aplani% = numero_objets% : dlist dlist_aplani% dim dlist_replie% : : numero_objets% = numero_objets% + 1 dlist_replie% = numero_objets% : dlist dlist_replie%
' initialisations diverses chr34$ = chr$(34) : ' guillemet (") taille_indentation% = 4 alors$ = " th" + "en"
end
click_open: hide button_aplani% hide button_replie% hide button_sauver% hide memo_resultat% clear memo_resultat% clear memo_source% filter open_dialog%, "Source Panoramic|*.bas" source_file$ = file_name$(open_dialog%) caption alpha_nom%,"Source: "+source_file$ if source_file$="" or source_file$="_" i% = message_error_ok("PSA-E-le fichier source n'est pas ouvert") hide button_start% return end_if show button_start% caption alpha_progression%,"Progression:"+"attente démarrer" return
click_start: file_load memo_source%,source_file$ if count(memo_source%)=0 i% = message_error_ok("PSA_E_le fichier source est vide") return end_if hide button_aplani% hide button_replie% hide button_sauver% hide memo_resultat% gosub aplanir_source gosub indenter gosub replier gosub afficher_replie show memo_resultat% show button_aplani% show button_replie% show button_sauver% caption alpha_progression%,"Progression:"+"attente action" return
click_aplani: caption alpha_progression%,"Progression:"+"afficher aplani..." display gosub afficher_aplani caption alpha_progression%,"Progression:"+"attente action" return click_replie: caption alpha_progression%,"Progression:"+"afficher replié..." display gosub afficher_replie caption alpha_progression%,"Progression:"+"attente action" return
click_sauver: caption alpha_progression%,"Progression:"+"sauver..." display if contenu$="replié" filter save_dialog%, "Source Panoramic replié|*.bas" else filter save_dialog%, "Source Panoramic aplani|*.bas" end_if resultat_file$ = file_name$(save_dialog%) if resultat_file$<>"_" caption alpha_progression%,"Progression:"+"sauver..." file_save memo_resultat%,resultat_file$ end_if caption alpha_progression%,"Progression:"+"attente action" return
aplanir_source: caption alpha_progression%,"Progression:"+"aplanir..." display clear dlist_aplani% for i%=1 to count(memo_source%) s$ = trim$(item_read$(memo_source%,i%)) item_add dlist_aplani%," ' ="+"=> "+str$(i%)+": "+s$ if len(s$)>0 flag_string% = 0 while len(s$)>0 if left$(s$,1)="'" or lower$(left$(s$,4))="rem " item_add dlist_aplani%,s$ s$ = "" exit_while end_if j% = 1 repeat if mid$(s$,j%,1)=chr34$ then flag_string% = 1 - flag_string% if flag_string%=0 if mid$(s$,j%,1)=":" if j%=len(s$) item_add dlist_aplani%,s$ s$ = "" exit_while else item_add dlist_aplani%,trim$(left$(s$,j%-1)) s$ = trim$(right$(s$,len(s$)-j%)) j% = 0 if left$(s$,1)="'" or lower$(left$(s$,4))="rem " item_add dlist_aplani%,s$ s$ = "" exit_while end_if end_if end_if end_if j% = j% + 1 until j%>len(s$) if len(s$)>0 then item_add dlist_aplani%,s$ s$ = "" end_while else item_add dlist_aplani%,"" end_if next i% return indenter: caption alpha_progression%,"Progression:"+"indenter..." display niveau_indentation% = 1 string_indentation$ = string$(taille_indentation%," ") for i%=1 to count(dlist_aplani%) s$ = item_read$(dlist_aplani%,i%) if left$(s$,6)="' ==> " j% = instr(s$,":") lig% = val(mid$(s$,7,j%-7)) end_if if right$(s$,1)=":" s$ = "" else item_delete dlist_aplani%, i% item_insert dlist_aplani%,i%,string_indentation$ + s$ end_if if lower$(left$(s$,3))="if " if instr(lower$(s$),alors$)=0 niveau_indentation% = niveau_indentation% + 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") end_if s$ = "" end_if if lower$(left$(s$,4))="for " niveau_indentation% = niveau_indentation% + 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") s$ = "" end_if if lower$(left$(s$,6))="while " niveau_indentation% = niveau_indentation% + 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") s$ = "" end_if if lower$(left$(s$,7))="repeat" and len(s$)=6 niveau_indentation% = niveau_indentation% + 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") s$ = "" end_if if lower$(left$(s$,4))="else" and len(s$)=4 niveau_indentation% = niveau_indentation% - 1 if niveau_indentation%<1 item_add dlist_aplani%,"++++ erreur de structure ligne "+str$(lig%) niveau_indentation% = 1 end_if string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") item_delete dlist_aplani%, i% item_insert dlist_aplani%,i%,string_indentation$ + s$ niveau_indentation% = niveau_indentation% + 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") s$ = "" end_if if lower$(left$(s$,4))="end_" niveau_indentation% = niveau_indentation% - 1 if niveau_indentation%<1 item_add dlist_aplani%,"++++ erreur de structure ligne "+str$(lig%) niveau_indentation% = 1 end_if string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") item_delete dlist_aplani%, i% item_insert dlist_aplani%,i%,string_indentation$ + s$ s$ = "" end_if if lower$(left$(s$,5))="next " niveau_indentation% = niveau_indentation% - 1 if niveau_indentation%<1 item_add dlist_aplani%,"++++ erreur de structure ligne "+str$(lig%) niveau_indentation% = 1 end_if string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") item_delete dlist_aplani%, i% item_insert dlist_aplani%,i%,string_indentation$ + s$ s$ = "" end_if if lower$(left$(s$,6))="until " niveau_indentation% = niveau_indentation% - 1 if niveau_indentation%<1 item_add dlist_aplani%,"++++ erreur de structure ligne "+str$(lig%) niveau_indentation% = 1 end_if string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") item_delete dlist_aplani%, i% item_insert dlist_aplani%,i%,string_indentation$ + s$ s$ = "" end_if next i% return replier: caption alpha_progression%,"Progression:"+"replier..." display clear dlist_replie% i% = 1 repeat s$ = item_read$(dlist_aplani%,i%) if instr(s$," ' ="+"=> ")>0 j% = instr(s$,":") s$ = right$(s$,len(s$)-j%-1) s1$ = item_read$(dlist_aplani%,i%+1) j% = 0 while mid$(s1$,j%+1,1)=" " j% = j% + 1 end_while if j%=0 item_add dlist_replie%, s$ else item_add dlist_replie%, left$(s1$,j%) + s$ end_if while i%<count(dlist_aplani%) if instr(item_read$(dlist_aplani%,i%+1)," ' ="+"=> ")=0 i% = i% + 1 else exit_while end_if end_while else i% = i% + 1 end_if until i%>count(dlist_aplani%) return afficher_aplani: clear memo_resultat% if count(dlist_aplani%)=0 then return for i%=1 to count(dlist_aplani%) item_add memo_resultat%,item_read$(dlist_aplani%,i%) next i% contenu$ = "aplani" return
afficher_replie: clear memo_resultat% if count(dlist_replie%)=0 then return for i%=1 to count(dlist_replie%) item_add memo_resultat%,item_read$(dlist_replie%,i%) next i% contenu$ = "replié" return
| |
| | | JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: est-ce un bug sur IF et END_IF? Mer 10 Nov 2010 - 21:29 | |
| Intéressant, comme toujours tu nous a fait quelque chose d'impeccable.
Je suis d'accord avec toi que le 'nommage' des objets résout bien des problème, même si c'est bien long à écrire.
Et je ne doute pas que le "Principe de Nardo" passe à la postérité et soit enseigné aux générations futures. | |
| | | Nardo26
Nombre de messages : 2294 Age : 55 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: est-ce un bug sur IF et END_IF? Mer 10 Nov 2010 - 21:49 | |
| Arrêtez ! Vous allez me faire rougir... C'est un peu du foutage de gueule ça... non ? Je suis pas trop présent en ce moment sur le forum car je suis tombé sur un os ! Je suis en train d'écrire un script pour ma page d'accueil qui me permet de tester si le navigateur possède le module Flashplayer: et je galère avec la fct innerHTML qui ne veut pas marcher ! je tourne en rond depuis hier soir... et pour une fois Google n'est pas mon ami !! @Klaus: pourquoi tu n'utilises pas la variable systeme "number_objects" ?? | |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: est-ce un bug sur IF et END_IF? Mer 10 Nov 2010 - 23:59 | |
| Je n'utilise pas number_objects pour la raison très simple que cette variable retourne le nombre d'objets existant à un instant donné. Cela donne des résultats identiques à ma démarche tant qu'on ne supprime pas d'objets. Mais si l'on a le malheur d'en supprimer un qui n'est pas le dernier objet créé, la prochaine création d'uyn objet provoque...
Quant à l'utilisation de inner_html, je l'utilise en Delphi 6 pour mon ForumBrowser. Regarde le source Pascal inclus dans la distribution. J'utilise cette fonction pour extraire le code html d'une page web chargé dans l'explorateur afin d'isoler les posts, puis leur partie texte. Si par contre, tu de parles pas de Delphi à ce sujet, alors, je suis hors course... | |
| | | Nardo26
Nombre de messages : 2294 Age : 55 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: est-ce un bug sur IF et END_IF? Jeu 11 Nov 2010 - 0:41 | |
| ok je comprend mieux là... Quand à innerHTML c'est en javaScript... mais c'est bon, je viens de résoudre mon problème... Je me suis un tout petit peu amusé avec la page d'accueil de mon site (un petit tag cloud)... Amuse-toi par exemple à cliquer sur ton nom... je te laisse découvrir cela... | |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: est-ce un bug sur IF et END_IF? Jeu 11 Nov 2010 - 1:20 | |
| Ah, l'effet visuel est très joli, et l'effet de surprise est garanti ! Bravo ! | |
| | | Invité Invité
| Sujet: Re: est-ce un bug sur IF et END_IF? Jeu 11 Nov 2010 - 1:58 | |
| Bravo Klaus pour le programme. Bon travail comme d'habitude C'est l'heure! |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: est-ce un bug sur IF et END_IF? Ven 12 Nov 2010 - 1:43 | |
| J'ai repris mon programme d'analyse de source Panoramic. Les structures SELECT...CASE...END_SELECT n'étaient pas encore prises en compte - voilà qui est fait. De plus, j'ai ajouté une analyse des labels, avec reconnaissance des déclarations (commande label), des définitions (xxxx:) et des utilisations, séparées par goto, gosub et évènements. Il y a aussi un bouton supplémentaire permettant d'afficher la liste de tout ce qui a rapport aux labels, avec les numéros de ligne, et on peut bien sûr sauvegarder cela par le bouton sauver. Voici le code actuel: - Code:
-
label aplanir_source, afficher_aplani, afficher_replie, indenter, replier label identifier_labels, analyser_labels, afficher_labels
dim source_file$, resultat_file$, string_indentation$, contenu$ dim numero_objets%, flag_string%, taille_indentation%, niveau_indentation% dim flag_label%, flag_defini%, flag_goto%, flag_gosub%, flag_event% dim flag_case% dim s$, s1$, s2$, chr34$, alors$, espace$, ext$ dim i%, j%, k%, l%, lig%, typ%
numero_objets% = 0
' configuration de l'écran full_space 0
' création du dialogue d'ouverture dim open_dialog% : numero_objets% = numero_objets% + 1 open_dialog% = numero_objets% : open_dialog open_dialog%
' création du dialogue de sauvegarde dim save_dialog% : numero_objets% = numero_objets% + 1 save_dialog% = numero_objets% : save_dialog save_dialog%
' création du bouton d'ouverture dim button_open% : numero_objets% = numero_objets% + 1 button_open% = numero_objets% : button button_open% label click_open : on_click button_open%, click_open top button_open%,10 : left button_open%,10 : caption button_open%,"Ouvrir"
' création du bouton de lancement dim button_start% : numero_objets% = numero_objets% + 1 button_start% = numero_objets% : button button_start% : hide button_start% label click_start : on_click button_start%, click_start top button_start%,10 : left button_start%,100 : caption button_start%,"Démarrer"
' création du bouton de résultat aplani dim button_aplani% : numero_objets% = numero_objets% + 1 button_aplani% = numero_objets% : button button_aplani% : hide button_aplani% label click_aplani : on_click button_aplani%, click_aplani top button_aplani%,10 : left button_aplani%,200 : caption button_aplani%,"Aplani"
' création du bouton de résultat replié dim button_replie% : numero_objets% = numero_objets% + 1 button_replie% = numero_objets% : button button_replie% : hide button_replie% label click_replie : on_click button_replie%, click_replie top button_replie%,10 : left button_replie%,300 : caption button_replie%,"Replié"
' création du bouton de résultat labels dim button_labels% : numero_objets% = numero_objets% + 1 button_labels% = numero_objets% : button button_labels% : hide button_labels% label click_labels : on_click button_labels%, click_labels top button_labels%,10 : left button_labels%,400 : caption button_labels%,"Labels"
' création du bouton de sauvegarde dim button_sauver% : numero_objets% = numero_objets% + 1 button_sauver% = numero_objets% : button button_sauver% : hide button_sauver% label click_sauver : on_click button_sauver%, click_sauver top button_sauver%,10 : left button_sauver%,500 : caption button_sauver%,"Sauver"
' creation du alpha de nom de fichier dim alpha_nom% : numero_objets% = numero_objets% + 1 alpha_nom% = numero_objets% : alpha alpha_nom% top alpha_nom%,40 : left alpha_nom%,10 : caption alpha_nom%,"Source:"
' creation du alpha d'avancement du travail dim alpha_progression% : numero_objets% = numero_objets% + 1 alpha_progression% = numero_objets% : alpha alpha_progression% top alpha_progression%,10 : left alpha_progression%,620 caption alpha_progression%,"Progression:"+"attente sélection de fichier"
' création du mémo source dim memo_source% : numero_objets% = numero_objets% + 1 memo_source% = numero_objets% : memo memo_source% top memo_source%,60 : left memo_source%,10 : width memo_source%,600 : height memo_source%,700
' création du mémo résultat dim memo_resultat% : numero_objets% = numero_objets% + 1 memo_resultat% = numero_objets% : memo memo_resultat% : hide memo_resultat% top memo_resultat%,60 : left memo_resultat%,620 : width memo_resultat%,600 : height memo_resultat%,700
' création de les dlist intermédiaires dim dlist_aplani% : numero_objets% = numero_objets% + 1 dlist_aplani% = numero_objets% : dlist dlist_aplani% dim dlist_replie% : : numero_objets% = numero_objets% + 1 dlist_replie% = numero_objets% : dlist dlist_replie% dim dlist_lignes% : : numero_objets% = numero_objets% + 1 dlist_lignes% = numero_objets% : dlist dlist_lignes%
' initialisations diverses chr34$ = chr$(34) : ' guillemet (") taille_indentation% = 4 alors$ = " th" + "en" espace$ = string$(100," ")
end
click_open: hide button_aplani% hide button_replie% hide button_labels% hide button_sauver% hide memo_resultat% clear memo_resultat% clear memo_source% filter open_dialog%, "Source Panoramic|*.bas" source_file$ = file_name$(open_dialog%) caption alpha_nom%,"Source: "+source_file$ if source_file$="" or source_file$="_" i% = message_error_ok("PSA-E-le fichier source n'est pas ouvert") hide button_start% return end_if show button_start% caption alpha_progression%,"Progression:"+"attente démarrer" return
click_start: file_load memo_source%,source_file$ if count(memo_source%)=0 i% = message_error_ok("PSA_E_le fichier source est vide") return end_if hide button_aplani% hide button_replie% hide button_labels% hide button_sauver% hide memo_resultat% gosub aplanir_source gosub identifier_labels gosub indenter gosub replier gosub analyser_labels gosub afficher_replie show memo_resultat% show button_aplani% show button_replie% show button_labels% show button_sauver% caption alpha_progression%,"Progression:"+"attente action" return
click_aplani: caption alpha_progression%,"Progression:"+"afficher aplani..." display gosub afficher_aplani caption alpha_progression%,"Progression:"+"attente action" return click_replie: caption alpha_progression%,"Progression:"+"afficher replié..." display gosub afficher_replie caption alpha_progression%,"Progression:"+"attente action" return
click_labels: caption alpha_progression%,"Progression:"+"afficher labels..." display gosub afficher_labels caption alpha_progression%,"Progression:"+"attente action" return
click_sauver: caption alpha_progression%,"Progression:"+"sauver..." display if contenu$="aplani" ext$ = ".bas" filter save_dialog%, "Source Panoramic aplani|*.bas" end_if if contenu$="replié" ext$ = ".bas" filter save_dialog%, "Source Panoramic replié|*.bas" end_if if contenu$="labels" ext$ = ".txt" filter save_dialog%, "Liste des labels|*.txt" end_if resultat_file$ = file_name$(save_dialog%) if resultat_file$<>"_" if right$(resultat_file$,4)<>ext$ then resultat_file$ = resultat_file$ + ext$ caption alpha_progression%,"Progression:"+"sauver..." file_save memo_resultat%,resultat_file$ end_if caption alpha_progression%,"Progression:"+"attente action" return aplanir_source: caption alpha_progression%,"Progression:"+"aplanir..." display clear dlist_aplani% for i%=1 to count(memo_source%) s$ = trim$(item_read$(memo_source%,i%)) item_add dlist_aplani%," ' ="+"=> "+str$(i%)+": "+s$ if len(s$)>0 flag_string% = 0 while len(s$)>0 if left$(s$,1)="'" or lower$(left$(s$,4))="rem " item_add dlist_aplani%,s$ s$ = "" exit_while end_if j% = 1 repeat if mid$(s$,j%,1)=chr34$ then flag_string% = 1 - flag_string% if flag_string%=0 if mid$(s$,j%,1)=":" if j%=len(s$) item_add dlist_aplani%,s$ s$ = "" exit_while else item_add dlist_aplani%,trim$(left$(s$,j%-1)) s$ = trim$(right$(s$,len(s$)-j%)) j% = 0 if left$(s$,1)="'" or lower$(left$(s$,4))="rem " item_add dlist_aplani%,s$ s$ = "" exit_while end_if end_if end_if end_if j% = j% + 1 until j%>len(s$) if len(s$)>0 then item_add dlist_aplani%,s$ s$ = "" end_while else item_add dlist_aplani%,"" end_if next i% return
indenter: caption alpha_progression%,"Progression:"+"indenter..." display niveau_indentation% = 1 flag_case% = 0 string_indentation$ = string$(taille_indentation%," ") for i%=1 to count(dlist_aplani%) s$ = item_read$(dlist_aplani%,i%) if left$(s$,6)="' ="+"=> " j% = instr(s$,":") lig% = val(mid$(s$,7,j%-7)) end_if if right$(s$,1)=":" s$ = "" else item_delete dlist_aplani%, i% item_insert dlist_aplani%,i%,string_indentation$ + s$ end_if if lower$(left$(s$,3))="if " if instr(lower$(s$),alors$)=0 niveau_indentation% = niveau_indentation% + 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") end_if s$ = "" end_if if lower$(left$(s$,4))="for " niveau_indentation% = niveau_indentation% + 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") s$ = "" end_if if lower$(left$(s$,6))="while " niveau_indentation% = niveau_indentation% + 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") s$ = "" end_if if lower$(left$(s$,7))="repeat" and len(s$)=6 niveau_indentation% = niveau_indentation% + 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") s$ = "" end_if if lower$(left$(s$,7))="select " niveau_indentation% = niveau_indentation% + 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") s$ = "" end_if if lower$(left$(s$,5))="case " if flag_case%=1 niveau_indentation% = niveau_indentation% - 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") item_delete dlist_aplani%, i% item_insert dlist_aplani%,i%,string_indentation$ + s$ end_if niveau_indentation% = niveau_indentation% + 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") s$ = "" flag_case% = 1 end_if if lower$(left$(s$,4))="else" and len(s$)=4 niveau_indentation% = niveau_indentation% - 1 if niveau_indentation%<1 item_add dlist_aplani%,"' ++++ erreur de structure ligne "+str$(lig%) niveau_indentation% = 1 end_if string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") item_delete dlist_aplani%, i% item_insert dlist_aplani%,i%,string_indentation$ + s$ niveau_indentation% = niveau_indentation% + 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") s$ = "" end_if if lower$(left$(s$,10))="end_select" niveau_indentation% = niveau_indentation% - 1 - flag_case% flag_case% = 0 if niveau_indentation%<1 item_add dlist_aplani%,"' ++++ erreur de structure ligne "+str$(lig%) niveau_indentation% = 1 end_if string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") item_delete dlist_aplani%, i% item_insert dlist_aplani%,i%,string_indentation$ + s$ s$ = "" end_if if lower$(left$(s$,4))="end_" niveau_indentation% = niveau_indentation% - 1 if niveau_indentation%<1 item_add dlist_aplani%,"' ++++ erreur de structure ligne "+str$(lig%) niveau_indentation% = 1 end_if string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") item_delete dlist_aplani%, i% item_insert dlist_aplani%,i%,string_indentation$ + s$ s$ = "" end_if if lower$(left$(s$,5))="next " niveau_indentation% = niveau_indentation% - 1 if niveau_indentation%<1 item_add dlist_aplani%,"' ++++ erreur de structure ligne "+str$(lig%) niveau_indentation% = 1 end_if string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") item_delete dlist_aplani%, i% item_insert dlist_aplani%,i%,string_indentation$ + s$ s$ = "" end_if if lower$(left$(s$,6))="until " niveau_indentation% = niveau_indentation% - 1 if niveau_indentation%<1 item_add dlist_aplani%,"' ++++ erreur de structure ligne "+str$(lig%) niveau_indentation% = 1 end_if string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") item_delete dlist_aplani%, i% item_insert dlist_aplani%,i%,string_indentation$ + s$ s$ = "" end_if next i% if niveau_indentation%<>1 then item_add dlist_aplani%,"' ++++ erreur de structure ligne "+str$(lig%) return
replier: caption alpha_progression%,"Progression:"+"replier..." display clear dlist_replie% i% = 1 repeat s$ = item_read$(dlist_aplani%,i%) if instr(s$," ' ="+"=> ")>0 j% = instr(s$,":") s$ = right$(s$,len(s$)-j%-1) s1$ = item_read$(dlist_aplani%,i%+1) j% = 0 while mid$(s1$,j%+1,1)=" " j% = j% + 1 end_while if j%=0 item_add dlist_replie%, s$ else item_add dlist_replie%, left$(s1$,j%) + s$ end_if while i%<count(dlist_aplani%) if instr(item_read$(dlist_aplani%,i%+1)," ' ="+"=> ")=0 i% = i% + 1 else exit_while end_if end_while else i% = i% + 1 end_if until i%>count(dlist_aplani%) return afficher_aplani: clear memo_resultat% if count(dlist_aplani%)=0 then return for i%=1 to count(dlist_aplani%) item_add memo_resultat%,item_read$(dlist_aplani%,i%) next i% contenu$ = "aplani" return
afficher_replie: clear memo_resultat% if count(dlist_replie%)=0 then return for i%=1 to count(dlist_replie%) item_add memo_resultat%,item_read$(dlist_replie%,i%) next i% contenu$ = "replié" return
afficher_labels: clear memo_resultat% for i%=1 to count(dlist_lignes%) item_add memo_resultat%,item_read$(dlist_lignes%,i%) next i% contenu$ = "labels" return identifier_labels: caption alpha_progression%,"Progression:"+"identifier les labels..." display clear dlist_lignes% i% = 1 repeat s$ = trim$(item_read$(dlist_aplani%,i%)) if instr(s$,"' ="+"=> ")>0 j% = instr(s$,"' ="+"=> ") k% = instr(s$,":") lig% = val(mid$(s$,j%+6,k%-j%-6)) s$ = trim$(right$(s$,len(s$)-k%)) i% = i% + 1 s$ = trim$(item_read$(dlist_aplani%,i%)) end_if if lower$(left$(s$,6))="label " s$ = trim$(right$(s$,len(s$)-6)) j% = instr(s$,",") while j%>0 s1$ = trim$(left$(s$,j%-1)) s$ = trim$(right$(s$,len(s$)-j%)) item_add dlist_lignes%,s1$+left$(espace$,50-len(s1$))+"0=label "+"=>"+str$(lig%) j% = instr(s$,",") end_while item_add dlist_lignes%,s$+left$(espace$,50-len(s$))+"0=label "+"=>"+str$(lig%) else if right$(s$,1)=":" s2$ = left$(s$,len(s$)-1) item_add dlist_lignes%,s2$+left$(espace$,50-len(s2$))+"1=défini "+"=>"+str$(lig%) else if lower$(left$(s$,5))="goto " s2$ = trim$(right$(s$,len(s$)-instr(s$," "))) item_add dlist_lignes%,s2$+left$(espace$,50-len(s2$))+"2=goto "+"=>"+str$(lig%) end_if if lower$(left$(s$,6))="gosub " s2$ = trim$(right$(s$,len(s$)-instr(s$," "))) item_add dlist_lignes%,s2$+left$(espace$,50-len(s2$))+"3=gosub "+"=>"+str$(lig%) end_if if lower$(left$(s$,3))="on_" s2$ = trim$(right$(s$,len(s$)-instr(s$,","))) item_add dlist_lignes%,s2$+left$(espace$,50-len(s2$))+"4=on_ "+"=>"+str$(lig%) end_if end_if end_if i% = i% + 1 until i%>count(dlist_aplani%) sort dlist_lignes% return analyser_labels: caption alpha_progression%,"Progression:"+"analyser les labels..." display i%=1 s1$ = "" flag_label% = 0 flag_defini% = 0 flag_gosub% = 0 flag_goto% = 0 flag_event% = 0 item_add dlist_lignes%,"***fini***"+espace$ lig% = 0 repeat s$ = item_read$(dlist_lignes%,i%) j% = instr(s$," ") s2$ = left$(s$,j%-1) if s2$<>s1$ if flag_label%=1 and flag_defini%=0 item_add dlist_replie%,"++++ label "+s1$+" non défini (xxx:)" end_if if flag_label%=0 and flag_defini%=1 item_add dlist_replie%,"++++ label "+s1$+" non déclaré (commande label)" end_if if (flag_goto%+flag_gosub%+flag_event%)>1 item_add dlist_replie%,"++++ label "+s1$+" utilisation ambigue" end_if if left$(s$,10)="***fini***" then exit_repeat flag_label% = 0 flag_defini% = 0 flag_gosub% = 0 flag_goto% = 0 flag_event% = 0 s1$ = s2$ end_if j% = instr(s$,"=") typ% = val(mid$(s$,j%-1,1)) select typ% case 0 if flag_label%=1 j% = instr(s$,">") lig% = val(right$(s$,len(s$)-j%)) item_add dlist_replie%,"++++ label "+s1$+" redéclaré (commande label) à "+str$(lig%) end_if flag_label% = 1 case 1 if flag_defini%=1 j% = instr(s$,">") lig% = val(right$(s$,len(s$)-j%)) item_add dlist_replie%,"++++ label "+s1$+" redéfini (xxx:) à "+str$(lig%) end_if flag_defini% = 1 case 2 flag_goto% = 1 case 3 flag_gosub% = 1 case 4 flag_defini% = 1 end_select i% = i% + 1 until i%>count(dlist_lignes%) return | |
| | | Nardo26
Nombre de messages : 2294 Age : 55 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: est-ce un bug sur IF et END_IF? Ven 12 Nov 2010 - 8:15 | |
| Bonjour Klaus, Beau boulot ! Quelques petites remarques pour améliorer ton prog: Ton programme n'aime pas trop les commentaires de ce style : ' ceci est un commentaire : les ":" en fin du commentaire sont pris en compte et le commentaire est considéré comme une étiquette... De même, j'ai fais le test avec un source dont les lignes sont un peu longues: celles-ci se retrouvent tronçonnées et cela perturbe l'analyse du code... PS: J'ai pas bien compris ce que faisait "Aplanir". Lorsque j'essaye, cela me copie la ligne avec son n°... | |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: est-ce un bug sur IF et END_IF? Ven 12 Nov 2010 - 10:47 | |
| Je vais revoir ma copie à l'aide de tes remarques. 1. une ligne du type ' commentaire : --> je vois d'où ça vient, et c'est facile à corriger 2. Les lignes un peu longues sont tronquées avec un renvoi à la ligne --> j'ai rencontré cela aussi, cela vient de Panoramic qui coupe une ligne d'un mémo qui ne s'affiche pas en entier : On n'a pas accès à la propriété WordWrap du mémo Delphi; pour Panoramic, c'est "true" en permanence ! regarde ceci: - Code:
-
dim s$
width 0,1200 memo 1 : top 1,100 : left 1,10 : width 1,1100 memo 2 : top 2,10 : left 2,10 : width 2,500 dlist 3
s$ = string$(40,"a") + " " item_add 3,s$+s$+s$+s$ item_add 1,item_read$(3,1) item_add 2,item_read$(3,1)
end
Pour l'affichage, je n'ai pas de solution, mais pour la sauvegarde, je vais le corriger: au lieu de sauvegarder le mémo affiché, je vais sauvegarder la dlist qui l'alimente, et le problème seréa règlé 3. Aplanir --> c'est la fonction essentielle. Elle produiit, pour chaque ligne, un commentaire contenant la ligne d'origine avec son numéro de ligne d'origine, puis autant de lignes Panoramic réelles qu'il y a de lignes de commande indépendantes dans la ligne d'origine. En gros, - Code:
-
top memo_resultat%,60 : left memo_resultat%,620 : width memo_resultat%,600 : height memo_resultat%,700
est remplacé par - Code:
-
' ==> 74: top memo_resultat%,60 : left memo_resultat%,620 : width memo_resultat%,600 : height memo_resultat%,700 top memo_resultat%,60 left memo_resultat%,620 width memo_resultat%,600 height memo_resultat%,700
Ceci permet deux choses: d'une part, pour l'analyse, je travaille uniquement sur le code "aplani" - c'est beaucoup plus simple. Et d'autre part, ce code est un code valide pour l'éditeur Panoramic, et on peut l'exécuter directement. Pour debugger un programme, c'est plus parlant quand on cherche une erreur pour laquelle Panoramic nous dit "ligne 317", ma s cette ligne contient 5 commandes, par exemple. En version aplanie, on a directement l'indication de la commande en faute. Mais je reconnais que dans le cas d'une commande par ligne, cela semble un peu superflu. Néanmoins, cela me permet, pour l'analyse, d'avoir pour chaque ligne le numéro de ligne Panoramic d'origine, ce qui est important. | |
| | | Klaus
Nombre de messages : 12274 Age : 74 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: est-ce un bug sur IF et END_IF? Ven 12 Nov 2010 - 10:56 | |
| Voici la version qui contient les deux corrections: - Code:
-
label aplanir_source, afficher_aplani, afficher_replie, indenter, replier label identifier_labels, analyser_labels, afficher_labels
dim source_file$, resultat_file$, string_indentation$, contenu$ dim numero_objets%, flag_string%, taille_indentation%, niveau_indentation% dim flag_label%, flag_defini%, flag_goto%, flag_gosub%, flag_event% dim flag_case% dim s$, s1$, s2$, chr34$, alors$, espace$, ext$ dim i%, j%, k%, l%, lig%, typ%
numero_objets% = 0
' configuration de l'écran full_space 0
' création du dialogue d'ouverture dim open_dialog% : numero_objets% = numero_objets% + 1 open_dialog% = numero_objets% : open_dialog open_dialog%
' création du dialogue de sauvegarde dim save_dialog% : numero_objets% = numero_objets% + 1 save_dialog% = numero_objets% : save_dialog save_dialog%
' création du bouton d'ouverture dim button_open% : numero_objets% = numero_objets% + 1 button_open% = numero_objets% : button button_open% label click_open : on_click button_open%, click_open top button_open%,10 : left button_open%,10 : caption button_open%,"Ouvrir"
' création du bouton de lancement dim button_start% : numero_objets% = numero_objets% + 1 button_start% = numero_objets% : button button_start% : hide button_start% label click_start : on_click button_start%, click_start top button_start%,10 : left button_start%,100 : caption button_start%,"Démarrer"
' création du bouton de résultat aplani dim button_aplani% : numero_objets% = numero_objets% + 1 button_aplani% = numero_objets% : button button_aplani% : hide button_aplani% label click_aplani : on_click button_aplani%, click_aplani top button_aplani%,10 : left button_aplani%,200 : caption button_aplani%,"Aplani"
' création du bouton de résultat replié dim button_replie% : numero_objets% = numero_objets% + 1 button_replie% = numero_objets% : button button_replie% : hide button_replie% label click_replie : on_click button_replie%, click_replie top button_replie%,10 : left button_replie%,300 : caption button_replie%,"Replié"
' création du bouton de résultat labels dim button_labels% : numero_objets% = numero_objets% + 1 button_labels% = numero_objets% : button button_labels% : hide button_labels% label click_labels : on_click button_labels%, click_labels top button_labels%,10 : left button_labels%,400 : caption button_labels%,"Labels"
' création du bouton de sauvegarde dim button_sauver% : numero_objets% = numero_objets% + 1 button_sauver% = numero_objets% : button button_sauver% : hide button_sauver% label click_sauver : on_click button_sauver%, click_sauver top button_sauver%,10 : left button_sauver%,500 : caption button_sauver%,"Sauver"
' creation du alpha de nom de fichier dim alpha_nom% : numero_objets% = numero_objets% + 1 alpha_nom% = numero_objets% : alpha alpha_nom% top alpha_nom%,40 : left alpha_nom%,10 : caption alpha_nom%,"Source:"
' creation du alpha d'avancement du travail dim alpha_progression% : numero_objets% = numero_objets% + 1 alpha_progression% = numero_objets% : alpha alpha_progression% top alpha_progression%,10 : left alpha_progression%,620 caption alpha_progression%,"Progression:"+"attente sélection de fichier"
' création du mémo source dim memo_source% : numero_objets% = numero_objets% + 1 memo_source% = numero_objets% : memo memo_source% top memo_source%,60 : left memo_source%,10 : width memo_source%,600 : height memo_source%,700
' création du mémo résultat dim memo_resultat% : numero_objets% = numero_objets% + 1 memo_resultat% = numero_objets% : memo memo_resultat% : hide memo_resultat% top memo_resultat%,60 : left memo_resultat%,620 : width memo_resultat%,600 : height memo_resultat%,700
' création de les dlist intermédiaires dim dlist_aplani% : numero_objets% = numero_objets% + 1 dlist_aplani% = numero_objets% : dlist dlist_aplani% dim dlist_replie% : : numero_objets% = numero_objets% + 1 dlist_replie% = numero_objets% : dlist dlist_replie% dim dlist_lignes% : : numero_objets% = numero_objets% + 1 dlist_lignes% = numero_objets% : dlist dlist_lignes%
' initialisations diverses chr34$ = chr$(34) : ' guillemet (") taille_indentation% = 4 alors$ = " th" + "en" espace$ = string$(100," ")
end
click_open: hide button_aplani% hide button_replie% hide button_labels% hide button_sauver% hide memo_resultat% clear memo_resultat% clear memo_source% filter open_dialog%, "Source Panoramic|*.bas" source_file$ = file_name$(open_dialog%) caption alpha_nom%,"Source: "+source_file$ if source_file$="" or source_file$="_" i% = message_error_ok("PSA-E-le fichier source n'est pas ouvert") hide button_start% return end_if show button_start% caption alpha_progression%,"Progression:"+"attente démarrer" return
click_start: file_load memo_source%,source_file$ if count(memo_source%)=0 i% = message_error_ok("PSA_E_le fichier source est vide") return end_if hide button_aplani% hide button_replie% hide button_labels% hide button_sauver% hide memo_resultat% gosub aplanir_source gosub identifier_labels gosub indenter gosub replier gosub analyser_labels gosub afficher_replie show memo_resultat% show button_aplani% show button_replie% show button_labels% show button_sauver% caption alpha_progression%,"Progression:"+"attente action" return
click_aplani: caption alpha_progression%,"Progression:"+"afficher aplani..." display gosub afficher_aplani caption alpha_progression%,"Progression:"+"attente action" return click_replie: caption alpha_progression%,"Progression:"+"afficher replié..." display gosub afficher_replie caption alpha_progression%,"Progression:"+"attente action" return
click_labels: caption alpha_progression%,"Progression:"+"afficher labels..." display gosub afficher_labels caption alpha_progression%,"Progression:"+"attente action" return
click_sauver: caption alpha_progression%,"Progression:"+"sauver..." display if contenu$="aplani" ext$ = ".bas" filter save_dialog%, "Source Panoramic aplani|*.bas" k% = dlist_aplani% end_if if contenu$="replié" ext$ = ".bas" filter save_dialog%, "Source Panoramic replié|*.bas" k% = dlist_replie% end_if if contenu$="labels" ext$ = ".txt" filter save_dialog%, "Liste des labels|*.txt" k% = dlist_lignes% end_if resultat_file$ = file_name$(save_dialog%) if resultat_file$<>"_" if right$(resultat_file$,4)<>ext$ then resultat_file$ = resultat_file$ + ext$ caption alpha_progression%,"Progression:"+"sauver..." file_save k%,resultat_file$ end_if caption alpha_progression%,"Progression:"+"attente action" return aplanir_source: caption alpha_progression%,"Progression:"+"aplanir..." display clear dlist_aplani% for i%=1 to count(memo_source%) s$ = trim$(item_read$(memo_source%,i%)) item_add dlist_aplani%," ' ="+"=> "+str$(i%)+": "+s$ if len(s$)>0 flag_string% = 0 while len(s$)>0 if left$(s$,1)="'" or lower$(left$(s$,4))="rem " item_add dlist_aplani%,s$ s$ = "" exit_while end_if j% = 1 repeat if mid$(s$,j%,1)=chr34$ then flag_string% = 1 - flag_string% if flag_string%=0 if mid$(s$,j%,1)=":" if j%=len(s$) item_add dlist_aplani%,s$ s$ = "" exit_while else item_add dlist_aplani%,trim$(left$(s$,j%-1)) s$ = trim$(right$(s$,len(s$)-j%)) j% = 0 if left$(s$,1)="'" or lower$(left$(s$,4))="rem " item_add dlist_aplani%,s$ s$ = "" exit_while end_if end_if end_if end_if j% = j% + 1 until j%>len(s$) if len(s$)>0 then item_add dlist_aplani%,s$ s$ = "" end_while else item_add dlist_aplani%,"" end_if next i% return
indenter: caption alpha_progression%,"Progression:"+"indenter..." display niveau_indentation% = 1 flag_case% = 0 string_indentation$ = string$(taille_indentation%," ") for i%=1 to count(dlist_aplani%) s$ = item_read$(dlist_aplani%,i%) if left$(s$,6)="' ="+"=> " j% = instr(s$,":") lig% = val(mid$(s$,7,j%-7)) end_if if right$(s$,1)=":" s$ = "" else item_delete dlist_aplani%, i% item_insert dlist_aplani%,i%,string_indentation$ + s$ end_if if lower$(left$(s$,3))="if " if instr(lower$(s$),alors$)=0 niveau_indentation% = niveau_indentation% + 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") end_if s$ = "" end_if if lower$(left$(s$,4))="for " niveau_indentation% = niveau_indentation% + 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") s$ = "" end_if if lower$(left$(s$,6))="while " niveau_indentation% = niveau_indentation% + 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") s$ = "" end_if if lower$(left$(s$,7))="repeat" and len(s$)=6 niveau_indentation% = niveau_indentation% + 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") s$ = "" end_if if lower$(left$(s$,7))="select " niveau_indentation% = niveau_indentation% + 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") s$ = "" end_if if lower$(left$(s$,5))="case " if flag_case%=1 niveau_indentation% = niveau_indentation% - 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") item_delete dlist_aplani%, i% item_insert dlist_aplani%,i%,string_indentation$ + s$ end_if niveau_indentation% = niveau_indentation% + 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") s$ = "" flag_case% = 1 end_if if lower$(left$(s$,4))="else" and len(s$)=4 niveau_indentation% = niveau_indentation% - 1 if niveau_indentation%<1 item_add dlist_aplani%,"' ++++ erreur de structure ligne "+str$(lig%) niveau_indentation% = 1 end_if string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") item_delete dlist_aplani%, i% item_insert dlist_aplani%,i%,string_indentation$ + s$ niveau_indentation% = niveau_indentation% + 1 string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") s$ = "" end_if if lower$(left$(s$,10))="end_select" niveau_indentation% = niveau_indentation% - 1 - flag_case% flag_case% = 0 if niveau_indentation%<1 item_add dlist_aplani%,"' ++++ erreur de structure ligne "+str$(lig%) niveau_indentation% = 1 end_if string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") item_delete dlist_aplani%, i% item_insert dlist_aplani%,i%,string_indentation$ + s$ s$ = "" end_if if lower$(left$(s$,4))="end_" niveau_indentation% = niveau_indentation% - 1 if niveau_indentation%<1 item_add dlist_aplani%,"' ++++ erreur de structure ligne "+str$(lig%) niveau_indentation% = 1 end_if string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") item_delete dlist_aplani%, i% item_insert dlist_aplani%,i%,string_indentation$ + s$ s$ = "" end_if if lower$(left$(s$,5))="next " niveau_indentation% = niveau_indentation% - 1 if niveau_indentation%<1 item_add dlist_aplani%,"' ++++ erreur de structure ligne "+str$(lig%) niveau_indentation% = 1 end_if string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") item_delete dlist_aplani%, i% item_insert dlist_aplani%,i%,string_indentation$ + s$ s$ = "" end_if if lower$(left$(s$,6))="until " niveau_indentation% = niveau_indentation% - 1 if niveau_indentation%<1 item_add dlist_aplani%,"' ++++ erreur de structure ligne "+str$(lig%) niveau_indentation% = 1 end_if string_indentation$ = string$(taille_indentation%*niveau_indentation%," ") item_delete dlist_aplani%, i% item_insert dlist_aplani%,i%,string_indentation$ + s$ s$ = "" end_if next i% if niveau_indentation%<>1 then item_add dlist_aplani%,"' ++++ erreur de structure ligne "+str$(lig%) return
replier: caption alpha_progression%,"Progression:"+"replier..." display clear dlist_replie% i% = 1 repeat s$ = item_read$(dlist_aplani%,i%) if instr(s$," ' ="+"=> ")>0 j% = instr(s$,":") s$ = right$(s$,len(s$)-j%-1) s1$ = item_read$(dlist_aplani%,i%+1) j% = 0 while mid$(s1$,j%+1,1)=" " j% = j% + 1 end_while if j%=0 item_add dlist_replie%, s$ else item_add dlist_replie%, left$(s1$,j%) + s$ end_if while i%<count(dlist_aplani%) if instr(item_read$(dlist_aplani%,i%+1)," ' ="+"=> ")=0 i% = i% + 1 else exit_while end_if end_while else i% = i% + 1 end_if until i%>count(dlist_aplani%) return afficher_aplani: clear memo_resultat% if count(dlist_aplani%)=0 then return for i%=1 to count(dlist_aplani%) item_add memo_resultat%,item_read$(dlist_aplani%,i%) next i% contenu$ = "aplani" return
afficher_replie: clear memo_resultat% if count(dlist_replie%)=0 then return for i%=1 to count(dlist_replie%) item_add memo_resultat%,item_read$(dlist_replie%,i%) next i% contenu$ = "replié" return
afficher_labels: clear memo_resultat% for i%=1 to count(dlist_lignes%) item_add memo_resultat%,item_read$(dlist_lignes%,i%) next i% contenu$ = "labels" return identifier_labels: caption alpha_progression%,"Progression:"+"identifier les labels..." display clear dlist_lignes% i% = 1 repeat s$ = trim$(item_read$(dlist_aplani%,i%)) if instr(s$,"' ="+"=> ")>0 j% = instr(s$,"' ="+"=> ") k% = instr(s$,":") lig% = val(mid$(s$,j%+6,k%-j%-6)) s$ = trim$(right$(s$,len(s$)-k%)) i% = i% + 1 s$ = trim$(item_read$(dlist_aplani%,i%)) end_if if lower$(left$(s$,6))="label " s$ = trim$(right$(s$,len(s$)-6)) j% = instr(s$,",") while j%>0 s1$ = trim$(left$(s$,j%-1)) s$ = trim$(right$(s$,len(s$)-j%)) item_add dlist_lignes%,s1$+left$(espace$,50-len(s1$))+"0=label "+"=>"+str$(lig%) j% = instr(s$,",") end_while item_add dlist_lignes%,s$+left$(espace$,50-len(s$))+"0=label "+"=>"+str$(lig%) else if left$(s$,1)="'" or lower$(left$(s$,4))="rem " else if right$(s$,1)=":" s2$ = left$(s$,len(s$)-1) item_add dlist_lignes%,s2$+left$(espace$,50-len(s2$))+"1=défini "+"=>"+str$(lig%) else if lower$(left$(s$,5))="goto " s2$ = trim$(right$(s$,len(s$)-instr(s$," "))) item_add dlist_lignes%,s2$+left$(espace$,50-len(s2$))+"2=goto "+"=>"+str$(lig%) end_if if lower$(left$(s$,6))="gosub " s2$ = trim$(right$(s$,len(s$)-instr(s$," "))) item_add dlist_lignes%,s2$+left$(espace$,50-len(s2$))+"3=gosub "+"=>"+str$(lig%) end_if if lower$(left$(s$,3))="on_" s2$ = trim$(right$(s$,len(s$)-instr(s$,","))) item_add dlist_lignes%,s2$+left$(espace$,50-len(s2$))+"4=on_ "+"=>"+str$(lig%) end_if end_if end_if end_if i% = i% + 1 until i%>count(dlist_aplani%) sort dlist_lignes% return analyser_labels: caption alpha_progression%,"Progression:"+"analyser les labels..." display i%=1 s1$ = "" flag_label% = 0 flag_defini% = 0 flag_gosub% = 0 flag_goto% = 0 flag_event% = 0 item_add dlist_lignes%,"***fini***"+espace$ lig% = 0 repeat s$ = item_read$(dlist_lignes%,i%) j% = instr(s$," ") s2$ = left$(s$,j%-1) if s2$<>s1$ if flag_label%=1 and flag_defini%=0 item_add dlist_replie%,"++++ label "+s1$+" non défini (xxx:)" end_if if flag_label%=0 and flag_defini%=1 item_add dlist_replie%,"++++ label "+s1$+" non déclaré (commande label)" end_if if (flag_goto%+flag_gosub%+flag_event%)>1 item_add dlist_replie%,"++++ label "+s1$+" utilisation ambigue" end_if if left$(s$,10)="***fini***" then exit_repeat flag_label% = 0 flag_defini% = 0 flag_gosub% = 0 flag_goto% = 0 flag_event% = 0 s1$ = s2$ end_if j% = instr(s$,"=") typ% = val(mid$(s$,j%-1,1)) select typ% case 0 if flag_label%=1 j% = instr(s$,">") lig% = val(right$(s$,len(s$)-j%)) item_add dlist_replie%,"++++ label "+s1$+" redéclaré (commande label) à "+str$(lig%) end_if flag_label% = 1 case 1 if flag_defini%=1 j% = instr(s$,">") lig% = val(right$(s$,len(s$)-j%)) item_add dlist_replie%,"++++ label "+s1$+" redéfini (xxx:) à "+str$(lig%) end_if flag_defini% = 1 case 2 flag_goto% = 1 case 3 flag_gosub% = 1 case 4 flag_defini% = 1 end_select i% = i% + 1 until i%>count(dlist_lignes%) return EDIT 12/11/2010 14:37 Cette version est maintenant en ligne sur mon site ! | |
| | | Contenu sponsorisé
| Sujet: Re: est-ce un bug sur IF et END_IF? | |
| |
| | | | est-ce un bug sur IF et END_IF? | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |