FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Une calculatrice en une ligne de programme
est-ce un bug sur IF et END_IF? Emptypar jean_debord Aujourd'hui à 8:47

» Form(résolu)
est-ce un bug sur IF et END_IF? Emptypar leclode Hier à 17:59

» trop de fichiers en cours
est-ce un bug sur IF et END_IF? Emptypar Marc Hier à 11:42

» Bataille navale SM
est-ce un bug sur IF et END_IF? Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Gestion d'un système client-serveur.
est-ce un bug sur IF et END_IF? Emptypar Pedro Jeu 25 Avr 2024 - 19:31

» Les maths du crocodile
est-ce un bug sur IF et END_IF? Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
est-ce un bug sur IF et END_IF? Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
est-ce un bug sur IF et END_IF? Emptypar Froggy One Mer 24 Avr 2024 - 18:38

» Dessine-moi une galaxie
est-ce un bug sur IF et END_IF? Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
est-ce un bug sur IF et END_IF? Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
est-ce un bug sur IF et END_IF? Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
est-ce un bug sur IF et END_IF? Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
est-ce un bug sur IF et END_IF? Emptypar leclode Mer 17 Avr 2024 - 11:07

» on_key_down (résolu)
est-ce un bug sur IF et END_IF? Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
est-ce un bug sur IF et END_IF? Emptypar jjn4 Jeu 4 Avr 2024 - 14:42

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Avril 2024
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
2930     
CalendrierCalendrier
-20%
Le deal à ne pas rater :
-20% Récupérateur à eau mural 300 litres (Anthracite)
79 € 99 €
Voir le deal

 

 est-ce un bug sur IF et END_IF?

Aller en bas 
5 participants
Aller à la page : 1, 2, 3  Suivant
AuteurMessage
Invité
Invité




est-ce un bug sur IF et END_IF? Empty
MessageSujet: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyDim 31 Oct 2010 - 13:22

Je faisais un essai pour essayer de voir si dans un programme, on pouvait retrouver les erreurs du à la mauvaise coordination des IF et des END-IF, et je suis pris à mon propre piège.

Le programme n'est pas fini, il ne tient pas compte des majuscules, et parfois de plusieurs instructions sur une même ligne, et je crois qu'il y a un teste qui n'est pas fait.

J'ai tapé au départ au petit bonheur la chance, pour voir la faisabilité de voir si dans chaque sous programme, les IF et les END_IF correspondaient. et j'ai continué. J'avais aucun plan au départ.

Il fonctionne ainsi: au départ je recherche tous les labels. Ensuite je ne garde que le premier, et celui qui suit un return. Les labels à l'intérieur d'un sous programme ne m'intéresse pas.

Ensuite seulement je suis chaque label valide pour sortir à return, et je contrôle.

Mais voila! Je lance le programme, et je me trouve avec un message d'erreur: (5)More END_IF than IF.

J'ai mis tous les IF et END_IF qui étaient dans les commentaires entre guillemets.
J'ai fais plusieurs calculs, et je me trouve (en écartant les IF / THEN, qui s'annule) avec 15 IF, et 15 END_IF.

Vraiment où est l'erreur? J'avais cette erreur hier soir. J'ai laissé passé la nuit, pour revoir avec des yeux neufs, et je ne vois pas l'erreur. Si quelqu'un a des meilleurs yeux que mois.
Merci
Code:
' essai pour trouver les boucles
width 0,500:height 0,screen_y
label boucle,controle,va_vers_next
dim a%,b%,a$,b$, f$,bon%,ferm%,nb%
dim tant%,sinon%,jusqua%
' déclaration des objets
list            1:width 1,150:height 1,100:color 1,247,243,206:font_size 1,10:' jaune pâle
open_dialog 2 : filter 2,"|ouvrir le fichier controler|*.bas"

list            3:left 3,160:width 3,150:height 3,100:font_size 3,12:top 3,700
list            4:left 4,320:width 4,150:height 4,100:font_size 4,12
dlist          5:' top 5,200
list            6: top 6,200:left 6,200
list            7:top 7,400
memo      8:top 8, 200:width 8,480:height 8,400:font_size 8,12:font_color 8,255,0,0
' ------------

 repeat
  read a$:if a$="$$$" then exit_repeat
  item_add 1,a$
 until a$="$$$"

