Pegar valor decimal de uma substring e comparar com codigo decimal ASCII

Delphi

12/04/2015

Pretendo fazer o seguinte:
Copio 1 letra da posição 1 da string s para string n.
Comparo o valor decimal da substring n com uma faixa de códigos decimais da tabela ASCII. O problema é que o compilador está dando erro e informando incompatível tipo para Ord(n).

n:=copy(s, 1, 1); //Copia a ultima letra de s
if (Ord(n) > 47 and Ord(n) < 58) then //if codigo decimal de n for maior que 47 e menor igual a 58 (ou seja estar entre 0 e 9):

Descobri uma maneira de fazer isso:
var
n, s, textL: string;
c: char;

Procedure:
n:=copy(s, 1, 1);
c:=n[1];
if ( Ord (c) > 47 ) and ( Ord (c) < 58 ) then

ou então assim:

if ( Ord ( n[1] ) > 47 ) and ( Ord ( n[1] ) < 58 ) then

A explicação só pode ser porque c não pode receber valor de n na posição 1, se colocar n[0] não aceita e n[2] tambem não. Pois é, mas c=n[1] não significa que eu estaria atribuindo um caracter da posição 1 de n ? Este código não está definindo o tamanho de n. Não entendi, essa.


Será que essa é única forma de comparar uma codigo decima ASCII com um caracter?
Joao

Joao

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

12/04/2015

A explicação é que Ord() aceita somente um tipo char.

n é string
c é char

n[elemento] retorna um char

assim:
n := 'Emerson' // string (array of char)
n[1] retorna 'E', que é o char da posição 1 do array. entendeu? E a função Ord() aceita somente char.


então você não precisa da variável n. basta fazer:

c:=s[1];
if Ord(c) in [48..58] then

ou
if s[1] in ['0'..'9'] then // assim não precisa de outra variável, senão a s
GOSTEI 0
POSTAR