| print val(text$(1)) | |
|
|
Auteur | Message |
---|
gmx_91
Nombre de messages : 6 Date d'inscription : 28/07/2008
| Sujet: print val(text$(1)) Lun 28 Juil 2008 - 17:25 | |
| Bonjour,
Re-félicitations pour le boulot qu'est Panoramic
J'ai fais un programme dans lequel il existe un objet edit 1 Quand je teste la valeur saisie par l'utilisateur (je cherche une valeur numérique) alors que "list 1" ne contient que des chaines. Pour vérifier que l'opérateur a bien placé des chiffres et non pas du texte je pense qu'il faut que je cherche la valeur de la chaine placée dans edit 1, mais la simple ligne : print val(text$(1)) me renvoie un message d'erreur : Not Correct Expression : Error in VAL() function. Line: 29
C'est moi qui n'est pas compris ou y a-t-il une astuce ?
GMx_91 | |
|
| |
musicgames
Nombre de messages : 55 Date d'inscription : 21/01/2008
| Sujet: Re: print val(text$(1)) Lun 28 Juil 2008 - 18:08 | |
| Bonjour jmx_91, Cette erreur apparaît chez moi quand l' utilisateur n' a rien tapé dans l' objet edit 1. Alors la fonction val() ne trouve pas de chaîne de caractères à transformer en entier. On peut entrer par défaut un texte dans l' objet edit 1, avec la commande text: - Code:
-
edit 1 : top 1,100 text 1,"267" print val(text$(1))
ou trouver une autre solution. | |
|
| |
gmx_91
Nombre de messages : 6 Date d'inscription : 28/07/2008
| Sujet: Re: print val(text$(1)) Mer 30 Juil 2008 - 13:29 | |
| Je regrette que la fonction val() ne retourne pas 0 lorsque la chaine contient autre chose que des valeurs numériques Dans le programme ci-dessous - Code:
-
1 dim a$, i% 2 a$= "coucou" 3 print a$ 4 i%= val(a$) 5 print str$(i%) : rem ou simplement print i% le programme devrait renvoyer coucou 0 Or le programme plante avec une erreur à la ligne 4 Ce retour "zéro" à une réponse non numérique me semble très commode pour vérifier la conformité de la saisie. Je programme déjà beaucoup plus de lignes pour contrôler l'opérateur, là, ça fait beaucoup plus de code me semble-t-il. A moins que je n'affirme quelque chose de faux | |
|
| |
musicgames
Nombre de messages : 55 Date d'inscription : 21/01/2008
| Sujet: Re: print val(text$(1)) Mer 30 Juil 2008 - 14:18 | |
| Il est possible de vérifier s' il y a une réponse non numérique, en examinant le code ASCII des caractères entrés par l' utilisateur : - Code:
-
label traiter_edit1
dim i, lettres$(30), num%
edit 1 top 1,100
button 2 top 2,150 caption 2,"VALIDER" on_click 2,traiter_edit1 num% = 1
end
traiter_edit1:
if len(text$(1)) = 0 message "vous n' avez rien tapé !" end_if if len(text$(1)) > 0 for i=1 to len(text$(1)) lettres$(i) = mid$(text$(1),i,1) if (asc(lettres$(i)) < 48) or (asc(lettres$(i)) > 57) num% = 0 end_if next i if num% = 0 message "veuillez taper uniquement des valeurs numériques !" end_if if num% = 1 print val(text$(1)) end_if end_if
return
la fonction VAL() retourne 0 en transformant la chaîne "0" en valeur numérique : - Code:
-
edit 1 top 1,100 text 1,"0"
print val(text$(1))
Cette valeur ne peut donc pas correspondre à une réponse non numérique.
Dernière édition par musicgames le Mer 30 Juil 2008 - 14:37, édité 1 fois | |
|
| |
gmx_91
Nombre de messages : 6 Date d'inscription : 28/07/2008
| Sujet: Re: print val(text$(1)) Mer 30 Juil 2008 - 14:36 | |
| C'est encore beaucoup plus compliqué quand il y a une valeur décimale où le code du "point" est 46.
Mais il ne faut qu'un seul "point" dans la chaine.
Bref c'est possible mais c'est dommage de faire un outil aussi convivial et de devoir contrôler tout avec autant de code.
Merci quand même | |
|
| |
Vaillant17
Nombre de messages : 34 Age : 75 Localisation : Charente_Maritime Date d'inscription : 03/06/2008
| Sujet: Re: print val(text$(1)) Mer 30 Juil 2008 - 16:22 | |
| J'ai rencontré ce problème, et j'ai effectivement placé des contrôles avant l'exécution. Mais je ne nous faisons pas de souci, avec Panoramic, pas de problème ! que des solutions, et nous pouvons lui faire confiance. A pluche | |
|
| |
Jack Admin
Nombre de messages : 2395 Date d'inscription : 28/05/2007
| Sujet: Re: print val(text$(1)) Sam 2 Aoû 2008 - 10:20 | |
| - Citation :
- Je regrette que la fonction val() ne retourne pas 0 lorsque la chaine contient autre chose que des valeurs numériques
Comment distinguer une valeur nulle retournée par un string "0" ou par un string n'étant pas une valeur numérique? - Code:
-
edit 1:left 1,50 print val(text$(1)) retourne une erreur car l'EDIT ne contient pas une valeur numérique - Code:
-
edit 1:left 1,50 text 1,0 print val(text$(1)) fonctionne et affiche 0 Je pense que la solution à ce problème serait une fonction, par exemple NUMERIC(V$), qui retournerait 1 si V$ est numérique et 0 sinon. Dans ce cas, on pourrait faire: - Code:
-
if numeric(v$)=1 v=val(v$) traitement ou utilisation de v end_if et cela éviterait arrêt de l'exécution du programme sur val d'une valeur non-numérique. | |
|
| |
Georges
Nombre de messages : 290 Age : 55 Localisation : Martinique Date d'inscription : 29/05/2009
| Sujet: Re: print val(text$(1)) Lun 29 Juin 2009 - 16:31 | |
| Pour ma part je traite systèmatiquement l'entrée des valeurs d'un edit la création de l'edit - Code:
-
edit 1
et le traitement de l'edit - Code:
-
if text$(1)="" then return if numeric(text$(1))=0 then return
return renvoie automatique à la zone de saisie dans le ou les edit première ligne de traitement vérifie que l'utilisateur à entrée une valeur la seconde vérifie que c'est un nombre réel, si ce n'est pas le cas, renvoie à la zone de saisie ensuite récupération des valeurs de l'edit - Code:
-
a = val(text$(1)
bien entendu les variables sont déclarées au préalable georges | |
|
| |
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: RE: print val(text$(1)) Mar 30 Juin 2009 - 21:32 | |
| Salut Georges, Quand je pense que moi je tape çà - Code:
-
a$=text$(1) n=numeric(a$) if n=0 then message "Saisir une valeur numérique":text(1)="":return
Alors que - Code:
-
if numeric(text$(1))=0 then message "BlaBla": text(1)="":return
Ta méthode condensée est bien plus élégante et surtout plus courte. Remarque que j'ajoute [text(1)=""] avant le RETURN. C'est pour vider l'EDIT, avant le retour vers celui-ci. Continue de nous montrer ce genre de petits trucs auquels on ne pense pas toujours. A+ | |
|
| |
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: re Mar 30 Juin 2009 - 21:39 | |
| Petite rectification sur la synthaxe de text(1)="", il faut écrire text(1),"" Scuzi. A+ | |
|
| |
Contenu sponsorisé
| Sujet: Re: print val(text$(1)) | |
| |
|
| |
| print val(text$(1)) | |
|