Conversion ASCII [Delphi] - Programmation
Marsh Posté le 17-08-2002 à 15:01:13
la contenu des caractère c'est leur valeur ASCII...
chaine[i] = code ASCII du caractère à la position i (pour i allant de 1 à longueur)
Marsh Posté le 17-08-2002 à 15:03:00
A ok merci j'avais pas kapté ca j'suis un petit peu débutant aussi alors...
Marsh Posté le 17-08-2002 à 16:01:44
Je crois que j'ai pas tout a fait capté encore ...
Comme je veux que l'utilisateur ne saisisse que des chiffres je compare la valeur ASCII du caractère en cours avec la valeur ASCII des chifre 1,2,3,4...
Je fais (pour reprendre l'exemple) : if Chaine[i] < 48 And
Chaine[i] > 57 then ... Mais le compilateur me dit que les types sont incompatibles,les valeurs ASCII c pas des Int ?
Marsh Posté le 17-08-2002 à 16:04:11
Le pascal est un langage typé, donc un char n'est pas un byte, et inversément, sauf si tu le caste
char(48), ou '1' c'est pareil, mais 48 c'est pas un char, c'est un byte
Marsh Posté le 17-08-2002 à 16:07:27
Ben ouais ca y me semble avoir compris,mais ca me permet pas de comparer avec la valeur ASCII du caractere
Marsh Posté le 17-08-2002 à 16:09:02
Ord(chaine[1]) te renvoie un entier ayant la valeur du 1er caractere par ex, ca te permet de le comparer à un autre entier
Marsh Posté le 17-08-2002 à 16:09:59
Je viens de te dire de faire
chaine[i]<'1'
plutot que 48
je le répète, le pascal est un langage fortement typé
Soit tu castes byte(chaine[i]) soit char(48)
Marsh Posté le 17-08-2002 à 16:10:22
antp a écrit a écrit : Ord(chaine[1]) te renvoie un entier ayant la valeur du 1er caractere par ex, ca te permet de le comparer à un autre entier |
Ca sert à rien cte fonction
Marsh Posté le 17-08-2002 à 16:11:11
Ok en fait j'avais encore pas bien capté maintenant je pense avoir capté et il semble que ca marche merci
Marsh Posté le 17-08-2002 à 16:11:35
Zion a écrit a écrit : Ca sert à rien cte fonction |
bhen si
if chaine[i] < 48 ca passe pas
if Ord(chaine[i]) < 48 ca passe
mais c'est vrai que ta solution est meilleure
Marsh Posté le 17-08-2002 à 16:12:52
antp a écrit a écrit : bhen si if chaine[i] < 48 ca passe pas if Ord(chaine[i]) < 48 ca passe |
benh déjà 48 c'est mal, si tu veux compiler ton truc pour .NET, admettons qu'ils utilise de l'EBCDIC (non je déconne, c juste pour l'exemple), ton 48 marchera plus.
De plus l'ORD est inutile, suffit de caster
Marsh Posté le 17-08-2002 à 16:14:16
bah oui 48 c'est mal, mais bon y a des cas où c'est utile
puis Ord(machin) c'est plus court à écrire que Integer(machin)
Marsh Posté le 17-08-2002 à 16:17:49
Pourquoi caster un byte en Integer maintenant?
(Fait pas attention Kroute, on fait de l'ambiance comme on peut )
Marsh Posté le 17-08-2002 à 16:23:57
Zion a écrit a écrit : Pourquoi caster un byte en Integer maintenant? |
bhen dans le cas où tu dois le récupérer comme un integer
genre les onkeypress/onkeydown ou tu mélanges des char, des word et des constantes...
Marsh Posté le 17-08-2002 à 16:28:08
Ok le truc marche mais seulement si je n'utilise pas la deuxieme partie (And Chaine[i]>'57' paske qd je fait ca le compilateur me dit que l'operateur est invalide poue ce type d'opérande.J'ai essayé avec un else if mais la ca marche plus du tout ....
Marsh Posté le 17-08-2002 à 17:05:12
if chaine[i] < '0' or chaine[i] > '9' then
le compilateur voit
if chaine[i]< ('0' or chaine[i]) > '9' then
ou un truc du genre
faut faire
if (chaine[i] < '0' or (chaine[i] > '9' then
et comparer un caractère à '57' (une chaine) ça risque pas de faire ce que tu veux
Marsh Posté le 17-08-2002 à 21:50:46
tu n'as qu'a utiliser l'évènement keypress et ne permettre de tapé seulement des chiffres, c'est très aisé à faire...
Marsh Posté le 18-08-2002 à 12:35:46
Comment on fait ?
Marsh Posté le 18-08-2002 à 12:39:04
Code :
|
Marsh Posté le 17-08-2002 à 14:53:24
Salut ,est il possible en Delphi de convertir des caractères en leur valeur ASCII ? Paske en fait je veux gérer une saisie utilisateur et il faudrait que seulement des chiffres soient saisis...