1. Перевод строки в число, удаляя посторонние символы, находящиеся в этой строке
function Perewod_w_chislo(s, simwol: string): string;
var i, zap: integer;
begin
{ удаляем посторонние символы }
For i:=Length(s) downto 1 do
If Pos(s[i], simwol)=0 then
Delete(s, i, 1);
{ удаляем - }
For i:=Length(s) downto 2 do
If s[i]='-' then
Delete(s, i, 1);
{ удаляем , }
zap:=Pos(',', s);
If zap>0 then
begin
For i:=Length(s) downto zap+1 do
If s[i]=',' then
Delete(s, i, 1);
If s[1]='-' then
If (Length(s)>=2) and (s[2]=',') then
Delete(s, 2, 1) else
else
If s[1]=',' then
Delete(s, 1, 1);
If (Length(s)>=1) and (s[Length(s)]=',') then
Delete(s, Length(s), 1);
end;
If (s='') or (s='-') then
Result:='0' else
Result:=s;
end;
где
s - исходная строка, содержащий цифры;
simwol - допустимые символы.
Например, Perewod_w_chislo('-8-5d2a12,s4,5', '0123456789-,') выведет '-85212,45'. В данном случае удалились посторонние символы (буквы), и получилось '-8-5212,4,5'. Далее были удалены лишние знаки "-" и ",".
2. Безопасный перевод строки в целое число
function StrToIntA(text: string): int64;
begin
text:=Perewod_w_chislo(text, '0123456789-');
Result:=StrToInt64(text);
end;
где
text - целое число, записанное в строковом виде.
Например, StrToIntA('--426w785h,s1') выведет '-4267851'.
3. Безопасный перевод строки в вещественное (десятичное) число
function StrToFloatA(text: string): real;
var e: integer;
s1, s2: string;
begin
e:=Pos('e', text);
If e=0 then
e:=Pos('E', text);
If e>1 then
begin
s1:=Copy(text, 1, e-1);
s2:=Copy(text, e+1, Length(text));
s1:=Perewod_w_chislo(s1, '0123456789-,');
s2:=Perewod_w_chislo(s2, '0123456789-');
text:=s1+'E'+s2;
end else
text:=Perewod_w_chislo(text, '0123456789-,');
Result:=StrToFloat(text);
end;
где
text - вещественное (десятичное) число, записанное в строковом виде.
Например, StrToFloatA('32fd12,,d52,ds36') выведет '3212,5236'; StrToFloatA('-8-5d2a12,s4,5E2,2') выведет '-8,521245E26'.
Примечание. В данном примере число '-85212,45E22' преобразовалось в нормальную экспоненциальную форму '-8,521245E26' (путем переноса запятой и увеличением степени).
|