Pegar valor decimal de uma substring e comparar com codigo decimal ASCII
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?
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
Curtidas 0
Respostas
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
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