' clear 1:f$=file_name$(2) : file_load 1,f$

gosub boucle
gosub controle

end
' =========fin==========
boucle:
  if count(1)>0
      for a%=1 to count(1)
        a$=trim$(item_read$(1,a%))
        if instr(a$," ")=0 and right$(a$,1)=":"  :' label
            item_add 3,a$:item_add 5,a%
        end_if
        if instr(lower$(a$),"return")>0 then item_add 3,"return":item_add 5,a%
      next a%
  end_if
  if count(3)>0
      ferm%=0
      for a%=1 to count(3)
        a$=item_read$(3,a%)
        if ferm%=0 and a$<>"return" then item_add 4,a$ :item_add 6,item_read$(5,a%): ferm%=1
        if a$="return" then ferm%=0
      next a%
  end_if
return


' ============="on regarde chaque label jusqu'au return, on le met dans une liste, et on vérifie"
controle:
' la list 3, ne sert plus, donc on va s'en reservir

  if count(6) > 0
      for a%=1 to count(6)
        clear 3
            tant%=0:sinon%=0:jusqua%=0
            for b%=val(item_read$(6,a%)) to count(1)
              a$=trim$(item_read$(1,b%)):a$=lower$(a$)
              if instr(a$,"return")>0  then exit_for: ' il faudra regarder si des fois plusieurs instructions avant return
              if instr(a$,"if")>0 and instr(a$,"then")>0 then goto va_vers_next: message " then ligne:"+ str$(b%):' on n'en tient pas compte
              if instr(a$,"if")>0 and instr(a$,"end_if")=0 then tant%=tant%+1:item_add 3,string$(tant%,"1"):item_add 7,b%
              if instr(a$,"else")>0 then sinon%=sinon%+1:item_add 3,string$(sinon%,"2"):item_add 7,b%
              if instr(a$,"end_if")>0 then jusqua%=jusqua%+1:item_add 3,string$(jusqua%,"3"):item_add 7,b%
            va_vers_next:
            next b%

            if count(3)>0
              a$=item_read$(3,count(3))
              if left$(a$,1)<>"3"
                  if a%<count(6)
                    item_add 8, " 'END_IF'  manque dans le sous programme :" + item_read$(4,a%)+" depuis la ligne:" + item_read$(6,a%)+" et avant la ligne:"+item_read$(6,a%+1)
                  else
                    item_add 8, " 'END_IF'  manque dans le sous programme :" + item_read$(4,a%)+" depuis la ligne:" + item_read$(6,a%)
                  end_if
                  exit_for
              else
                  nb%=len(a$)
              end_if

              ' maintenant on sais qu'il y a au moins un "END_IF". Voir si le nombre est supérieur à "IF"
              for b%=count(3) to 1 step -1
                  ' plus de "END_IF" que de "IF"
                  if len(item_read$(3,b%))<nb% and left$(item_read$(3,b%),1)="1"
                    if a%<count(6)
                        item_add 8, "manque 'IF' dans le sous programme :"+item_read$(4,a%)+" depuis la ligne:"+ item_read$(6,a%)+" et avant la ligne:"+item_read$(6,a%+1)
                    else
                        item_add 8, "manque 'IF' dans le sous programme :"+item_read$(4,a%)+" depuis la ligne:"+ item_read$(6,a%)
                    end_if
                  end_if
                  ' moins de "END_IF" que de "IF"
                  if len(item_read$(3,b%))> nb% and left$(item_read$(3,b%),1)="1"
                    if a%<count(6)
                        item_add 8,"manque 'END_IF' dans le sous programme:"+item_read$(4,a%)+ " depuis la ligne:"+item_read$(6,a%)+" et avant la ligne:"+item_read$(6,a%+1)
                    else
                        item_add 8,"manque 'END_IF' dans le sous programme:"+item_read$(4,a%)+ " depuis la ligne:"+item_read$(6,a%)
                    end_if
                    exit_for
                  end_if
              next b%

              ' maintenant on va contrôler ELSE
              for b%=1 to count(3)-1
                  a$=item_read$(3,b%) : b$=item_read$(3,b%+1)
                  if len(a$)=len(b$) and left$(a$,1)="2" and left$(b$,1)="1"
                    if a%<count(6)
                        item_add 8,"'ELSE' à la place de 'IF' dans le sous programme:" + item_read$(4,a%) + " depuis la ligne:"+ item_read$(6,a%)+" et avant la ligne:"+item_read$(6,a%+1)
                    else
                        item_add 8,"'ELSE' à la place de 'IF' dans le sous programme:"+ item_read$(4,a%)+ " depuis la ligne:" + item_read$(6,a%)
                    end_if
                    exit_for
                  end_if
              next b%

              ' maintenant on va regarder si "if" et "end_if" ne sont pas inversés il y a lien entre eux
              for b%=1 to count(3)-1
                  a$=item_read$(3,b%):b$=item_read$(3,b%+1)
                  if len(a$)=len(b$) and  left$(a$,1)="3" and left$(b$,1)="1"
                    if a%<count(6)
                        item_add 8," 'END_IF' est inversé par rapport à 'IF', à la ligne:"+item_read$(4,a%)+" depuis la ligne:"+ item_read$(6,a%)+ " et avant la ligne:"+ item_read$(6,a%+1)
                        ' normalement si c'est else, ce devrait la ligne suivante. bon, on verra
                    else
                        item_add 8," 'END_IF' est inversé par rapport à 'IF', à la ligne:"+item_read$(4,a%)
                    end_if
                    exit_for
                  end_if
              next b%

              item_add 8,string$(40,"=")
            end_if

      next a%
  end_if
