.
Delphi: функция format (пример, форматирование, преобразование в шестнадцатеричную систему)
Автор megabax   
28.01.2010 г.
Массив

 Delphi: функция format (пример, форматирование, преобразование в шестнадцатеричную систему)

Предположим, мы хотим преобразовать число в строку, например, для того, что бы вывести его на экран. Ну, хотя бы в таком простом случае, как отобразить результат вычисления:

procedure TForm1.btnCalkClick(Sender: TObject);
begin
        lbResult.Caption:=FloatToStr(123/456);
end;

Вот что выдаст компьютер при выполнении этого кода:

Delphi: функция format (форматирование, преобразование в шестнадцатеричную систему)

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

procedure TForm1.btnCalkClick(Sender: TObject);
begin
       lbResult.Caption:=Format('Результат %.3n',[123/456]);
end;

При нажатии на кнопку программа у нас покажет вот это:

Delphi: функция format (форматирование, преобразование в шестнадцатеричную систему)

В Delphi  функция Format, обеспечивает 'C' подобное форматирование множества простых типов данных в строке. В качестве первого параметра этой функции мы указываем форматную строку, а в качестве второго - множество параметра (то что внутри []).

В простых условиях каждые данные, форматирующие подстроку начинаются с % и заканчиваются индикатором типа данных:

d = Десятичное (целое число)
e = Научный
f = Установленный
g = Генерал
m = Деньги
n = Число (плавающее)
p = Указатель
s = Строка
u = Десятичное число без знака
x = Шестнадцатеричный


Рассмотрим пример:

procedure TForm1.btnCalkClick(Sender: TObject);
var i:integer;
begin
    i:=123;
    lbResult.Caption:=Format('%d в десятичном это %x в шестнадцатиричном',[i,i]);
end;

Вот что нам выдаст программа:

Delphi: функция format (форматирование, преобразование в шестнадцатеричную систему)

Общий формат форматирования каждой подстроки следующий:

%[Index:][-][Width][.Precision]Type

где квадратные скобки относятся к дополнительным параметрам, и :. - символы - литералы, первые 2 из которых используются, чтобы идентифицировать два из дополнительных параметров.

Рассмотрим еще пример:

procedure TForm1.btnCalkClick(Sender: TObject);
begin
      lbResult.Caption:=Format('%.4f',[123.456]);
end;

И вот что нам выдаст программа:

Delphi: функция format (форматирование, преобразование в шестнадцатеричную систему)

А теперь рассмотрим пример, демонстрирующий все форматы функции format. Сналала положим на форму комонент TListBox (он находиться на закладке Standart). Назовем этот компонент lbFormatDemo. Затем добавим кнопочку и создадим обработчик событий OnClick:

procedure TfrmFormatDemo.btnStartClick(Sender: TObject);
var
     text : string;
begin
     // Только 1 элемент данных
     lbFormatDemo.Items.Add(Format('%s', ['Hello']));

     // Соединение символьного текста и элемента данных
     lbFormatDemo.Items.Add(Format('String = %s', ['Hello']));

     // Примеры каждого из типов данных
     lbFormatDemo.Items.Add(Format('Decimal = %d', [-123]));
     lbFormatDemo.Items.Add(Format('Exponent = %e', [12345.678]));
     lbFormatDemo.Items.Add(Format('Fixed = %f', [12345.678]));
     lbFormatDemo.Items.Add(Format('General = %g', [12345.678]));
     lbFormatDemo.Items.Add(Format('Number = %n', [12345.678]));
     lbFormatDemo.Items.Add(Format('Money = %m', [12345.678]));
     lbFormatDemo.Items.Add(Format('Pointer = %p', [addr(text)]));
     lbFormatDemo.Items.Add(Format('String = %s', ['Hello']));
     lbFormatDemo.Items.Add(Format('Unsigned decimal = %u', [123]));
     lbFormatDemo.Items.Add(Format('Hexadecimal = %x', [140]));
end;

вот что выдаст программа, когда мы нажмем на кнопочку:

Delphi: функция format (форматирование, преобразование в шестнадцатеричную систему)

А вот еще пример с использование ширины, индекса и значений точности:

procedure TfrmFormatDemo.btnStartClick(Sender: TObject);
begin
      // Значение ширины диктует размер вывода
      // с пробелом, добавляющемся слева
      // Обратите внимание <>, символы добавляются, чтобы показать форматирование

      lbFormatDemo.Items.Add(Format('Padded decimal = <%7d>', [1234]));

      // С '-' оператором, данные выравниваются влево
      lbFormatDemo.Items.Add(Format('Justified decimal = <%-7d>', [1234]));

      // Значение точности вынуждает 0 дополнений к желательному размеру
      lbFormatDemo.Items.Add(Format('0 padded decimal = <%.6d>', [1234]));

      // Комбинация ширины и точности
      // Обратите внимание, что значение ширины предшествует значению точности
      lbFormatDemo.Items.Add(Format('Width + precision = <%8.6d>', [1234]));

      // Индексное значение позволяет следующему значению в массиве
      // данных быть измененным
     lbFormatDemo.Items.Add(Format('Reposition after 3 strings = %s %s %s %1:s %s',['Zero', 'One', 'Two', 'Three']));

     // Обратите внимание, испытание показало, что * для параметра ширины
     // может привести к ECONVERTERROR.

     lbFormatDemo.Items.Add(Format('In line = <%10.4d>', [1234]));
     lbFormatDemo.Items.Add(Format('Part data driven = <%*.4d>', [10, 1234]));
     lbFormatDemo.Items.Add(Format('Data driven = <%*.*d>', [10, 4, 1234]));
end;

Delphi: функция format (форматирование, преобразование в шестнадцатеричную систему)

 

Последнее обновление ( 18.02.2013 г. )