Eli... koodaatessani manageripeliäni, en löytänyt funktiota joka etsisi merkkijonosta siihen tungetun luvun. Jos sekalaista tekstiä tungetaan normaaliin StrToInt-funktioon, niin tulee errori ja ohjelma kaatuu. Estääkseni tällaisen häiriköinnin, kasasin seuraavan funktion joka etsii kokonaislukua merkkijonosta. Jos ei löydy, palauttaa 0. EI huomioi mahdollisuutta, että numero olisi negatiivinen.
Myöskin errorittaa, jos numero paisuu liian suureksi.
Jollekulle ainakin tästä on hyötyä, eniten ehkä minulle itse :)
function EtsiNumero(s : string) : Integer; var a, b, c, d : integer; num : LongInt; begin a := Length(s); c := 0; num := 0; for b := 1 to a do begin if ((s[b] >= '0') and (s[b] <= '9')) and (c = 0) then begin //numeron alkukohta c := b; end else if ((s[b] < '0') or (s[b] > '9')) and (c <> 0) then begin //numeron loppukohta Break; end; end; b := b - 1; if c <> 0 then begin //löytyi numero, c on alkukohta ja b loppu d := 1; for a := b downto c do begin //lopusta alkuun num := num + d*(Integer(s[a])-Integer('0')); d := d * 10; //nousee nousee... end; Result := num; end else Result := 0; end;
Val proceduuri tekee melkein saman mutta ei löydä numeroa jos merkkijono alkaa kirjaimella.
..ja juuri sen vuoksi väsäsinkin tuon.
Aihe on jo aika vanha, joten et voi enää vastata siihen.