return
' ==============================================================================
data "  boucle1:"
data " if a%=1 to 10"
data "    a%=a%+1"
data " else"
data " if xffdfdf"
data "end_if"
data " boucle 2"
data "boucle 3"
' data "else"
data "return"
data "boucle4:"
data " else"
data "if"
data "end_if"
data "end_if"
data "boucle5:"
data "if"
data "boucle 6:"
data "return"
data "$$$"

A noté que pour faire des essais, j'ai commancé à mettre des lignes en data, et ne me préoccupant que des if/then/else/end_if. La lecture d'un fichier venant après.
Revenir en haut Aller en bas
Invité
Invité




est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyDim 31 Oct 2010 - 13:49

À la ligne 100. Un END_IF de trop.
Revenir en haut Aller en bas
Invité
Invité




est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyDim 31 Oct 2010 - 14:57

Bonjour Nicolas.
Merci d'avoir regardé, mais je ne comprend pas. Le end_if de la ligne 100, est le pendant du if de la ligne 93, normalement.
Revenir en haut Aller en bas
659_minifly




Nombre de messages : 590
Age : 75
Localisation : Valenciennes Nord
Date d'inscription : 29/04/2010

est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyDim 31 Oct 2010 - 15:20

Ligne 134 un end_if en trop

je ne comprend plus grand chose moi aussi

j'ai répéter la meme manip et la j'ai une erreur more end_if then if

j'ai mis un commentaire data "end_if" et ça remarche cherry cherry


Dernière édition par 659_minifly le Dim 31 Oct 2010 - 15:40, édité 2 fois
Revenir en haut Aller en bas
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyDim 31 Oct 2010 - 15:29

N'empêche que le code semble correct, et que l'analyseur syntaxique se mélange les pinceaux avec tous ces ifs then et end_if effectifs, en commentaires ou dans des chaînes... et ce n'est pas normal.
Revenir en haut Aller en bas
Invité
Invité




est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyDim 31 Oct 2010 - 15:52

Bonjour et merci.
Le END_IF de la ligne 134, correspond au IF de la ligne 55

Par contre il y avait un message après le goto va_vers_next qui ne servait plus, à la ligne 62
J'ai supprimé le message, en laissant le commentaire, et maintenant il n'y a plus de blocage.
.Mais je ne pense pas que ce soit normal, qu'il y ait une influence avec les IF et les END_IF.
A noté que le END_IF de la ligne 134, je l'ai rétabli. Donc mon programme n'avait pas d'erreur de ce côté là, juste le message qui normalement n'aurait jamais été lu.
Merci.
J'essayerai de finir ce programme, si dès fois il peut servir en cas de problème avec les If et END_IF
Revenir en haut Aller en bas
659_minifly




Nombre de messages : 590
Age : 75
Localisation : Valenciennes Nord
Date d'inscription : 29/04/2010

est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyDim 31 Oct 2010 - 15:53

