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 |
|
|
| Il y t-il vraiment une erreur (IF/END_IF) | |
| | Auteur | Message |
---|
Invité Invité
| Sujet: Il y t-il vraiment une erreur (IF/END_IF) Sam 15 Déc 2012 - 19:59 | |
| Je bloque sur cette procédure. Tout allait bien jusqu'à ce que j'essaye de rajouter le calcul des IF et END_IF J'ai changé des variables, comme IF_% en iph_%, j'ai rentré des chaines en décomposant les mots pour qu'il n'y ai pas de comptage sans rapport. Rien n'y fait. Ce n'ait déjà pas la première fois. Cela est déjà apparu il y a 1 à 2 ans. - Code:
-
error_french declare() decode() END ' ***TRACE***" ' ****************************************************************************** sub decode() dim_local guil%,parenthese%,a$,b$,c$ ,a%,b%,c% , re$ ,flag_return% ,else%, flag_and_if_% ,and_iph_$ , iph_$ ' and_iph_$="END_IF" : iph_$="IF " and_iph_$="E"+"N"+"D_"+"I"+"F" : iph_$ = "I"+"F" ' ligne modifiable pour tester le programme item_add 200," button 1:left 1,10:top 1,50:width 1,50:caption 1," +chr$(34) + "teste" +chr$(34)+": on_click 1,teste: return" item_add 200," if a% = 10 then print " +chr$(34)+"salut"+chr$(34)+":else :print "+chr$(34)+"bonjour"+chr$(34) item_add 200," return " ' ---------------------------------------------------------------------- if count(200)> 0 clear 201 for a%=1 to count(200) ITEM_ADD 201,"LIGNE:"+str$(a%)+" **********************************7,5 trim$(mid$(item_read$(201,count(201)),7,5) )" a$ = item_read$(200,a%) guil%=0 : parenthese%=0 : re$="" :flag_return%=0 :flag_and_if_%=0 if a$ <> "" ' ----' then if left$( trim$(upper$(a$)),6) = "RETURN" then flag_return%=1 for b%=1 to len (a$) c$ = mid$(a$,b%,1) ' ----' then then if c$=chr$(34) then guil%=guil%+1 :if guil%=2 then guil%=0 REM ON A PAS REGARDÉ SI REM OU "'" ' ------------------------------------------------------------- if c$ = "'" and guil% = 0 ' ----' then if b%>1 then item_add 201,trim$(left$(a$,b%-1)):a$="" a$="" :exit_for end_if ' -------------------------------------------------------------- if c$=":" and guil%=0 ' ------------------------------------------------------ if b%=len(a$) ' ---------------------------------------------------------- if instr(trim$(a$)," ") = 0 item_add 201,"#SOUS-PROGRAMME TROUVÉS#" else item_add 201,"@@@erreur@@@ligne "+str$(a%)+": "+trim$(a$)+" (2 points) erreur de syntaxe" end_if end_if ' ----' then if b%>1 then item_add 201,trim$(left$(a$,b%-1)) :a$ = STRING$(b%," " )+mid$(a$,b%+1,len(a$)) :re$="" end_if re$ = re$+c$ ' ------------------------------IF --------------------------' if left$(trim$(upper$(a$)),3) = iph_$ and guil%=0 and instr(upper$(a$),"THEN") = 0 if_% = if_% +1:item_add 201,"#COMPARAISON IF/ " +str$(if_%) : else_% = if_% -1 end_if ' -----------------------------------------------------------' if left$(trim$(upper$(a$)),4)="ELSE" and guil% = 0 and else_% = if_% - 1 else_% = else_%+1 else item_add 201,"@@@erreur ligne:"+str$(a%) + " (ELSE) " + a$ + " erreur de syntaxe" end_if ' ----' IF then then if left$(trim$(upper$(a$)),6)= and_iph_$ and guil%=0 then if_% = if_%-1 : flag_and_if_% = 1 ' ----' then if left$(trim$(upper$(a$)),3)= "REM" and guil% = 0 then a$= "" : exit_for ' ----------------------------------------------------' if b%>3 and guil% = 0 re$=right$(re$,4) ' ----' then if upper$(re$)= "REM " then a$="": exit_for end_if ' ----' next b% end_if ' ----' then if upper$(trim$(a$)) = "RETURN" then item_add 201,"#FIN SOUS-PROGRAMME INTERMÉDIAIRE" ' ----' then if trim$(a$) <> "" then item_add 201,trim$(a$) ' ----' then if flag_and_if_%=1 then item_add 201,"#SORTIE DE BOUCLE IF" ' ----' then if flag_return%=1 then item_add 201,"#FIN SOUS-PROGRAMME à vérifier si c'est pas dans un teste" ' ----' next a% end_if end_sub
' ======================================= sub declare() Height 0,800:width 0,1070
LIST 200: left 200,520:height 200,200:width 200,500 MEMO 201: left 201,520:height 201,150:width 201,500 :top 201,210 alpha 202:left 202,520:top 202,370:caption 202,"décomposition d'une instruction (entre parenthèses)" memo 203:left 203,520 :top 203,390:width 203,200:font_size 203,10:font_bold 203 alpha 204:left 204,800:top 204,370:caption 204,"restant" memo 205:left 205,800:top 205,390:width 205,200:font_size 205,10:font_bold 205 end_sub |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Il y t-il vraiment une erreur (IF/END_IF) Sam 15 Déc 2012 - 20:39 | |
| salut Cosmos,
Tu as un end_if en trop à la ligne 50.
A+ | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Il y t-il vraiment une erreur (IF/END_IF) Sam 15 Déc 2012 - 22:46 | |
| La ligne 50 ne contient pas END_IF. Le END_IF en trop se trouve en ligne 45, je pense. | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Il y t-il vraiment une erreur (IF/END_IF) Sam 15 Déc 2012 - 23:10 | |
| Tout est correct au niveau des IF/END_IF Quelques variables ne sont pas déclarées : else_%, if_% -> cela pose pb surtout en ligne 57... J'ai appliqué la même méthode pour le ELSE et le THEN - Code:
-
error_french declare() decode() END ' ***TRACE***" ' ****************************************************************************** sub decode() dim_local guil%,parenthese%,a$,b$,c$ ,a%,b%,c% , re$ ,flag_return% ,else%, flag_and_if_% ,and_iph_$ , iph_$,vain$,Lce$,if_% ' and_iph_$="END_IF" : iph_$="IF " and_iph_$="E"+"N"+"D_"+"I"+"F" : iph_$ = "I"+"F":vain$="TH"+"EN":Lce$="EL"+"SE" ' ligne modifiable pour tester le programme item_add 200," button 1:left 1,10:top 1,50:width 1,50:caption 1," +chr$(34) + "teste" +chr$(34)+": on_click 1,teste: return" item_add 200," if a% = 10 then print " +chr$(34)+"salut"+chr$(34)+":else :print "+chr$(34)+"bonjour"+chr$(34) item_add 200," return " ' ---------------------------------------------------------------------- if count(200)> 0 clear 201 for a%=1 to count(200) ITEM_ADD 201,"LIGNE:"+str$(a%)+" **********************************7,5 trim$(mid$(item_read$(201,count(201)),7,5) )" a$ = item_read$(200,a%) guil%=0 : parenthese%=0 : re$="" :flag_return%=0 :flag_and_if_%=0 if a$ <> "" ' ----' then if left$( trim$(upper$(a$)),6) = "RETURN" then flag_return%=1 for b%=1 to len (a$) c$ = mid$(a$,b%,1) ' ----' then then if c$=chr$(34) then guil%=guil%+1 :if guil%=2 then guil%=0 REM ON A PAS REGARDÉ SI REM OU "'" ' ------------------------------------------------------------- if c$ = "'" and guil% = 0 ' ----' then if b%>1 then item_add 201,trim$(left$(a$,b%-1)):a$="" a$="" :exit_for end_if ' -------------------------------------------------------------- if c$=":" and guil%=0 ' ------------------------------------------------------ if b%=len(a$) ' ---------------------------------------------------------- if instr(trim$(a$)," ") = 0 item_add 201,"#SOUS-PROGRAMME TROUVÉS#" else item_add 201,"@@@erreur@@@ligne "+str$(a%)+": "+trim$(a$)+" (2 points) erreur de syntaxe" end_if end_if ' ----' then if b%>1 then item_add 201,trim$(left$(a$,b%-1)) :a$ = STRING$(b%," " )+mid$(a$,b%+1,len(a$)) :re$="" end_if re$ = re$+c$ ' ------------------------------IF --------------------------' if left$(trim$(upper$(a$)),3) = iph_$ and guil%=0 and instr(upper$(a$),vain$) = 0 if_% = if_% +1:item_add 201,"#COMPARAISON IF/ " +str$(if_%) : else_% = if_% -1 end_if ' -----------------------------------------------------------' if left$(trim$(upper$(a$)),4)=Lce$ and guil% = 0 and else% = if_% - 1 else% = else%+1 else item_add 201,"@@@erreur ligne:"+str$(a%) + " (ELSE) " + a$ + " erreur de syntaxe" end_if ' ----' IF then then if left$(trim$(upper$(a$)),6)= and_iph_$ and guil%=0 then if_% = if_%-1 : flag_and_if_% = 1 ' ----' then if left$(trim$(upper$(a$)),3)= "REM" and guil% = 0 then a$= "" : exit_for ' ----------------------------------------------------' if b%>3 and guil% = 0 re$=right$(re$,4) ' ----' then if upper$(re$)= "REM " then a$="": exit_for end_if ' ----' next b% end_if ' ----' then if upper$(trim$(a$)) = "RETURN" then item_add 201,"#FIN SOUS-PROGRAMME INTERMÉDIAIRE" ' ----' then if trim$(a$) <> "" then item_add 201,trim$(a$) ' ----' then if flag_and_if_%=1 then item_add 201,"#SORTIE DE BOUCLE IF" ' ----' then if flag_return%=1 then item_add 201,"#FIN SOUS-PROGRAMME à vérifier si c'est pas dans un teste" ' ----' next a% end_if end_sub
' ======================================= sub declare() Height 0,800:width 0,1070
LIST 200: left 200,520:height 200,200:width 200,500 MEMO 201: left 201,520:height 201,150:width 201,500 :top 201,210 alpha 202:left 202,520:top 202,370:caption 202,"décomposition d'une instruction (entre parenthèses)" memo 203:left 203,520 :top 203,390:width 203,200:font_size 203,10:font_bold 203 alpha 204:left 204,800:top 204,370:caption 204,"restant" memo 205:left 205,800:top 205,390:width 205,200:font_size 205,10:font_bold 205 end_sub | |
| | | Invité Invité
| Sujet: Re: Il y t-il vraiment une erreur (IF/END_IF) Sam 15 Déc 2012 - 23:22 | |
| Désolé, de n'avoir pas répondu plus tôt. J'enregistrai une émission de télé directement sur mon écran d'ordinateur. Ce ne peut pas être la ligne 50, c'est le end_if de la ligne 37 La ligne 45 est le end_if de la ligne 41 qui n'a pas de then.
J'ai plutôt l'impression que c'est une mauvaise lecture du parser de Panoramic. J'ai essayé de faire en sorte qu'il ne puisse pas lire directement le IF et END_IF dans les testes, mais il le fait quand-même. Je vais essayé de rajouter des variables de remplacement. Mais j'ai un doute.
Je ne vois pas ce que j'ai pas vu. Tiens, drôle d'expression! Ne pas voir ce qu'on ne voit pas. Aller je laisse.
Nardo, tu interviens au bon moment. Il y a peut-être des variables encore non déclarées, déjà parce qu'étais en train de coder lors du problème apparu, ensuite j'ai changé des noms de variables pour faire l'essai, et j'ai pas vérifié si tout était correct après transformation, et enfin, ce sont des lignes que j'ai repris de mon programme, et j'ai effacé plusieurs lignes qui auraient gênées cette présentation. |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Il y t-il vraiment une erreur (IF/END_IF) Sam 15 Déc 2012 - 23:26 | |
| @cosmos : Le code que j'ai mis "fonctionne" et tu n'as plus de message d'erreur.... | |
| | | Invité Invité
| Sujet: Re: Il y t-il vraiment une erreur (IF/END_IF) Sam 15 Déc 2012 - 23:36 | |
| Je suis en train de vérifié ton programme Nardo. Il faut que je vérifie, premièrement car il ne bloque plus, deuxièmement pour voir pourquoi il se répète toujours la même chose. Voila ce que j'obtenais avant de m'occuper des IF.. - Code:
-
LIGNE:1 **********************************7,5 trim$(mid$(item_read$(201,count(201)),7,5) ) button 1 left 1,10 top 1,50 width 1,50 caption 1,"teste" on_click 1,teste #FIN SOUS-PROGRAMME INTERMÉDIAIRE return LIGNE:2 **********************************7,5 trim$(mid$(item_read$(201,count(201)),7,5) ) if a% = 10 then print "salut" else print "voyou" LIGNE:3 **********************************7,5 trim$(mid$(item_read$(201,count(201)),7,5) ) return <<<== #FIN SOUS-PROGRAMME à vérifier si c'est pas dans un teste dans le memo 201 OK je vérifie, et merci. on s'est recroisé. |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Il y t-il vraiment une erreur (IF/END_IF) Dim 16 Déc 2012 - 0:04 | |
| Quand je vois la gymnastique de Cosmos pour pouvoir tester des mot-clés dans une chaine, cela me fait penser qu'il faudrait vraiment que Jack puisse jeter un coup d’œil (si il a le temps bien sur) sur la gestion des chaines de caractères dans Panoramic car cela fait un bon bout de temps que ce problème est présent... https://panoramic.1fr1.net/t1061-probleme-avec-fonction-printhttps://panoramic.1fr1.net/t1757-jeu-le-guillemet-diaboliqueSans compter le caractère '=' qui n'est pas supporté dans les chaines de caractères passée en direct en paramètre à une procedure SUB() exemple: - Code:
-
Test("a=12") END SUB test(a$) PRINT a$ END_SUB Dans le cas de cosmos, son programme va vite devenir illisible... | |
| | | Invité Invité
| Sujet: Re: Il y t-il vraiment une erreur (IF/END_IF) Dim 16 Déc 2012 - 0:34 | |
| Voila, j'ai repris mon programme, et sans être entré dans tous les détails pour voir si tout est parfait (si il n'y a pas une erreur de réflexion sur ce que j'obtiens), cela marche avec if et end_if. J'ai inversé l'écriture des mots -clés, et la comparaison est dans une variable. exemple: if a$="IF ", cela devient if a$ = fi$, avec fi$=" IF ". C'est vrai, qu'il faudrait qu'on puisse lire les mots-clés dans une chaine. Je croyais que c'étais fait. J'ai plus qu'à continuer avec cette méthode. Merci Nardo, Papydall et Jean-Claude. - Code:
-
error_french declare() decode() END ' ***TRACE***" ' ****************************************************************************** sub decode() dim_local guil%,parenthese%,a$,b$,c$ ,a%,b%,c% , re$ ,flag_return% , flag_fi% ,fi$ ,fi_den$ ,fi% , esle% , flag_fi_end% , neht$:' inversion des lettres fi$= "I"+"F"+" " :fi_den$="EN"+"D_I"+"F" : neht$= "TH"+"EN "
item_add 200," button 1:left 1,10:top 1,50:width 1,50:caption 1," +chr$(34) + "teste" +chr$(34)+": on_click 1,teste: return" item_add 200," if a$= b$" item_add 200," if a% = 10 then print " +chr$(34)+"salut"+chr$(34)+":else :print "+chr$(34)+"bonjour"+chr$(34) item_add 200," end_if" item_add 200," return " if count(200)> 0 clear 201 :fi%=0 :esle%=0 for a%=1 to count(200) ITEM_ADD 201,"LIGNE:"+str$(a%)+" ********************************** a$ = item_read$(200,a%) guil%=0 : parenthese%=0 : re$="" :flag_return%=0 : flag_fi%=0 :flag_fi_end%=0 if a$ <> "" if left$( trim$(upper$(a$)),6) = "RETURN" then flag_return%=1 for b%=1 to len (a$) c$ = mid$(a$,b%,1) if c$=chr$(34) then guil%=guil%+1 :if guil%=2 then guil%=0 REM ON A PAS REGARDÉ SI REM OU "'" if c$ = "'" and guil% = 0 if b%>1 then item_add 201,trim$(left$(a$,b%-1)):a$="" a$="" :exit_for end_if if c$=":" and guil%=0 if b%=len(a$) if instr(trim$(a$)," ") = 0 item_add 201,"#SOUS-PROGRAMME TROUVÉS#" else item_add 201,"@@@erreur@@@ligne "+str$(a%)+": "+trim$(a$)+" (2 points) erreur de syntaxe" end_if end_if if b%>1 then item_add 201,trim$(left$(a$,b%-1)) :a$ = STRING$(b%," " )+mid$(a$,b%+1,len(a$)) :re$="" end_if re$ = re$+c$ if left$(trim$(upper$(a$)),3)=fi$ and guil%=0 and instr( upper$(a$),neht$) = 0 then item_add 203,a$:fi%=fi%+1 : flag_fi%=1 if left$(trim$(upper$(a$)),6)= fi_den$ and guil%=0 then fi%=fi%-1 : flag_fi_end%=1 if left$(trim$(upper$(a$)),3)="REM" and guil%=0 then a$="":exit_for if b%>3 and guil%=0 re$=right$(re$,4) if upper$(re$)= "REM " then a$="": exit_for end_if next b% end_if if upper$(trim$(a$)) = "RETURN" then item_add 201,"#FIN SOUS-PROGRAMME INTERMÉDIAIRE" if flag_fi% = 1 then item_add 201,"#DÉBUT TESTE IF/THEN" if trim$(a$) <> "" then item_add 201,trim$(a$) if flag_return%=1 then item_add 201,"#FIN SOUS-PROGRAMME à vérifier si c'est pas dans un teste" if flag_fi_end%=1 then item_add 201,"#FIN TESTE IF/THEN" next a% end_if end_sub ' ======================================= sub declare() Height 0,800:width 0,1070
LIST 200: left 200,520:height 200,200:width 200,500 MEMO 201: left 201,520:height 201,150:width 201,500 :top 201,210 alpha 202:left 202,520:top 202,370:caption 202,"décomposition d'une instruction (entre parenthèses)" memo 203:left 203,520 :top 203,390:width 203,200:font_size 203,10:font_bold 203 alpha 204:left 204,800:top 204,370:caption 204,"restant" memo 205:left 205,800:top 205,390:width 205,200:font_size 205,10:font_bold 205 end_sub
|
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Il y t-il vraiment une erreur (IF/END_IF) Dim 16 Déc 2012 - 1:00 | |
| Pourquoi ne pas employer des noms en francais ? Tu ne perdra pas en lisibilité : si$ alors$ sinon$ Finsi$ etc... | |
| | | Invité Invité
| Sujet: Re: Il y t-il vraiment une erreur (IF/END_IF) Dim 16 Déc 2012 - 1:15 | |
| Tu as raison. J'y ai pensé, mais une fois codé. Ce qui est fait, est fait. Maintenant que je l'ai intégré dans ma tête, c'est devenu lisible. A moins de voir que pour la suite du programme, je devrais m'en servir constamment, je ne change plus. |
| | | Contenu sponsorisé
| Sujet: Re: Il y t-il vraiment une erreur (IF/END_IF) | |
| |
| | | | Il y t-il vraiment une erreur (IF/END_IF) | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |