Неверов Евгений Викторович
QR-код
Меню сайта
Категории раздела
Программирование на языке Паскаль [26]
В данной категории представлены новые функции, созданные на языке Паскаль, которые могут пригодиться при написании своих программ
Программирование на Delphi [19]
В данной категории представлены полезные подпрограммы, которые могут пригодиться при написании своих программ, а также рассматриваются примеры готовых проектов, создаваемых в среде программирования Delphi
Программирование на HTML [1]
В данной категории рассматриваются примеры готовых проектов, создаваемых на языке HTML
Мои программы [1]
Описание разработанных автором программ.
Online-программы [2]
Прочее [42]
Свободная тематика
Мини-чат
200
Наш опрос
Чем Вы занимаетесь?
Всего ответов: 57
Статистика

Онлайн всего: 2
Гостей: 2
Пользователей: 0

Безопасный перевод строки в число

1. Перевод строки в число, удаляя посторонние символы, находящиеся в этой строке

function StrToNumber(s: string; sym: string = ''): string;
const DS = ',';
var i, z: integer;
begin
   { удаляем посторонние символы }
   for i:=Length(s) downto 1 do
      if Pos(s[i], '0123456789-'+sym)=0 then
         Delete(s, i, 1);
   { удаляем - }
   for i:=Length(s) downto 2 do
      if s[i]='-' then
         Delete(s, i, 1);
   { удаляем , }
   z:=Pos(DS, s);
   if z>0 then
   begin
      for i:=Length(s) downto z+1 do
         if s[i]=DS then
            Delete(s, i, 1);
      if s[1]='-' then
         if (Length(s)>=2) and (s[2]=DS) then
            Delete(s, 2, 1) else
         else
         if s[1]=DS then
            Delete(s, 1, 1);
      if (Length(s)>=1) and (s[Length(s)]=DS) then
         Delete(s, Length(s), 1);
   end;
   if (s='') or (s='-') then
      Result:='0' else
      Result:=s;
end;

где:

  • s – исходная строка, содержащая цифры;
  • sym – допустимые символы.

Например,

  • StrToNumber('-8-5d2a12,s4,5', ',') выведет '-85212,45'. В данном случае удалились посторонние символы (буквы), и получилось '-8-5212,4,5'. Далее были удалены лишние знаки "-" и ",".

Примечание. В операционных системах можно изменить разделитель целой и дробной части. Например, вместо запятой можно поставить точку (как в Англии). Тогда константа DS меняется на точку, чтобы избежать ошибок. DS образовано от слова DecimalSeparator, используемый в программной среде Delphi (намек понятен?).


2. Безопасный перевод строки в целое число

function StrToIntNew(s: string): int64;
begin
   s:=StrToNumber(s);
   Result:=StrToInt64(s);
end;

где:

  • s – целое число, записанное в строковом виде.

Например,

  • StrToIntNew('--426w785h,s1') выведет '-4267851'.

3. Безопасный перевод строки в вещественное (дробное десятичное) число

function StrToFloatNew(s: string): real;
var e: integer;
    s1, s2: string;
begin
   s:=UpperCase(s);
   e:=Pos('E', s);
   if e>1 then
   begin
      s1:=Copy(s, 1, e-1);
      s2:=Copy(s, e+1, Length(s));
      s1:=StrToNumber(s1, ',');
      s2:=StrToNumber(s2);
      s:=s1+'E'+s2;
   end else
      s:=StrToNumber(s, ',');
   Result:=StrToFloat(s);
end;

где:

  • s – вещественное (дробное десятичное) число, записанное в строковом виде.

Например,

  • StrToFloatNew('32fd12,,d52,ds36') выведет '3212,5236';
  • StrToFloatNew('-8-5d2a12,s4,5e2,2') выведет '-8,521245E26'.

Примечание. В последнем примере число '-85212,45E22' преобразовалось в нормальную экспоненциальную форму '-8,521245E26' (путем переноса запятой влево и увеличением степени).

Категория: Программирование на языке Паскаль | Добавил: newerow1989 |
Просмотров: 821 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email:
Код *:
Вход на сайт
Поиск
Друзья сайта
Заработок в Интернете
Для начала необходим Электронный PAYEER® кошелек!
Copyright MyCorp © 2025
Версия для мобильных устройств. Яндекс.Метрика Анализ сайта Проверить мой сайт на ScamAdviser.com