| Problème avec des SELECT...CASE imbriqués | |
|
+5Nardo26 Jicehel papydall Yannick Klaus 9 participants |
|
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Mar 2 Oct 2012 - 17:20 | |
| @Cosmos70: ITEM_READ$ est une fonction normale de Panoramic, et à ce titre, on peut l'inclure dans une expression, la passer en paramètre, etc. Donc, rien d'anormal dans ton code - rien que du Panoramic parfaitement normal et qui marche depuis longtemps.
Ceci dit, cela n'a pas vraiment de rapport avec le problème initial que j'ai soulevé dans mon post initial. Pour le moment, comme je l'ai déjà dit, je contourne le problème avec des séries de IF en chaîne ce qui est très lourd. Mon SELECT_CASE principal comprend à ce jour plus de 150 CASE, et il va encore bien grandir. J'espère vraiment avoir bientôt au moins une idée de ce qui va se passer, car je devrai reprendre tout le code existant pour le réajuster.
Je vais oser une suggestion: Jack, si tu constates qu'il y a vraiment une anomalie, aurais-tu l'occasion d'inclure la correction dans la version instantanée dont tu as parlé au sujet des variables locales et paramètres formels en lien avec la fonction ADR() ? Ce serait vraiment super ! | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Mar 2 Oct 2012 - 17:21 | |
| @Cosmos70: es-tu sûr d'avoir choisi le bon fil de discussion ? | |
|
| |
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Mar 2 Oct 2012 - 17:39 | |
| - Citation :
- @Cosmos70:
ITEM_READ$ est une fonction normale de Panoramic, et à ce titre, on peut l'inclure dans une expression, la passer en paramètre, etc. Donc, rien d'anormal dans ton code - rien que du Panoramic parfaitement normal et qui marche depuis longtemps.
Je prends la réponse pour moi. Je viens de grandir un peu..... A+ | |
|
| |
Atom
Nombre de messages : 26 Date d'inscription : 11/07/2012
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Mar 2 Oct 2012 - 18:36 | |
| Personnellement j'ai eu le même problème il y a 1 mois. Je voulais alors regarder si le problème était dans les versions antérieures de Panoramic mais comme on ne peut pas télécharger les anciennes versions j'ai n'ai pas pu essayer.
J'ai aussi un autre problème à propos d'une boucle For. Ma boucle n'allait qu'à 1 alors qu'elle aurait dû aller jusqu'à 5. Curieusement si je changeais i par j le problème se retirait. Et puis il y a pleins d'autres bugs étranges que j'ai rencontrer de temps à autres. | |
|
| |
Invité Invité
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Mar 2 Oct 2012 - 18:46 | |
| - Klaus a écrit:
- @Cosmos70:
es-tu sûr d'avoir choisi le bon fil de discussion ? Il me semble que oui. Je suis d'accord avec toi pour demander l'imbrication des cases successifs. L'idée était provisoirement de remplacer select en 2ème niveau en sub t.(1) sub t.(2)... C'est un peu plus lourd, j'en convient. C'est une idée qui m'est venu au moment que j'allais quitter pour rangé le bois que j'ai coupé ce matin. Un essai rapide qui semblait marché. C'est ce que j'ai pensé au départ, mais entre temps en faisant mon boulot, je n'en étais plus très sûr. Je sais que c'est faisable, et ... et j'arrête. Maintenant je pense que Jack a vu ton message, même si il ne répond pas. @Jean-Claude. Tu es comme moi, tu réponds trop vite. |
|
| |
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Mar 2 Oct 2012 - 19:39 | |
| C'est vrai Cosmos, mais çà m'a permis d'apprendre. A+ | |
|
| |
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Mar 2 Oct 2012 - 20:09 | |
| - Klaus a écrit:
- Timidement, je relance un peu... Mon problème de SELECT...CASE persiste. Ai-je commis une erreur ou s'agit-il vraiment d'un problème technique dans Panoramic ?
Problème technique... problème technique... Je crois qu'il faut arrêter de tourner autour du pot et employer le mot qui correspond le plus à ton problème. Je pense que Jack ne nous linchera pas si on l'emploi pour des raisons valables... Si on doit bricoler une usine à gaz (sans succès d'ailleurs) pour arriver à faire 2 select imbriqués, je pense que c'est un BUG !Ça y est, puisque personne ne veut le dire, le mot est lâché... Cela dis, cela risque d'être compliqué à Jack de résoudre ce problème (je ne sais pas comment Jack gère ce type de commande mais peut être que cela implique des notions de ré-entrance?) et cela retardera encore plus l'arrivée des nouvelles fonctionnalités prévues dans la prochaine version... mais peut être qu'une fois résolu, cela apportera un + aux futures fonctions?... | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Mar 2 Oct 2012 - 21:02 | |
| - Atom a écrit:
- J'ai aussi un autre problème à propos d'une boucle For. Ma boucle n'allait qu'à 1 alors qu'elle aurait dû aller jusqu'à 5. Curieusement si je changeais i par j le problème se retirait. Et puis il y a pleins d'autres bugs étranges que j'ai rencontrer de temps à autres.
Il ne faut pas rester avec ces incertitudes sous le coude, le mieux (après vérification de son code bien sûr) est de soumettre un exemple ici , c'est souvent une incompréhension quelconque et c'est bête de perdre son temps (et son moral) là-dessus ! | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Mar 2 Oct 2012 - 22:22 | |
| S'il vous plaît, les gars - si vous avez un problème différent de celui qui fait l'objet du fil de discussion en cours - OUVREZ UN NOUVEAU FIL DE DISCUSSION ! Sinon, personne ne comprendras plus ce qui se passe ! Chaque problème mérite son fil de discussion séparé ! | |
|
| |
Invité Invité
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Mer 3 Oct 2012 - 0:27 | |
| - Spoiler:
je retire, je mets ailleurs. Il y quelque chose qui plait pas, et je suis le seul à pas savoir pourquoi!
|
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Lun 4 Nov 2013 - 16:51 | |
| Je viens de me casser la tête un bon moment sur des SELECT imbriqués avant de me souvenir vaguement que ça avait été évoqué ici... Évoqué par Klaus en septembre 2012, le comportement est assez étrange, et apparemment toujours pas de solution. Je relance ici, à tout hasard.
Bon, eh bien il faut que je trouve une solution de rechange... | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Lun 4 Nov 2013 - 16:58 | |
| Effectivement, toujours pas de solution. Il faut éviter ces constructions et programmer différemment. Peut-être en plaçant le second niveau de SELECT_END_SELECT dans uns SUB ? A vérifier... | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Lun 4 Nov 2013 - 17:05 | |
| YES !!!!!!!!!!!!!!!!En plaçant les SELECT...END_SELECT du deuxième niveau dans une SUB, ça marche ! La preuve: voici le sour ce mon post initial adapté à cette technique: - Code:
-
' test SELECT.bas
dim i% dim v1, v2 v1 = 2 v2 = 3
i% = 1 select i% case 1 message "1" case 2 message "2" case 3 message "3" case 4 message "4" case 5 message "5" case 6 message "6" case 7 message "7" case 8 message "8" case 9 message "9" case 10 message "10" case 11 message "11" case 12 message "12" case 13 message "13" case 14 message "14" case 15 message "15" case 16 message "16" case 17 message "17" case 18 message "18" case 19 message "19" case 20 message "20" case20 ' end_select ' end ' select i% case 21 case21() case 22 message "22" case 23 message "23" case 24 message "24" case 25 message "25" case 26 message "26" case 27 message "27" case 28 message "28" case 29 message "29" case 30 message "30" case 31 message "31" case 32 message "32" case 33 message "33" case 34 message "34" case 35 message "35" case 36 message "36" case 37 message "37" case 38 message "38" case 39 message "39" case 40 message "40" case 41 message "41" case 42 message "42" case 43 message "43" case 44 message "44" case 45 message "45" case 46 message "46" case 47 message "47" case 48 message "48" case 49 message "49" case 50 message "50" case 51 message "51" case 52 message "52" case 53 message "53" case 54 message "54" case 55 message "55" case 56 message "56" case 57 message "57" case 58 message "58" case 59 message "59" case 60 message "60" case 61 message "61" case 62 message "62" case 63 message "63" case 64 message "64" case 65 message "65" case 66 message "66" case 67 message "67" case 68 message "68" case 69 message "69" end_select message "fini" end
sub case20() select v1 case 1 message "v1: 1" case 2 message "v1: 2" case 3 message "v1: 3" end_select end_sub
sub case21() message "21" select v2 case 1 message "v2: 1" case 2 message "v2: 2" case 3 message "v2: 3" end_select end_sub
Heureka !!!!!!!!!!!!!!! | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Lun 4 Nov 2013 - 17:12 | |
| Oui Klaus, c'est une belle solution. A première vue, le problème se pose s'il y a plusieurs CASEs dans un SELECT qui contiennent eux-mêmes d'autres SELECT. S'il n'y en a qu'un seul ça semble marcher. C'était mon cas, j'en avais deux, j'en ai supprimé un (remplacé par quelques IF, il y avait peu de cas) et comme ça ça marche (mais bon, il y a quand même une anomalie): - Code:
-
SELECT x CASE 1 CASE 2 ... CASE z SELECT y CASE ... END_SELECT END_SELECT | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Lun 4 Nov 2013 - 17:22 | |
| Oui, c'est bien ça le problème. Si plusieurs SELECT...END_SELECT sont imbriqués dans le code, ça foire. Il suffit d'extraire le deuxième niveau pour le placer dans une SUB, et c'est bon. D'ailleurs, si on les place dans un sous-programme appelé par GOSUB, c'est bon aussi: - Code:
-
' test SELECT.bas
label case20, case21
dim i% dim v1, v2 v1 = 2 v2 = 3
i% = 1 select i% case 1 message "1" case 2 message "2" case 3 message "3" case 4 message "4" case 5 message "5" case 6 message "6" case 7 message "7" case 8 message "8" case 9 message "9" case 10 message "10" case 11 message "11" case 12 message "12" case 13 message "13" case 14 message "14" case 15 message "15" case 16 message "16" case 17 message "17" case 18 message "18" case 19 message "19" case 20 message "20" ' case20 gosub case20 ' end_select ' end ' select i% case 21 ' case21() gosub case20 case 22 message "22" case 23 message "23" case 24 message "24" case 25 message "25" case 26 message "26" case 27 message "27" case 28 message "28" case 29 message "29" case 30 message "30" case 31 message "31" case 32 message "32" case 33 message "33" case 34 message "34" case 35 message "35" case 36 message "36" case 37 message "37" case 38 message "38" case 39 message "39" case 40 message "40" case 41 message "41" case 42 message "42" case 43 message "43" case 44 message "44" case 45 message "45" case 46 message "46" case 47 message "47" case 48 message "48" case 49 message "49" case 50 message "50" case 51 message "51" case 52 message "52" case 53 message "53" case 54 message "54" case 55 message "55" case 56 message "56" case 57 message "57" case 58 message "58" case 59 message "59" case 60 message "60" case 61 message "61" case 62 message "62" case 63 message "63" case 64 message "64" case 65 message "65" case 66 message "66" case 67 message "67" case 68 message "68" case 69 message "69" end_select message "fini" end
' sub case20() case20: select v1 case 1 message "v1: 1" case 2 message "v1: 2" case 3 message "v1: 3" end_select ' end_sub return
' sub case21() case21: message "21" select v2 case 1 message "v2: 1" case 2 message "v2: 2" case 3 message "v2: 3" end_select 'end_sub return
C'est donc la position "géographique" des SELECT...END_SELECT de deuxième niveau qui semble poser problème. C'est pour Jack, tout ça... | |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Lun 4 Nov 2013 - 20:22 | |
| Tu as raison, il doit y avoir un problème dans la mémorisation des adresses de retour de select... Comme tu dis, c'est pour Jack (des fois qu'il ne saurait pas trop quoi faire... ). L'essentiel c'est d'avoir des solutions de secours, comme celle que tu suggères, et de pouvoir contourner l'obstacle. | |
|
| |
Invité Invité
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Lun 4 Nov 2013 - 21:56 | |
| Çà alors! ça ne fonctionne que si c'est le dernier de la liste. - Code:
-
teste(3)
end ' ************ sub teste(x) dim_local y y = 2 SELECT x CASE 1 CASE 2 CASE 3 SELECT y CASE 1:message y CASE 2:message y END_SELECT ' case 4 :' si on enlève l'apostrophe il n'y a plus de message END_SELECT end_sub |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Lun 4 Nov 2013 - 22:01 | |
| Ben oui cosmos, c'est ce que j'avais remarqué aussi. Comme je disais plus haut j'ai un SELECT avec 4 CASE, et ça marche si je laisse le SELECT imbriqué dans le 4ème CASE, mais pas ailleurs. (je m'en suis aperçu en rajoutant un Select dans le 3ème, et là plus rien ne marchait). | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Lun 4 Nov 2013 - 22:13 | |
| Pardon Klaus, mais ça ne marche pas ! Change la valeur initiale de i% : 20 ou 21 au lieu de 1 et relance le code. Avec SUB …END_SUB , message d’erreur END_SUB without CALL .. Avec GOSUB…RETURN, message d’erreur Return without Gosub …
| |
|
| |
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Lun 4 Nov 2013 - 22:50 | |
| Exact papydall, il doit y avoir un problème plus général de stockage (pile) des adresses de retour de sous-programmes... | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Lun 4 Nov 2013 - 22:52 | |
| Exact, Papydall ! Il y a à l'évidence un vrai bug. J'espère seulement que ces petits morceaux de code permettront à Jack de cerner le problème ! | |
|
| |
Invité Invité
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Lun 4 Nov 2013 - 22:54 | |
| bon, je remets dans ma culo.. - bof!:
J'allais laissé ce post de côté, mais au vu de celui de Papydall, je fais un rapport sur ce que j'ai constaté avec les SUB. C'est un problème que j'ai eu avec Pagiciel, pour tourner les difficultés dans tous les sens pour que ça marche. Avec le programme que j'ai en cours, j'ai constaté des messages d'erreur (je le dis de mémoire) du genre: traduit : nom déjà défini, ou sub je ne sais plus, enfin j'avais compris qu'elle était déjà définie. Ce que je crois, problème après problème, qu'une sub lorsqu'on la détourne a deux réactions selon le cas. En cliquant sur un bouton qui envoi à un autre sous-programme, on peut ne pas avoir quitter la sub. Je pense que cela dépend du code que l'on fait, et de la durée de ce code. Comme la boucle d’évènement est faite par Panoramic, (je ne sais pas si c'est un timer, ou un constat de chaque objet événementielle ), selon dans quel temps le clic a eu lieu, il y a erreur ou non. Par ailleurs, mais il faudrait prendre le temps de faire de vrai contrôle (et je n'ai pas le temps), si le clic d'un objet a lieu pendant l'exécution d'une boucle, il doit y avoir queue de file, donc blocage sur la sub. J'ai déjà fait l'essai de mettre end_sub dans un sous-programme, sans erreur, ce qui veut bien dire qu'on n'a pas quitté la sub avant, même si on était ailleurs. Mais c'est pas une solution, car un nouvel appel de la sub provoque une erreur. Dans mon programme, j'ai du faire une boucle pour voir les évènements, et testé avec clicked() sans avoir mis de on_click, ou alors ailleurs désactivé tous les objets pour éviter une dispersion, et avoir le contrôle du code. C'est de cette façon que mon programme fonctionne, sinon, je me retrouve avec les messages comme quoi les noms des dim_locale sont définis.. Une analyse de mes codes avant transformation, me me permettait pas de voir une erreur de conception. Je ne sais pas si vous avez déjà eu cela, mais dès que des sub deviennent importante, on a des erreurs. Donc pour moi un code important qui peut-être perturbé par des évènements, il faut les désactiver, ou les contrôler dans une boucle sans qu'ils soient activer par les on_... Il faudrait avoir un moyen de savoir si on est encore dans une sub ou non après un évènement. J'avais voulu faire un programme teste pour montrer, mais avec des petits programmes, je n'ai pas d'erreur. Donc je pense que c'est à cause d'un timer de Panoramic (il n'y en a pas dans mon programme) que les problèmes se pose. Mais je ne suis pas Jack, et surement il doit dire que je dis n'importe quoi. On se croise JL35. là je n'ai pas d'idée. On se croise Klaus, est-ce que je vais pouvoir envoyer mon message?
- .:
Apparemment je suis le seul a voir ce problème. Désolé.
Dernière édition par cosmos70 le Mar 5 Nov 2013 - 4:09, édité 2 fois |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Mar 5 Nov 2013 - 1:41 | |
| Je crois qu’il y a un problème d’adresse de retour si on utilise SUB … END_SUB ou GOSUB…RETURN Dans les deux cas, lors du retour, le programme va se brancher sur l’instruction qui suit celle qui a fait appel (soit à la procédure SUB, soit au sous-programme par GOSUB), c’est-à-dire l’instruction CASE suivante. A ce moment, je pense que PANORAMIC ne sait plus où il en est. Le code suivant qui contient un CASE après END_SELECT ne provoque pas d’erreur mais le programme y reste coincé et n'exécute pas l'instruction PRINT - Code:
-
dim i i = 2 select i case 1 : message "hello" case 2 : message "bye" end_select case 3 : message "impossible" print "ok"
Pour revenir au code de Klaus, voici ma solution qui permet l’imbrication de SELECT…END_SELECT soit par appel à une SUB soit par GOSUB (comme l’a indiqué Klaus) mais en gérant soi-même le branchement : autrement dit en se branchant à la fin de tous les CASEs. ça marche mais ça n’empêche pas qu’il y ait un bug ! - Code:
-
' test SELECT.bas
label case20,fin_select
dim i% dim v1, v2 v1 = 2 v2 = 3
i% = 20 select i% case 1 : message "1" case 2 : message "2" case 3 : message "3" case 4 : message "4" case 5 : message "5" case 6 : message "6" case 7 : message "7" case 8 : message "8" case 9 : message "9" case 10 : message "10" case 11 : message "11" case 12 : message "12" case 13 : message "13" case 14 : message "14" case 15 : message "15" case 16 : message "16" case 17 : message "17" case 18 : message "18" case 19 : message "19" case 20 : message "20" : gosub case20 : goto fin_select ' si on enlève goto fin_select, il y aura une erreur. case 21 : message "21" : case21() : goto fin_select case 22 : message "22" case 23 : message "23" case 24 : message "24" case 25 : message "25" case 26 : message "26" case 27 : message "27" case 28 : message "28" case 29 : message "29" case 30 : message "30" case 31 : message "31" case 32 : message "32" case 33 : message "33" case 34 : message "34" case 35 : message "35" case 36 : message "36" case 37 : message "37" case 38 : message "38" case 39 : message "39" case 40 : message "40" case 41 : message "41" case 42 : message "42" case 43 : message "43" case 44 : message "44" case 45 : message "45" case 46 : message "46" case 47 : message "47" case 48 : message "48" case 49 : message "49" case 50 : message "50" case 51 : message "51" case 52 : message "52" case 53 : message "53" case 54 : message "54" case 55 : message "55" case 56 : message "56" case 57 : message "57" case 58 : message "58" case 59 : message "59" case 60 : message "60" case 61 : message "61" case 62 : message "62" case 63 : message "63" case 64 : message "64" case 65 : message "65" case 66 : message "66" case 67 : message "67" case 68 : message "68" case 69 : message "69" fin_select: end_select message "fini" end ' ==============================================================
case20: select v1 case 1 message "v1: 1" case 2 message "v1: 2" case 3 message "v1: 3" end_select
return ' ================================================================ sub case21() message "21" select v2 case 1 message "v2: 1" case 2 message "v2: 2" case 3 message "v2: 3" end_select end_sub ' =================================================================
| |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Mar 5 Nov 2013 - 1:46 | |
| Intéressant ! Cela devrait donner du grain à moudre à Jack ! | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Mar 5 Nov 2013 - 1:55 | |
| Bon, quand ça marche, en général on ne dit rien, mais quand ça ne marche pas, on essaye de savoir pourquoi. C’est le moins que l’on puisse faire pour éventuellement aider à trouver une solution. Attention :Quand ça ne marche pas, ne faites pas ceci | |
|
| |
Contenu sponsorisé
| Sujet: Re: Problème avec des SELECT...CASE imbriqués | |
| |
|
| |
| Problème avec des SELECT...CASE imbriqués | |
|