| 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: Problème avec des SELECT...CASE imbriqués Sam 29 Sep 2012 - 15:59 | |
| J'ai des problèmes avec des SELECT...CASE imbriqués en 2 niveaux. J'ai un grand SELECT...CASE avec une variable d'aiguillage allant de 1 à 69, pour le moment, et cela augmentera. Dans certains CASE, j'ai un autre SELECT...CASE allant de 1 à 3, par exemple. Pour un seul SELECT...CASE imbriqué, tout marche bien. Dès que j'ai un deuxième, je n'accède plus à AUCUNE rubrique CASE, même celles où il n'y a pas de SELECT...CASE supplémentaire, et même si c'est le premier CASE ! Regardez l'exemple suivant, simplifié à l'extrême. Ma variable i% est positionnée à 1, et je devrais donc avoir le message "1". Mais il n'y a rien du tout ! Maintenant, si j'enlève les apostrophes devant les lignes 58 à 60, j'ai bien mon message. L'activation de ces 3 lignes a pour effet de (1) raccourcir de SELECT...CASE principal, et (2) éliminer un deuxième SELECT...CASE imbriqué. Par contre, le message APRES le SELECT...CASE principal arrive bien ! Il n'exécute donc RIEN DU TOUT dans ce cas ! Je ne comprends absolument pas ce qui se passe. - 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" select v1 case 1 message "v1: 1" case 2 message "v1: 2" case 3 message "v1: 3" end_select ' end_select ' end ' select i% case 21 message "21" select v2 case 1 message "v2: 1" case 2 message "v2: 2" case 3 message "v2: 3" end_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" end_select message "fini" end
| |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 29 Sep 2012 - 18:04 | |
| AS tu essayé de mettre les deux "end_select" à la fin des "case" ? - Code:
-
dim i%,v%
i%=3 v%=3
select i% case 1 message str$(i%) case 2 message str$(i%) case 3 message str$(i%) select v% case 1 message str$(v%) case 2 message str$(v%) case 3 message str$(v%) 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 Sam 29 Sep 2012 - 18:22 | |
| C'est bien ce que je dis. En arrêtant le SELECT principal après le CASE contentant le SELECT imbriqué, pas de problème. C'est d'aller plus loin qui est impossible, tel que montre le programme que j'ai posté.
Au final, je devrai faire un SELECT principal avec environ 150 à 180 positions CASE. Et une vingtaine de ces CASE pricipaux devront avoir un SELECT imbriqué avec entre 3 et 10 CASE.
De toutes façons, la doc ne donne aucune limite à ce niveau-là. Et j'ai fait l'essai: si j'enlève mes SELECT imbriqués, le SELECT principal fonctionne bien, quelque soit son nombre de CASE. Ce sont donc bien les SELECT imbriqués qui sèment la pagaille. | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 29 Sep 2012 - 18:32 | |
| regardes çà par curiosité - Code:
-
dim i%,v%
i%=3 v%=3
select i% case 1 message str$(i%) case 2 message str$(i%) case 3 message str$(i%) case2() case 4 message str$(i%) case 5 message str$(i%) end_select end
sub Case2() select v% case 1 message str$(v%) case 2 message str$(v%) case 3 message str$(v%) end_select end_sub là tu passes par dessus mais c'est le sub qui a un comportement curieux... | |
|
| |
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 Sam 29 Sep 2012 - 18:38 | |
| En effet. Ce n'est pas normal. | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 29 Sep 2012 - 18:40 | |
| Encore un truc rigolo - Code:
-
dim i%,v% label case2 i%=3 v%=3
cases() end
sub cases() select i% case 1 message str$(i%) case 2 message str$(i%) case 3 message str$(i%) gosub case2 case 4 message str$(i%) case 5 message str$(i%) end_select end_sub
Case2: select v% case 1 message str$(v%) case 2 message str$(v%) case 3 message str$(v%) end_select return Et pourtant tout est déclaré... | |
|
| |
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 Sam 29 Sep 2012 - 18:54 | |
| Suite à la remarque de Ygeronimi, j'ai sorti les SELECT imbriqués pour les placer dans des SUB. Maintenant, le SELECT principal ne bloque plus - cela s'exécute. Mais dès que l'indice est 20 ou 21, le SELECT de la procédure s'exécute bien, mais la procédure est incapable de terminer normalement. - Code:
-
' test SELECT.bas
dim i% dim v1, v2 v1 = 2 v2 = 3
i% = 21 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" x1() ' select v1 ' case 1 ' message "v1: 1" ' case 2 ' message "v1: 2" ' case 3 ' message "v1: 3" ' end_select ' end_select ' end ' select i% case 21 message "21" x2() ' select v2 ' case 1 ' message "v2: 1" ' case 2 ' message "v2: 2" ' case 3 ' message "v2: 3" ' end_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" end_select message "fini" end
sub x1() select v1 case 1 message "v1: 1" case 2 message "v1: 2" case 3 message "v1: 3" end_select end_sub
sub x2() select v2 case 1 message "v2: 1" case 2 message "v2: 2" case 3 message "v2: 3" end_select end_sub
Et à la place des SUB, j'ai mis des sous-programmes classiques par GOSUB, et là, erreur également: RETURN without GOSUB: - Code:
-
' test SELECT.bas
label x1,x2
dim i% dim v1, v2 v1 = 2 v2 = 3
i% = 21 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 x1 ' select v1 ' case 1 ' message "v1: 1" ' case 2 ' message "v1: 2" ' case 3 ' message "v1: 3" ' end_select ' end_select ' end ' select i% case 21 message "21" gosub x2 ' select v2 ' case 1 ' message "v2: 1" ' case 2 ' message "v2: 2" ' case 3 ' message "v2: 3" ' end_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" end_select message "fini" end
x1: select v1 case 1 message "v1: 1" case 2 message "v1: 2" case 3 message "v1: 3" end_select return
x2: select v2 case 1 message "v2: 1" case 2 message "v2: 2" case 3 message "v2: 3" end_select return
Il y a bien un problème qui est lié aux commandes 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 Sam 29 Sep 2012 - 19:06 | |
| Et pour compléter le tableau: Si je prends la version avec les procédures encadrant les SELECT imbriqués, et si j'y remplace les SELECT par des IF successifs, tout marche bien ! Il y a bien un problème avec SELECT ! - Code:
-
' test SELECT.bas
dim i% dim v1, v2 v1 = 2 v2 = 3
i% = 21 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" x1() ' select v1 ' case 1 ' message "v1: 1" ' case 2 ' message "v1: 2" ' case 3 ' message "v1: 3" ' end_select ' end_select ' end ' select i% case 21 message "21" x2() ' select v2 ' case 1 ' message "v2: 1" ' case 2 ' message "v2: 2" ' case 3 ' message "v2: 3" ' end_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" end_select message "fini" end
sub x1() if v1=1 message "v1: 1" end_if if v1=2 message "v1: 2" end_if if v1=3 message "v1: 3" end_if end_sub
sub x2() if v2=1 message "v2: 1" end_if if v2=2 message "v2: 2" end_if if v2=3 message "v2: 3" end_if end_sub
A mon niveau, ne n'ai plus d'idée pour aller plus loin dans l'analyse du problème. Je vais laisser à Jack le temps de regarder tout cela, et en attendant, j'utilise cette dernière version avec des IFs successifs pour remplacer les SELECT de deuxième niveau. | |
|
| |
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 Sam 29 Sep 2012 - 20:46 | |
| Salut tout le monde. J’ai essayé plusieurs manières avec des SELECT imbriqués et … ça ne marche pas correctement. J’ai reporté les autres SELECT à la fin de la sélection et ça a marché. Il semble qu'on ne peut pas ajouter des CASE après END_SELECT Voici le code de Klaus modifié - Code:
-
' test SELECT.bas
dim i% dim v1, v2 v1 = 3 v2 = 3 ' essayer avec les 3 valeurs de i% ' ça marche, mais les SELECT imbriqués sont mis à la fin de tous les CAS
' i% = 5 i% = 20 ' i% = 25 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" ' on saute le cas 20 pour le mettre à la fin case 21 message "21" 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" ' on reprend ici le cas 20 case 20 message "i% = 20" select v1 case 1 message "v1: 1" case 2 message "v1: 2" case 3 message "v1: 3" select v2 case 1 : message "v2 : 1" case 2 : message "v2 : 2" case 3 : message "v3 : 3" end_select : ' fin de select v2 end_select : ' fin de select v1 end_select : ' fin de select i% message "fini" end
Dernière édition par papydall le Sam 29 Sep 2012 - 21:24, édité 3 fois (Raison : POUR MODIFICATION DU CODE) | |
|
| |
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 Sam 29 Sep 2012 - 21:07 | |
| Effectivement, Papydall ! Si le second SELECT est le dernier, ça semble marcher. Mais dans mon cas, il faut que je puisse imbriquer au bas mot une dizaine de SELECT de deuxième niveau, et c'est impossible alors que la syntaxe est parfaitement correcte.
Pour le moment, je m'en sors avec des séries de IFs en chaîne à la place des SELECT de deuxième niveau, mais c'est vraiment pas beau ! J'espère qu'à terme, Jack trouvera une solution. Je ne suis pas pressé car j'ai une solution d'attente qui fonctionne bien - c'est juste que c'est pas normal. | |
|
| |
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 Sam 29 Sep 2012 - 21:14 | |
| @Klaus
J’ai édité le code posté ci-haut : fais un retour pour revoir. J’ai ajouté un troisième SELECT
Il y a peut-être une solution pour contourner le problème. Je dis bien pour contourner le problème : ce n’est donc pas une solution !
| |
|
| |
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 Sam 29 Sep 2012 - 21:48 | |
| Oui, ça marche tant qu'il n'y a pas d'autres SELECT au niveau deux, par exemple pour i%= ou i%=23... | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Dim 30 Sep 2012 - 0:50 | |
| Klaus as tu essayé de lancer un sub dans ton select dans lequel tu ferais ton autre select ?
select i% case 1 Traite_cas1() ... end_select : ' fin de select i%
...
SUB Traite_cas1() select j% case 1 Traitement1 ... end_select : ' fin de select i% END_SUB
| |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| |
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Dim 30 Sep 2012 - 1:27 | |
| Ben si ygeronimi... Traitement de plusieurs cases imbriqués Donc si ça ne marche pas direct, je propose de le décomposer en sub ... Je ne vois pas ce qui m'a échappé ... Je dirais même que ce qui m'a échappé, m'échappe | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 30 Sep 2012 - 1:33 | |
| Oui mais si tu avais tout lu, tu aurais vu que l'on s'y est déjà cassé les dents dessus .... ( mon deuxième post, 18h32, c'est le sub qui plante) | |
|
| |
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 Dim 30 Sep 2012 - 8:34 | |
| @Jecehel: Mon post sur la page précédente de 18hh54 donne la tentative avec extraction du SELECT dans un SUB. R2sultat: plantage... | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Dim 30 Sep 2012 - 8:41 | |
| | |
|
| |
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 Dim 30 Sep 2012 - 20:27 | |
| - Klaus a écrit:
- @Jecehel:
Mon post sur la page précédente de 18hh54 donne la tentative avec extraction du SELECT dans un SUB. R2sultat: plantage... C'est même grave à ce stade... | |
|
| |
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 - 8:19 | |
| 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 ? | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 2 Oct 2012 - 15:19 | |
| @Klaus,
Avec toutes les formules que nous avons testé, je pense que seul le grand chef peut nous en dire plus sur comment doit agir un select case dans le cas d'imbrication. | |
|
| |
Invité Invité
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Mar 2 Oct 2012 - 15:59 | |
| Est-ce que cette méthode est idiote? - Code:
-
' teste case sub label truc dim i% ,a% memo 1:for a%=1 to 100:item_add 1,a%:next a%
cas(10)
end sub cas(a%) dim_local b% i%=5 select a% case 1 case 2 case 10 gosub truc end_select end_sub
truc: truc(item_read$(1,i%)) return sub truc(b%) message b% end_sub J'ai pas le temps de fignoler. |
|
| |
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 - 16:51 | |
| Salut Cosmos, Dans ton code cette ligne ne déclenche pas d'erreur: truc(item_read$(1,i%))Est ce que je découvre quelque chose que je ne savais pas ou la syntaxe n'est pas bonne. Regarde ce qui se passe en déclarant la variable truc et en changeant la label truc par machin pour éviter la confusion avec Sub truc (à moins que tu l'ais fait volontairement pour montrer le problème) et avec truc=val(item_read$(1,i%)) - Code:
-
' teste case sub label machin dim i% ,a%,truc memo 1:for a%=1 to 100:item_add 1,a%:next a%
cas(10)
end sub cas(a%) dim_local b% i%=5 select a% case 1 case 2 case 10 gosub machin
end_select end_sub
machin: truc=val(item_read$(1,i%))
return
sub truc(b%) message b% end_sub
| |
|
| |
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 - 16:59 | |
| Autant pour moi Cosmos, je viens de comprendre, là t'es trop fort: imbriqué un mot clé dans une déclaration de SUB() j'aurais pas osé C'est très intéressant si c'est valide.... A+ | |
|
| |
Invité Invité
| Sujet: Re: Problème avec des SELECT...CASE imbriqués Mar 2 Oct 2012 - 17:19 | |
| Je ne suis pas bien sur de moi. De plus le dlist est inutile, vu que ce sont des n° de lignes qui sont dedans. str$(i%) peut remplacer item_read$... J'ai regardé rapidement avant de fermer mon ordi. Cela demande une plus grande réflexion. |
|
| |
Contenu sponsorisé
| Sujet: Re: Problème avec des SELECT...CASE imbriqués | |
| |
|
| |
| Problème avec des SELECT...CASE imbriqués | |
|