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

Если вы не хотите выводить данные напрямую, а нужно объединить любое количество переменных в одну строку, в Pascal существует три основных способа реализации:

Конкатенация через специализированные функции преобразования

***ToStr + объединение строк оператором +

Отдельно преобразуйте каждый тип данных с помощью специализированных функций, затем соедините строки оператором +:

uses SysUtils;

var
  MyInt: Integer;
  MyStr: string;
begin
  MyInt := 123;
  MyStr := 'My int number is ' + IntToStr(MyInt) + ', and the value of Pi is ' + FloatToStr(Pi);
end;Code language: JavaScript (javascript)

Часто используемые вспомогательные функции (все содержатся в модуле SysUtils):

  • Число в строку: IntToStr, FloatToStr, FormatFloat (настраиваемый формат для дробных чисел)
  • Строка обратно в число: StrToInt, StrToIntDef, StrToFloat

Полностью рабочий пример

{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}

uses SysUtils;

var
  MyInt: Integer;
  MyStr: string;
begin
  MyInt := 180;
  MyStr := 'My int number is ' + IntToStr(MyInt) + ', and the value of Pi is ' + FloatToStr(Pi);
  WriteLn(MyStr);
end.Code language: PHP (php)
Преимущества
  1. Очень гибкий подход; отдельные функции покрывают большинство типов: целые числа, дробные, даты и т.д.;
  2. Полный набор обратных преобразований, удобно при разборе пользовательских строк ввода.
Недостатки

При большом количестве переменных многослойная конкатенация через + делает код громоздким и трудным для чтения.


Функция форматирования Format

Format (аналог sprintf из языка C)

Базовый синтаксис

uses SysUtils;

var
  Res: string;
  MyInt: Integer;
  MyFloat: Double;
  MyString: string;
begin
  Res := Format('%d %.4f %s', [MyInt, MyFloat, MyString]);
end;Code language: JavaScript (javascript)
  • %d: заполнитель для целого числа; %.4f: дробное число с четырьмя знаками после запятой; %s: заполнитель для строки
  • Второй аргумент — это константный массив, последовательно заполняющий все заполнители

Полный пример

{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}

uses SysUtils;

var
  Res: string;
  MyInt: Integer;
  MyFloat: Double;
  MyString: string;
begin

  // set value
  MyInt := 169;
  MyFloat := 0.618;
  MyString := 'foxdevelop.com';

  Res := Format('%d %.4f %s', [MyInt, MyFloat, MyString]);
  WriteLn(Res);
end.Code language: PHP (php)

Преимущества

  1. Шаблон формата отделен от данных, структура кода чистая; при многоязычной локализации программы достаточно изменить строку шаблона, список переменных трогать не нужно;
  2. Нет скрытой логики компилятора. При объявлении собственных функций с переменными аргументами array of const можно повторно использовать логику форматирования и передавать параметры на обработку функции Format.

Недостатки

Компилятор не проверяет на соответствие типов переменных и заполнителей на этапе сборки; несовпадение типов вызывает исключение преобразования EConvertError во время выполнения (не приводит к сбоям доступа к памяти).


WriteStr

Сохраняет вывод функции Write в строковую переменную

Назначение: работает почти как Write/WriteLn, но не выводит текст в консоль, а сохраняет результат в первую целевую строковую переменную:

var S: string;
begin
  WriteStr(S, 'Pi value: ', Pi:1:4);
end;Code language: JavaScript (javascript)

Полный пример

{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}

uses SysUtils;

var S: string;
begin
  WriteStr(S, 'Pi value: ', Pi:1:4);
  WriteLn(S);
end.Code language: PHP (php)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *