Newsgroup: it.comp.lang.delphi
Titolo: controllare se lettera o numero

Salve,
devo fare un controllo su una stringa composta da numeri e lettere, 
Faccio un esempio, se ho una seguenza di lettere e numeri tipo 
'ABC56STG39K' voglio sapere se la la lettera al primo posto è una 
lettera o un numero, e così via al secondo. terzo posto ecc...
Per i numeri ho risolto, posso fare sia un case in... ecc...
Per le lettere come posso fare? Esiste anche una soluzione analoga?
Esiste qualche cosa di veloce?
Spero di aver fatto capire il problema.
Grazie in anticipo
Robin

bygv ha scritto:

P.S.  In realtà, per meglio far capire il problema, devo controllare se 
il codice fiscale è formalmente e sostanzialmente corretto. A volte 
capita ad es. che si scriva una 'O' al posto dello zero. Quindi voglio 
controllare che ad ogni posto ci sia uana lettera dove ci deve esseee e 
un numero dove ci deve essere. Poi il resto dei controlli, tipo codice 
del comune e ultima lettera li ho già fatti.
Grazie di nuovo
Robin


Mi pare che possa funzionare questo:
if (copy(miastringa,x,1) in ['a'..'z','A'..'Z']) then // lettera
ciao
S

Perche non usi VAL ?
--- posted by geoForum on 
http://www.delphiedintorni.it

del tipo...
Function ControllaCF(CodiceFiscale:String) : boolean;
var BIN : String; X,Y,K : Integer;
begin
BIN:='';
for X:=1 to length(CodiceFiscale) do begin
                                     VAl(CodiceFiscale[X],Y,K);
                                     BIN:=BIN+IntToStr(K);
                                     end;
if BIN='1111110010010001' then Result:=true Else Result:=false;
end;


 
Alloa, intanto grazie per l'interessamento, ma mi da un errore:
"incompatible types 'Strings' and 'Char'"
Il codice che eseguo č il seguente:
procedure TForm1.Button1Click(Sender: TObject);
var
MiaStringa: string;
begin
   MiaStringa := Edit1.Text;
    if copy(MiaStringa,1,1) in ['a'..'z','A'..'Z'] then
    showmessage('E'' una lettera');
end;
Ciao

Se usi Google, esistono numerossimi esempi di codice per fare una funzione 
che controlli se si tratta di un codice fiscale corretto (almeno secondo le 
regole italiane).
Più che controllare se numero o lettera, meglio che tu faccia una routine 
del genere (banale per un programmatore)
Andrea 

> if (copy(miastringa,x,1) in ['a'..'z','A'..'Z']) then // lettera
usa miastringa[x], e per sicurezza mettici anche un MOD 1, che non fa mai 
male ;)
Avalon 

phora ha scritto:

SI ma la maggior parte delle routine controlla solo se la lettera finale 
di controllo sia giusta o meno. Solo che questo non basta, può essere 
che la lettera finale  sia giusta ma ivece di uno zero ci sia una 'O'.
Ad es. RSSMRA55AO1H546T  in queto caso la lettera n. 10 doveva essere un 
numero ma invece l'utente ha immesso una 'O'. Alla fine la routine di 
controllo dell'ultima lettera ha definito il codice inesatto perche 
l'utlima lettera doveva essere un 'S' ad. es.
Cambiano la T in S il codice risultava corretto. In realtà corretto non 
è perchè la O ha sostituito lo zero.
Ciao

Avalon ha scritto:

OK!!!!!
Grazie va benissimo così, ma non ho capito la storia del MOD 1....
Comunque grazie adesso funziona questo codice:
procedure TForm1.Button1Click(Sender: TObject);
var
MiaStringa: string;
begin
   MiaStringa := Edit1.Text;
    if MiaStringa[1]  in ['a'..'z','A'..'Z'] then
    showmessage('E'' una lettera');
    if MiaStringa[10]  in ['a'..'z','A'..'Z'] then
    showmessage('E'' una lettera')
    else
    showmessage('Non e'' una lettera');
end;

 Grazie va benissimo cosě, ma non ho capito la storia del MOD 1....
E' il Santo Graal di Delphi, in grado di risolvere qualunque tuo problema.
Se vuoi ho un amico che ti puo' dimostrare con qualche funzione matematica
-- estremamente complessa, devo ammetterlo - come basti fare il MOD 1 del
codice fiscale o della partita IVA per ottenere la durata della vita di un
qualsiasi essere umano.
;-)
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Che cazzo dici ?
E' un algoritmo da far rabbrividire...
Usa Val('E',Y,K)
K assume 1 se è una lettera e 0 se è un numero...
come ti è stato proposto dal TROLL:
Function ControllaCF(CodiceFiscale:String) : boolean;
var BIN : String; X,Y,K : Integer;
begin
BIN:='';
for X:=1 to length(CodiceFiscale) do begin
                                     VAl(CodiceFiscale[X],Y,K);
                                     BIN:=BIN+IntToStr(K);
                                     end;
if BIN='1111110010010001' then Result:=true Else Result:=false;
end;
ES: TBNMTT76E21F205J
    1111110010010001


Quante menti poco oliate esistono....


LLLLLL00L00L000L;1;_
La maschera io l'ho trovata caricando il file .dem relativo all'italiano che
trovo nella dir
borland\bin
Il componente ti permette di inserire solo lettere e numeri nei vari punti.
Ciao
Mario - (
mari...@inwind.it
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

lettera o un numero, e cosě via al secondo.
function IsDigit(const AChar: Char): Boolean;
begin
  Result := AChar in ['0'..'9'];
end;
function IsLetter(const AChar: Char): Boolean;
begin
  Result := UpCase(AChar) in ['A'..'Z'];
end;

end;
Perchè due FUNZIONI se esiste VAL ?
val(Carattere,X,K); if K=1 then LETTERA else NUMERO
