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 |
|
|
| Problème avec ASC(a$) | |
| | Auteur | Message |
---|
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Problème avec ASC(a$) Sam 29 Aoû 2009 - 17:02 | |
| Bonjour PANORAMIC Voici le code qui pose problème: - Code:
-
label insert,finsaisie,quit
dim a$,b$
left 0,223 top 0,182 width 0,550 height 0,492 caption 0,"Form 0" edit 1 left 1,81 top 1,64 on_change 1,insert
button 2 left 2,340 top 2,200 width 2,70 height 2,20 caption 2,"QUITTER" on_click 2,quit
set_focus 1
end rem -----------------------
insert: a$=upper$(text$(1)) if asc(a$)<47 or asc(a$)>90 then message "Caractère interdit":text 1,"":return if scancode=13 then set_focus 2:goto finsaisie b$=inkey$ goto insert if a$=" " then goto finsaisie return
finsaisie: print_locate 10,10:print a$ return
quit: terminate
J'ai le message d'erreur suivant (33) not correct logical..... à la ligne 31, Je ne comprend pas. De plus si je clique direct sur le boutton QUITTER je retombe sur le problème de violation déja connu. HELP! A+ | |
| | | Invité Invité
| Sujet: Re: Problème avec ASC(a$) Sam 29 Aoû 2009 - 20:13 | |
| Sur ton code, il y a 2 lignes que je ne comprends pas: - Code:
-
if a$=" " then goto finsaisie return
Normalement, elles ne servent à rien, vu qu'il y a un branchement impératif avec : GOTO insert ensuite il y a - Code:
-
a$=upper$(text$(1)) Je suis encore tout neuf avec panoramic, mais normalement dans EDIT, tu entre un texte, et non un caractère. Je ne crois pas que l'on puisse avoir le code asc d'une phrase: Dans un basic normal, le code asci d'un caractère est de 0 à 255. Je ne peux pas essayer ton programme, il y a un blocage A+ |
| | | Invité Invité
| Sujet: Re: Problème avec ASC(a$) Sam 29 Aoû 2009 - 20:52 | |
| Je me suis tromper de ligne lors de la copie, j'ai un petit écran sur EEEPC l'erreur à mon sens c'est: - Code:
-
if asc(a$)<47 or asc(a$)>90 then message "Caractère interdit":text 1,"":return Désolez pour mon erreur ( à la place de:a$=upper$(text$(1)) ) salutation |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Problème avec ASC(a$) Dim 30 Aoû 2009 - 8:33 | |
| Tu as raison la ligne if a$=" " then goto finsaisie ne sert a rien.
la ligne qui BUG est bien: if asc(a$)<47 or asc(a$)>90 then message "Caractère interdit":text 1,"":return C'est justement l'objet de mon appel a l'aide. Pour moi je pense que la fonction a un BUG, mais bien entendu je peus me tromper. Le but de cette ligne est d'empêcher l'utilisateur de saisir autre chose qu'une lettre ou un chiffre comme premier caractère dans l'EDIT. Si tu mets un rem devant cette ligne cela fonctionne. J'attend que PANORAMIC rentre de vacances, il aura surement une réponse a fournir. A+ | |
| | | Invité Invité
| Sujet: Re: Problème avec ASC(a$) Dim 30 Aoû 2009 - 10:22 | |
| Salut Jean Claude Il y a une chose qui me gène dans ton code : Pour moi la fonction asc( caractère ) fonctionne très bien, le problème c'est que avec EDIT, tu ne chope pas le 1er caractère, mais la chaine complète avec TEXT$(...), et là il y a erreur. Si tu veux prendre le 1er caractère, revois ton code avec left$(a$,1). Pour l'instant je suis très occupé ailleurs pour te proposer une solution, j'ai des journées chargées. Mais revois ton scripte, je suis sur que tu trouvera. Ainsi: - Code:
-
a$=upper$(text$(1)) malgrès ma rectification est au départ la source d'erreur. A+ |
| | | Invité Invité
| Sujet: Re: Problème avec ASC(a$) Dim 30 Aoû 2009 - 10:55 | |
| J'ai toutefois vérifier la fonction avec asc() et le teste, j'ai réécris un scripte rapide pour voir (la curiosité ) - Code:
-
dim a$ ,l%
repeat input a$ print asc(a$) a$= left$(a$,1) : l%=asc(a$) if l%< 47 or l%> 90 then message "avec l% hors limite" if asc(a$)<47 or asc(a$)>9O then message "hors limite" until a$ = chr$(13) la ligne avec l% fonctionne, et la tienne ne fonctionne pas. Effectivement, il y a problème. A ce propos j'ai trouvé une erreur bizarre: - Code:
-
dim a$ ,l% ,foto%
for foto%=1 to 10 print foto% next foto% et j'obtiens l'erreur suivante: (42) Loop FOR/NEXT: Not Correct START EXPRESSION: .Line: 3 A+ |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Problème avec ASC(a$) Dim 30 Aoû 2009 - 11:26 | |
| Si j'ai utilisé la fonction upper$ c'est a cause de la ligne if asc(a$)..... qui utilise les codes ASCII de 48 à 90 qi ne comprennent pas les minuscules. Si j'essai if left$(asc$(a$),1)<48 .... cela ne change rien. J'ai revu ton code avec a$=upper$(a$) et j'ai positionné un rem devant ma ligne qui BUG Cela marche, mais ton code n'a pas de sortie, on doit faire une fin de tache [control+shift+echap] pour terminer le processus. - Code:
-
dim a$ ,l%
repeat input a$ a$=upper$(a$) print asc(a$) a$= left$(a$,1) : l%=asc(a$) if l%< 47 or l%> 90 then message "avec l% hors limite" rem if asc(a$)<47 or asc(a$)>9O then message "hors limite" until a$ = chr$(13)
A+ | |
| | | Invité Invité
| Sujet: Re: Problème avec ASC(a$) Dim 30 Aoû 2009 - 11:47 | |
| Il ne s'agissait pas de faire un programme mais de voir (de faire un simple teste ) si il y avait une erreur sur asc(), sans plus En tapant "a", il y a erreur sur le le teste asc(), mais pas avec l%, et cela montre bien une erreur sur la fonction, et j'en suis resté là. Je n'ai pas essayé de refaire ton programme, il t'appartient .J'ai vu l'erreur, et cela montre que si il avait des problèmes sur ton scripte, il y avait aussi une erreur sur la fonction asc(), je ne l'avais pas vérifié. désolé de ne pas avoir été assez claire. Je ne devrais pas intervenir lorsque je manque un peu de temps. salutation |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Problème avec ASC(a$) Dim 30 Aoû 2009 - 12:26 | |
| OK et Merci de t'être penché sur mon problème, mais ne t'inquiète pas, car j'en connais qui à leurs retour de vacances ne vont pas manqués de vérifier tout çà. A+ | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Problème avec ASC(a$) Dim 6 Sep 2009 - 21:52 | |
| Pour cosmos70. Effectivement il y a un bug dans: - Code:
-
dim foto%
for foto%=1 to 10 print foto% next foto% alors que: - Code:
-
dim fobo%
for fobo%=1 to 10 print fobo% next fobo% fonctionne. Il y a un problème dans l'évaluation de la ligne for. Je n'ai pas encore regardé précisément, mais j'ai l'impression que toute variable contenant " to" pose problème. La recherche du mot-clé " to" semble commencer à partir du premier caractère de la variable au lieu de commencer après la valeur de départ. - Citation :
- la ligne avec l% fonctionne, et la tienne ne fonctionne pas.
Ben oui, tu as tapé 90 avec un 9 et la lettre "O" dans: - Code:
-
if asc(a$)<47 or asc(a$)>9O then message "hors limite"
Dernière édition par panoramic le Dim 6 Sep 2009 - 22:07, édité 2 fois | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Problème avec ASC(a$) Dim 6 Sep 2009 - 22:00 | |
| Pour Jean-Claude: Lorsque j'exécute ton code, - si je clique directement sur le bouton "QUITTER", j'ai une erreur (Access violation) et je ne peux en sortir (sauf par un CRTL + ALT + DEL et fin de tache) - si je tape quelque chose dans l'EDIT et que je clique directement sur le bouton "QUITTER", c'est pareil - si je tape quelque chose dans l'EDIT puis ENTER et que je clique directement sur le bouton "QUITTER", j'ai 2 erreurs (Access violation) puis le terminate s'effectue.
Je vais enfin m'attaquer à ce problème de terminate suivi ou non d'un return... | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Problème avec ASC(a$) Lun 7 Sep 2009 - 12:02 | |
| Merci d'avance pour ce problème de violation. Pour ce qui concerne ASC(a$) , le manuel de référence indique pour cette fonction retourne le code ascII du premier caractère du string.... c'est pourquoi je ne comprend pas que ma ligne de controle par ASC ne fonctionne pas. A+ | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Problème avec ASC(a$) Lun 7 Sep 2009 - 22:23 | |
| J'avoue que je n'ai pas bien compris ton problème avec la fonction asc()Cette fonction, comme dans la plupart des Basic, retourne le caractère ASCII du premier caractère de la chaîne qu'on lui passe en paramètre, c'est à dire le caractère de GAUCHE de la chaine. Dans ton test, tu ne testes pas le dernier caractère que tu viens de taper dans ton EDIT, c'est à dire celui de droite, mais tu testes toujours le même: celui de gauche, qui est le premier caractère tapé. C'est pour cela que ton test ne fonctionne pas comme tu le souhaites. Pour t'en convaincre, il suffit d'ajouter une ligne caption 0,a$ qui affiche dans le bandeau de la fenêtre le contenu de l'EDIT. Tu verras au fur et à mesure de la frappe que c'est toujours le même caractère que tu testes: le premier tapé, celui le plus à gauche. - Code:
-
label insert,finsaisie,quit
dim a$,b$
left 0,223 top 0,182 width 0,550 height 0,492 caption 0,"Form 0"
edit 1 left 1,81 top 1,64 on_change 1,insert
button 2 left 2,340 top 2,200 width 2,70 height 2,20 caption 2,"QUITTER" on_click 2,quit
set_focus 1
end rem -----------------------
insert: a$=upper$(text$(1)) caption 0,a$ if asc(a$)<47 or asc(a$)>90 then message "Caractère interdit":text 1,"":return if scancode=13 then set_focus 2:goto finsaisie b$=inkey$ goto insert if a$=" " then goto finsaisie return
finsaisie: print_locate 10,10:print a$ return
quit: terminate
Pour tester le dernier caractère tapé, il faut tester le caractère de droite de la chaîne que tu es en train de taper. Il suffit de changer a$=upper$(text$(1))par a$=right$(upper$(text$(1)),1) - Code:
-
label insert,finsaisie,quit
dim a$,b$
left 0,223 top 0,182 width 0,550 height 0,492 caption 0,"Form 0"
edit 1 left 1,81 top 1,64 on_change 1,insert
button 2 left 2,340 top 2,200 width 2,70 height 2,20 caption 2,"QUITTER" on_click 2,quit
set_focus 1
end rem -----------------------
insert: a$=right$(upper$(text$(1)),1) caption 0,a$ if asc(a$)<47 or asc(a$)>90 then message "Caractère interdit":text 1,"":return if scancode=13 then set_focus 2:goto finsaisie b$=inkey$ goto insert if a$=" " then goto finsaisie return
finsaisie: print_locate 10,10:print a$ return
quit: terminate D'autre part, ton instruction test 1,"" est un peu "maladroite" car elle modifie ton EDIT donc fait repartir l'exécution vers insert: qui est le début du traitement d'un "changement" du contenu de l'EDIT... le programme se mord la queue... et ne sortira jamais de cette boucle de traitement d'événement... car le traitement recrée l'événement lui-même. Cela me pose d'ailleurs un sérieux problème car c'est la première fois que je vois quelqu'un qui dans le traitement d'un événement recrée cet évenement, et je vais regarder de manière très approfondie ce qui se passe alors dans PANORAMIC qui n'a pas été prévu pour ce genre de sport. Ceci dit, je suis très heureux de pouvoir investiguer sur un tel problème qui sort de l'ordinaire. Concernant asc d'une chaine vide, c'est à dire: - Code:
-
dim a$ a$="" print asc(a$) Là, il y a un problème car asc ne fonctionne pas pour une chaîne vide. Je n'avais pas envisagé ce cas et je vais voir ce qu'on peut faire. Je vais regarder ce que font les autres Basic dans ce cas de figure, et faire la même chose. En résumé, lorsque tu détectes un caractère "interdit", la commande text 1,"" fonctionne, mais recrée l'événement " EDIT 1 a changé", et lors de la deuxième exécution du sous-programme de traitement de cet événement, asc reçoit en paramètre la chaîne vide, et comme il y a un problème quand cette fonction asc traite la chaîne vide, tu as l'erreur "(33) Not correct logical expression".Pour information (cela n'a rien à voir avec ton programme), j'ai découvert un autre bug: - Code:
-
print asc("a") qui devrait afficher 97 et qui pourtant, à mon plus grand étonnement, affiche 65 ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Problème avec ASC(a$) Mar 8 Sep 2009 - 9:23 | |
| Hé bien, sur ce coup là j'ai manqué d'imagination. C'est vrai que mon code se mort la queue. J'ai rajouter c$ pour récuperer la totalité de la saisie dans l'EDIT. J'ai supprimer text 1,"" (pour voir), le message (33) not correct... apparait toujours, mais cette fois-ci au moment de l'effacement du caractère interdit. Et pour finir SCANCODE ne peut pas fonctionner sans b$=INKEY$ et je pense justement que c'est cette ligne b$=INKEY$ qui provoque la violation. Voici le code: - Code:
-
label insert,finsaisie,quit
dim a$,b$,c$
left 0,223 top 0,182 width 0,550 height 0,492 caption 0,"Form 0"
edit 1 left 1,81 top 1,64 on_change 1,insert
button 2 left 2,340 top 2,200 width 2,70 height 2,20 caption 2,"QUITTER" on_click 2,quit
set_focus 1
end rem -----------------------
insert: a$=right$(upper$(text$(1)),1) caption 0,a$ if asc(a$)<47 or asc(a$)>90 then message "Caractère interdit":return if scancode=13 then set_focus 2:goto finsaisie b$=inkey$ goto insert
finsaisie: c$=upper$(text$(1)) print_locate 10,10:print c$ return
quit: terminate
A+ | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Problème avec ASC(a$) Mar 8 Sep 2009 - 9:40 | |
| - Citation :
- D'autre part, ton instruction test 1,"" est un peu "maladroite" car elle modifie ton EDIT donc fait repartir l'exécution vers insert: qui est le début du traitement d'un "changement" du contenu de l'EDIT... le programme se mord la queue... et ne sortira jamais de cette boucle de traitement d'événement... car le traitement recrée l'événement lui-même.
En relisant je comprend que pour le moment çà ne peut pas fonctionner, vu que si j'efface le caractère interdit pour en saisir un autre a$="" , du coup asc(a$) provoque l'erreur. A+ | |
| | | Jack Admin
Nombre de messages : 2394 Date d'inscription : 28/05/2007
| Sujet: Re: Problème avec ASC(a$) Mer 9 Sep 2009 - 22:16 | |
| - Citation :
- Je vais regarder ce que font les autres Basic dans ce cas de figure, et faire la même chose.
En gros, en testant la ligne - Code:
-
print asc("") sur d'autres Basic (une vingtaine), une moitié sort une erreur et l'autre moitié affiche la valeur 0. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Problème avec ASC(a$) Jeu 10 Sep 2009 - 0:06 | |
| Personnellement, je préfèrerais que asc("") renvoie la valeur 0, ça me paraît plus logique qu'une erreur. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Problème avec ASC(a$) Jeu 10 Sep 2009 - 7:59 | |
| Je suis d'accord la valeur zéro permet de traiter le résutat dans le code et c'est plus pratique que d'utiliser on error goto si c'est une erreur qui esr générée. A+ | |
| | | Contenu sponsorisé
| Sujet: Re: Problème avec ASC(a$) | |
| |
| | | | Problème avec ASC(a$) | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |