Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Преобразование сроки в число

Delphi , Синтаксис , Текст и Строки

Преобразование сроки в число

Автор: Separator
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Преобразование сроки в число

Преобразует строку в число, при этом удаля из строки все лишние символы

Зависимости: нет
Автор:       Separator, vilgelm@mail.kz, ICQ:162770303, Алматы
Copyright:   Separator
Дата:        7 мая 2003 г.
***************************************************** }

function StringToNumber(const Value: string): string;
var
  ResStr: string;
  i, j, L: integer;
  Ch: char;
  E, DS: boolean;

begin
  Result := '0';
  L := Length(Value);
  if L <> 0 then
  begin
    SetLength(ResStr, L);
    E := false;
    DS := false;
    j := 0;
    for i := 1 to L do
    begin
      Ch := Value[i];
      case Ch of
        '0'..'9':
          begin
            Inc(j);
            ResStr[j] := Ch
          end; //'0'..'9': begin
        '.', ',': if (not DS) and (not E) and (i <> L) then
          begin
            DS := true;
            Ch := DecimalSeparator;
            if j = 0 then
            begin
              Inc(j);
              ResStr[j] := '0';
            end; //if j = 0 then begin
            Inc(j);
            ResStr[j] := Ch
          end; //'.', ',': if (not DS) and (i <> L) then begin
        'e', 'E': if (not E) and (i <> L) then
          begin
            E := true;
            Ch := 'E';
            if j = 0 then
            begin
              Inc(j);
              ResStr[j] := '0';
            end; //if j = 0 then begin
            Inc(j);
            ResStr[j] := Ch
          end //'.', ',': if (not DS) and (i <> L) then begin
      end //case Ch of
    end; //for i:= 1 to L do begin
    if j <> 0 then
    begin
      if ResStr[j] = 'E' then
        Dec(j);
      if ResStr[j] = DecimalSeparator then
        Dec(j);
      SetLength(ResStr, j);
      Result := ResStr
    end //if j <> 0 then begin
  end //if L <> 0 then begin
end;

Пример использования:

Edit1.Text = ',...,fgftgtr656,.567erdf..5,,632'
Edit2.Text := StringToNumber(Edit1.Text);
Edit2.Text = 0, 656567E5632

Перевод контента на русский язык:

В коде Delphi функция StringToNumber, которая конвертирует строку в число, удаляя нежелательные символы и корректируя разделитель десятичной точки и обозначение экспоненциального формата. Вот шаг за шагом, что она делает:

  1. Функция принимает строку как входной параметр и возвращает новую строку.
  2. Она инициализирует пустую строку результата ResStr и устанавливает ее длину в 0.
  3. Если входная строка не пуста, она проходит по каждому символу в строке с помощью цикла.
  4. Для каждого символа она проверяет, является ли он цифрой (0-9), разделителем десятичной точки (., или ,) или обозначением экспоненциального формата ('e' или E).
  5. Если символ - цифра, она добавляет его к строке результата.
  6. Если символ - разделитель десятичной точки и он не уже присутствует в строке результата, она добавляет его после любых ведущих нулей.
  7. Если символ - обозначение экспоненциального формата, она устанавливает флаг E в true.
  8. После прохождения по всем символам, если строка результата не пуста, она корректирует ее длину, удаляя любые ведущие символы (разделитель десятичной точки или 'E'), и присваивает ее обратно функции возвращаемому значению.

Пример использования функции:

  1. Она устанавливает текст свойства редактора (Edit1.Text) на примерную входную строку.
  2. Она вызывает функцию StringToNumber с входной строкой как аргументом.
  3. Функция возвращает конвертированную строку, которая затем присваивается обратно текстовому свойству другого редактора (Edit2.Text).

Вывод в этом примере будет:

0, 656567E5632

Код можно улучшить добавлением более полного обработки ошибок и поддержки других форматов чисел. Кроме того, он предполагает, что входная строка содержит только валидные символы; если в ней присутствуют недопустимые символы, функция может производить неправильные результаты.

Вот альтернативное решение с использованием регулярных выражений (RegEx) в Delphi:

uses
  RegularExpressions;

function StringToNumber(const Value: string): Double;
var
  Reg: TRegex;
begin
  Reg := TRegex.Create('[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?');
  Result := StrToFloat(Reg.Match(Value).Value);
end;

Функция использует класс TRegex для создания регулярного выражения, которое соответствует различным форматам чисел, включая десятичные числа с необязательной экспоненциальной частью. Метод Match применяет это регулярное выражение к входной строке и возвращает объект совпадения. Свойство Value этого объекта затем конвертируется в вещественное число с помощью функции StrToFloat.

Обратите внимание, что подход с RegEx может быть более гибким и точным, чем оригинальный код, но он требует включения units RegularExpressions в проект.

Функция StringToNumber преобразует строку в число, удаля из нее все лишние символы и оставляя только цифры, десятичную точку и знак э指数а.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Текст и Строки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:34:55/0.0059940814971924/1