Gambas France BETA


Pas de compte ? Incription

[Résolu] Is letter OR IsNumber ?

Ce sujet est résolu.

1
AuteurMessages
Foromus#1 Posté le 6/1/2010 à 12:21:00
Bonjour !

Voilà, j'ai une txtBox, et je veux rentrer le nom du capitaine (pour l'âge, c'est résolu). Comme je ne veux pas commettre d'impair, je veux qu'il soit refusé tout ce qui pourrait être chiffre, cela n'étant valable que pour les rois et les papes, pas pour les capitaines...
J'ai donc fait :

If IsLetter(txtBox.txt) then Afficher
If Not IsLetter(txtBox.txt) then Refuser

Voilà, ça marche...
Seulement, il se trouve que la capitaine Dupont-Lajoie (une vieille famille aristo des années 50 - ne cherchez pas, vous ne connaissez pas...), donc, notre aristo est bel et bien refusé !
Car le tiret entre-deux n'est pas considéré comme une lettre : fâcheux....

Je me suis dit que j'aillais contourner le problème avec "IsNumber" et un Not par dessus le marché.
Ça a failli marcher... En fait, si je commence par taper un chiffre, effectivement, ça colle. Mais si je tape Al3, le "3" n'est pas pris en considération et ma valeur reste à Faux, comme si c'éait une lettre...

Bref, après maints essais, je ne vois pas la solution. les "IsAscii" et autre "IsString" ne donnent rien non plus...

A vous lire,

F
jeanyvon#2 Posté le 6/1/2010 à 13:08:00
Gambas? Ma! Et gustoSalut
beaucoup de personne font comme ça
Dans ce code on n' arrête que les frappe de touches qui ne sont pas numériques ainsi que le point
A toi de l'adapter!

PUBLIC SUB TextBox1_KeyPress()
IF Asc(Key.Text) < 46 OR Asc(Key.Text) > 57 AND Asc(Key.Text) <> 32 AND Asc(Key.Text) <> 8 AND Asc(Key.Text) <> 9 AND Asc(Key.Text) <> 127 THEN
STOP EVENT
ENDIF
END


A+
JY
Vieillir? On peut retarder mais pas y échapper!
Foromus#3 Posté le 6/1/2010 à 15:44:00
J'ai effectivement pensé à une solution de ce genre, mais il était normal que je m'informe si une autre possibilité existait.

Je pense adopter une solution plus simple. En fait, "IsLetter" fonctionne très bien, au fond, ce qui manque, c'est le tiret et l'espace, mais peut-être aussi les caractères dits spéciaux : é, è, ç, à, ù, et les circonflexe et tréma. Pour ces derniers, on peut considérer que seuls les a, e, i, o, u sont concernés.

En dehors de toute autre solution, je verrai à élaborer une routine de traitement.

Merci pour le renseignement !
micio#4 Posté le 6/1/2010 à 17:32:00
'
Foromus#5 Posté le 6/1/2010 à 17:49:00
Bonjour !

Il faudra que je voie "IsPunct", je vais regarder ça tout de suite...
Par contre, je m'en tire avec la routine suivante :

PRIVATE SUB VerifNom()
'Vérifier que le nom ne porte que des lettres
DIM N AS Integer
FOR N = 1 TO Len(nom)
IF Asc(Mid$(Nom, N)) > 45 AND Asc(Mid$(Nom, N)) < 64 THEN Erreur = TRUE
IF Asc(Mid$(Nom, N)) > 32 AND Asc(Mid$(Nom, N)) < 45 THEN Erreur = TRUE
NEXT
END


Maintenant, je ne suis pas certain que ça fonctionne sur toutes les machines...
Merci !
Foromus#6 Posté le 6/1/2010 à 17:56:00
OK, ce sont les caractères de ponctuation.

Mais là, j'ai des doutes : Quelle est la différence entre le signe moins (-) - qui est un caractère considéré comme ponctuant, et le tiret (-), qui lui, ne l'est pas ?....
Parce que, dans "Dupont-Lajoie", il y a un tiret, dans "Dupont Lajoie", c'est un espace...
Et j'ai les deux pékins qui risquent de se présenter à la saisie...
micio#7 Posté le 6/1/2010 à 18:56:00
'événement KeyPress() pour TextBox1
PUBLIC SUB TextBox1_KeyPress()
DIM t AS String
t = Key.Text
'si le caractère n'est pas lettre ou pas ponctuation ou pas espace ou pas null
IF NOT (IsLetter(t) XOR IsPunct(t) XOR IsBlank(t) XOR IsNull(t)) THEN
'on stopen l'événement la saisie n'est pas prise en compte par TextBox1
STOP EVENT
ENDIF
END
Foromus#8 Posté le 6/1/2010 à 20:00:00
Désolé, la formule

IF NOT (IsLetter(t) XOR IsPunct(t) XOR IsBlank(t) XOR IsNull(t)) THEN

ne semble pas répondre aux exigences du moment...
Bon, mais comme mes deux lignes fonctionnent, je vais en rester là pour l'instant.
Je prends bonne note de la fonction IsPunct que je ne connaissais pas, je l'étudierai dans un autre contexte plus tard.

Merci beaucoup.
spheris#9 Posté le 7/1/2010 à 09:58:00
Foromus,
si le tiret t'embetes, une solution consiste à le remplacer par 5 fois la lettre zzzzz par exemple par la commande

REPLACE$

dont les rudiments d'utilisation sont ici :

http://gambasdoc.org/help/lang/replace?fr

ensuite il te suffira de remplacer cette occurrence à nouveau pour remettre ton tiret.
Du moins, c'est la combine que j'utilise régulièrement.
;)
Foromus#10 Posté le 7/1/2010 à 10:39:00
Bonjour !

Bah, la formule avec mes deux lignes fonctionne, à la rigueur, je pourrais même mettre une ou deux lignes de plus si je veux conserver le 13 (Return, normalement).
En fait, ce que je me demande, c'est de savoir si ma formule va fonctionner correctement sur une autre machine ? (Autre machine, et autre OS, ou tout au moins, autre distribution que Ubuntu).
Mais c'est vrai que ça été plus simple avec les chiffres, "IsNumber" fonctionne impeccable, il faut dire qu'il n'y a que 10 cas possibles au lieu de 35 ! Et en plus, ils sont dans l'ordre !

Merci pour ces renseignements, je vais passer à autre chose.
micio#11 Posté le 7/1/2010 à 11:03:00
Je ne vous comprend pas.
spheris#12 Posté le 7/1/2010 à 11:29:00
Micio,
Do you want I say this topic in English to understand the question ?
I don't understand your answer too. Can you explain me ?
:D :D ;) ;)
1