j'ai mis LA LIGNE 63 EN DEUX
Code:

              if instr(a$,"if")>0 and instr(a$,"then")>0 then goto va_vers_next
              message " then ligne:"+ str$(b%):' on n'en tient pas compte

j'ai remis le data "end_if" normal et ça marche !!!!!!!!!!!! What a Face
Revenir en haut Aller en bas
Invité
Invité




est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyDim 31 Oct 2010 - 16:09

Merci d'avoir regardé.

De toute façon le programme n'est pas au point pour l'instant, donc vous pouvez le laisser de côté.
Revenir en haut Aller en bas
Invité
Invité




est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyDim 31 Oct 2010 - 23:44

Il y a quelque chose de pas normal.
Le même programme qui est sauvegardé, fonctionne avec l'éditeur Panoramic, mais si il est exécuté par l'instruction chain qui va le chercher sur le disque (il n'y a pas de copie sur un autre emplacement), cette fois ci il retrouve une erreur avec MORE END_IF than IF...Alors? et alors? et Alors, Zoro est arrivé!. Malheureusement pas
Revenir en haut Aller en bas
659_minifly




Nombre de messages : 590
Age : 75
Localisation : Valenciennes Nord
Date d'inscription : 29/04/2010

est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyLun 1 Nov 2010 - 4:42

Enleve un :

data "end_if"

fin du programme.

tu verra il remarchera ( voir mon premier post )
Revenir en haut Aller en bas
Invité
Invité




est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyLun 1 Nov 2010 - 8:16

Bonjour

Je veux bien enlever un data pour faire marcher le programme. Mais désolé, ce n'est pas normal.
Depuis quand doit-on enlever des datas ou un message pour que Panoramic soit capable de faire en sorte que l'analyseur syntaxique ne commette pas d'erreur. Dans ce programme, c'est pas moi l'erreur.
J'ai arrêté il y a 3/4 mois un programme, parce que je ne trouve pas une erreur sur IF END_IF. Peut-être est-ce le même problème. De plus il y a une différence entre le programme exécuté avec l'éditeur, et le programme qui fonctionne avec chain, et devrait normalement faire la même chose. Ça me paraît grave tout de même.
Revenir en haut Aller en bas
659_minifly




Nombre de messages : 590
Age : 75
Localisation : Valenciennes Nord
Date d'inscription : 29/04/2010

est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyLun 1 Nov 2010 - 16:17

j'ai aussi des problemes avec des sprites qui disparaissent en passant sur d'autres sprites alors qu'a coté j'ai les mêmes
et le sprite est toujours visible. Bah on verra bien!
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyMar 2 Nov 2010 - 7:21

Bonjour,
Cosmos, je pense que ton problème ne vient pas des if-end_if mais des DATAs.
Je ne sais pas si tu t'en souviens mais Il y a quelques temps nous avions discuté des "particularités" des DATAs :
Panoramic à tendance à interpréter ce qu'il y a dedans...
Si tu remplaces tes DATA par une procédure de chargement (ce que tu avais commencé cf. l'objet 2) je suis sur que tu n'auras plus de problème...
Smile
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Invité
Invité




est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyMar 2 Nov 2010 - 8:59

Bonjour,
effectivement, j'y ai pensé, après avoir vu cela.
Mais au départ, j'ai eu le même problème avec un message que je n'avais pas retiré pendant la mise au point, et qui se trouvait après le goto. En retirant le message, le programme ne bloquait plus.
Ensuite selon que je lance depuis l'éditeur Panoramic, ou selon que j'utilise le lancement avec l'instruction CHAIN, je n'ai pas le même effet.
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyMer 3 Nov 2010 - 7:08

Bizarre,
car moi de mon coté, j'obtiens la même chose que ce soit avec l'éditeur de panoramic ou avec ton utilitaire qui exécute un chain...
j'ai viré le message après le goto et cela fonctionne...(du moins je n'ai pas de message d'erreur à l'exécution.. Wink )

scratch
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Invité
Invité




est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyJeu 4 Nov 2010 - 14:07

Bonjour,
Normalement, ne pouvant pas rester longtemps devant l'ordi, je ferme en mettant en veille prolongée, pour retrouver le travail tel qu'il était avant de quitter.

Je viens de refaire un démarrage, et j'ai essayé ce programme de nouveau en enlevant le message. Et maintenant j'ai le même résultat que celui que tu décris.
Je me demande ce qui a pu faire une différence entre chain et l'éditeur. Mystère et boule de gomme...
Revenir en haut Aller en bas
Invité
Invité




est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyDim 7 Nov 2010 - 19:22

Le p^rogramme que j'ai mis en démonstration, pour essayer de comprendre pourquoi il ne fonctionnait pas, je l'ai transformé pour contrôler les boucles IF ELSE END_IF
les conditions IF THEN sont écartées, vu que THEN est reconnu sur la même ligne.
Je n'ai pas fait de contrôle de rem pour l'instant, je modifirais lorsque le temps me sera fournit.
Si il y a des remarques, j'en tiendrai compte d'ici là.
Il se peut qu'il y est des variables inutiles, je verrais plus tard, mais pour un programme normal, cela devrait permettre de voir si les boucles sont normales.
Code:
' essai pour trouver les boucles
width 0,500:height 0,screen_y
label boucle,controle,va_vers_next,marge
dim a%,b%,c%,a$,b$, f$,bon%,ferm%,nb%,m$
dim tant%,sinon%,jusqua%,ind%,s$(20)
a$="123456789abcdefghijk"
for a%=1 to 20:s$(a%)=mid$(a$,a%,1)+" ":next a%
' déclaration des objets
dlist      1 :' width 1,150:height 1,100:color 1,247,243,206:font_size 1,10:' jaune pâle
open_dialog 2 : filter 2,"|ouvrir le fichier controler|*.bas"

list        3 :width 3,450:height 3,900:font_size 3,12:font_name 3,"Bitstream Vera Sans Mono"
dlist      4
dlist      5
dlist      6
' ------------
f$=file_name$(2) : file_load 1,f$

gosub boucle
gosub controle

end
' =========fin==========
boucle:
  if count(1)>0
      for a%=1 to count(1)
        a$=trim$(item_read$(1,a%))
        if instr(a$," ")=0 and right$(a$,1)=":"  :' label
            item_add 3,a$:item_add 5,a%
        end_if
        if instr(lower$(a$),"return")>0 then item_add 3,"return":item_add 5,a%
      next a%
  end_if
  if count(3)>0
      ferm%=0
      for a%=1 to count(3)
        a$=item_read$(3,a%)
        if ferm%=0 and a$<>"return" then item_add 4,a$ :item_add 6,item_read$(5,a%): ferm%=1
        if a$="return" then ferm%=0
      next a%
  end_if
return
' =============
controle:
' la list 3, ne sert plus, donc on va s'en re servir
  clear 3 : clear 5
  if count(6) > 0
      for a%=1 to count(6)
            tant%=0:sinon%=0:jusqua%=0:ind%=0
            item_add 3,item_read$(4,a%):item_add 3,"":item_add 5,"":item_add 5,""
            for b%=val(item_read$(6,a%)) to count(1)
              a$=trim$(item_read$(1,b%)):a$=lower$(a$)
              if instr(a$,"return")>0  then exit_for
              gosub marge
              if instr(a$,"if")>0 and instr(a$,"then")>0 then goto va_vers_next
             
              if instr(a$,"if ")>0 and instr(a$,"end_if")=0
                  ind%=ind%+1:gosub marge
                  item_add 3,s$(ind%)+m$+"if" :item_add 5,b%
              end_if
             
              if instr(a$,"else")>0 then item_add 3,s$(ind%)+m$+"else":item_add 5,b%
             
              if instr(a$,"end_if")>0
                  gosub marge
                  item_add 3,s$(ind%)+m$+"end_if":item_add 5,b%:ind%=ind%-1
                  item_add 3,string$(ind%*4+5," ")+"------":item_add 5,""
              end_if
             
            va_vers_next:
            next b%
            item_add 3,"=======================":item_add 5,""
      next a%
      b%=0
      for a%=1 to count(3)
        if len(item_read$(3,a%))>b% then b%=len(item_read$(3,a%))
      next a%
     
      for a%=1 to count(3)
        if numeric( item_read$(5,a%))=1
            a$=left$( item_read$(3,a%)+string$(b%," "),b%+2) + "[" + item_read$(5,a%) + "]"
            item_delete 3,a%:item_insert 3,a%,a$
        end_if
      next a%
  end_if
return
' ==============================================================================
marge:
  if ind%=1
      m$="  "
  else
  m$="" 
  for c%=1 to ind%
        m$=m$+"  |"
      next c%
  end_if
return

Le commentaire tout de même: il faut charger un fichier bas, pour voir les boucles IF THEN END_IF, si ce n'était pas compris.
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyDim 7 Nov 2010 - 20:38

bonsoir Cosmos,

Pour reprendre la formule de jjn4 : c'est presque parfait ! Wink
Par contre il faut que tu filtres les commentaires :

Extrait de code qui pose pb :
Code:
    .....
    if Objet$(i%,1)= left$(ligne$,len(ligne$)-1)
        Objet$(i%,4)=str$(ligne%) :  ' on mémorise l'emplacement de l'étiquette
        FormatResult% = i%: gosub FormatResult
        if VERBOSE = 1 then item_add mDebug%,"Etiquette deja déclarée trouvé:<"+Objet$(i%,1)+">"
      ' sinon c'est une nouvelle étiquette
      else
        ' j'ai bien envi d'un petit goto sur le else d'en-dessous....  <--- A CET ENDROIT TON PROG VOIT UN ELSE DE TROP
        ' mais cela rajoute une étiquette... ;)
        .....

Bien pratique ton prog !!!
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Invité
Invité




est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyDim 7 Nov 2010 - 23:02

Bonsoir Nardo,
Je ne pensais pas reprendre ce programme, et j'étais sur le point de l'effacer, et d'enlever l'onglet. Avant j'ai vérifié que la dernière mouture de JL35, pour voir si il avait fait les modification sur IF et END_IF. J'ai du mal comprendre, je pensais que c'était fait. Bon, j'ai repris en partie le programme pour voir le résultat que j'attendais, vérifier que l'idée était bonne.

Il y a encore deux point à contrôler: les rem et les chaines de caractères. Je pourrais aussi, voir la partie qui se trouve avant le END.

Ce sera pour plus tard. Peut-être faudrait-il que je filtre d'avantage le IF pour être sure qu'il ne soit pas partie non pas d'un mot clé (je n'en vois pas), mais d'une variable entière comme "definitif". L'instruction INSTR(), c'est pas mal, mais il faut être très pointilleux. Ce serait plus simple, si comme fait JL35, on mettait un espace entre chaque mot, commande etc Il y a =/*-+:, et surement d'autre.

Besoin d'y réfléchir.

Celà dit, la recherche se fait sur un code de programmation normal, en essayant d'être logique.
Si je mets un IF dans un sous-programme, pour faire un goto dans un autre programme, et trouver le END_IF, je n'ai même pas envie de tester ce genre de programme "spaghetti". Ça ne m'intéresse pas. Mais n'ayant pas beaucoup de temps, et si cela intéresse quelqu'un pour reprendre mon programme, cela ne me dérange pas. Je dirais même que cela m'arrange. Ce n'était qu'une parenthèse.
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyDim 7 Nov 2010 - 23:12

Hello cosmos !

même dans le cas d'un programme spaghetti tu es obligé d'avoir autant de if que de endif même si tu rajoutes des goto un peu partout:
--->sinon l"interpréteur de pano te crache à la tronche : "Hep mon gars, va falloir que tu comptes tes if et end_if : il en manque !"
Bon j'exagère un peu, mais c'est à peu près ce message qu'il t'affiche...
lol!
[edit]
J'ai essayé d'en écrire un pour tester mon prog, avec des goto qui renvoi sur d'autres end_if, dans tous les cas, il faut le couple if-end_if
je n'y arrive pas... faut dire que je suis pas italien... Laughing [/Edit]
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Invité
Invité




est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyDim 7 Nov 2010 - 23:41

On est d'accord, qu'il faut un couple, mais: mon programme s'arrète à return, et remet le compteur à zéro, pour démarrer le sous-programme suivant.

Donc je fais un teste pour un cas conventionnel. En mettant la variable ici ind% à 0 (Tient les variables tant%, sinon%, jusqua% sont à supprimer!), si tu fais du spaghetti, les IF ont perdus leur décalages.

Maintenant il faudra faire un teste poussé sur les GOTO qui ont l'air de perturber le contrôle du couple IF END_IF, si une instruction est ajoutée (et inutile) après le goto

Remarque: c'est tout simple, pour une programmation "loufoque" il suffit de mettre un check, et on évite tous les labels et les return

Encore mieux, laisser les labels et return, et ne pas remettre à 0 ind%, à chaque nouvelle lecture d'un sous programme. Cela facilite le repérage en cas d'erreur
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12274
Age : 74
Localisation : Ile de France
Date d'inscription : 29/12/2009

est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyLun 8 Nov 2010 - 10:11

@Cosmos70:
As-tu pensé qu'un sousprogramme peut avoir des return à plusieurs endroits ?
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyLun 8 Nov 2010 - 13:17

Bonjour Klaus,
Oui effectivement. Mais ce programme je l'ai fait car j'ai un vieux programme que j'ai laissé de côté pour une erreur de boucle que je n'ai pas trouvé. Et c'est là que j'ai pris conscience de la construction des boucles à l'intérieur d'un sous programme, et qu'il pouvait y avoir une perturbation de celle-ci en ayant un end_id dans un autre sous programme.

Ce programme de recherche, j'allais l'effacer pensant (je m'en excuse JL35, il n'y a pas de critique) que JL35 avait modifier son programme suite à mes remarques. Je suis submergé d'onglet, aussi je l'ai repris provisoirement et vérifier que le résultat correspondait à mes attentes.

Il m'est difficile de faire des testes pour tous les cas. Personnellement j'évite ce type de construction. (je ne crois pas qu'en GFA Basic c'était possible), car ça manque de clarté. Le mieux est je pense de mettre un check pour faire une représentation avec les labels, mais sans la remise à zéro de l'indentation. Ainsi j'aurai ma propre construction, et généralement je pense que la plus par du temps, vous avez la même, et pour les cas particulier, on fait la même représentation que Panoramic fait le teste. Comment savoir si un return dans une ligne est un return supplémentaire.

En y repensant, je me demande si tel que j'ai construit le programme, cela soit si difficile à réaliser. Je recherche dans mon programme: "if instr(lower$(a$),"return")>0 then ". Il suffirait de voir: if trim$(lower$(a$))="return", ceci permet d'éviter de sortir en ayant un return en fin de ligne. Ensuite dans la procédure "controle", je fais la même chose, et normalement j'écarte ce problème.

Je vais noter. Mais j'ai repris mon programme précédent. Il était presque temps, j'avais du mal à rentrer dedans, et celui-ci est très important pour moi.

Par contre pour la recherche des boucles, celui-ci est ouvert, et qui veut le reprendre pour le finir est libre. C'est d'ailleurs pour celà que je l'ai laissé dans ce post, autrement je l'aurai publié dans vos sources. Qu'est-ce c'est chiant l'informatique, lorsqu’on a plusieurs projets en même temps, et peut de temps à y consacrer.

Je sais plus mais il me semble que je n'ai pas traité les noms clés majuscules. C'est pas dur, mais ça doit pas être fait.
A plus tard pour ce programme si personne ne veut le reprendre.

Je viens de me relire: du vrai charabia! mais je dois fermer
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyLun 8 Nov 2010 - 13:57

Je n’arrive toujours pas à comprendre pourquoi les goto posent un problème par rapport aux [if-end_if] . Peux-tu me donner un exemple qui pose soucis en 5 lignes ?

Revenir en haut Aller en bas
http://nardo26.lescigales.org
Invité
Invité




est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? EmptyLun 8 Nov 2010 - 15:28

Un exemple: à la ligne 55 (si c'est le même N° que sur l'ordi), il y a goto va_vers_next, tu rajoutes
Code:

:print :' ou une autre commande, et là il y a une erreur signalée
C'est vrai qu'après un goto, toute instruction est inutile, mais delà à modifier le décompte des IF/END_IF.

Il faudrait aussi voir si le problème existe avec les autres boucles while, repeat.
Revenir en haut Aller en bas
Contenu sponsorisé





est-ce un bug sur IF et END_IF? Empty
MessageSujet: Re: est-ce un bug sur IF et END_IF?   est-ce un bug sur IF et END_IF? Empty

Revenir en haut Aller en bas
 
est-ce un bug sur IF et END_IF?
Revenir en haut 
Page 1 sur 3Aller à la page : 1, 2, 3  Suivant
 Sujets similaires
-
» PANORAMIC V0.9.13

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: