Format
Adam Boduch
S := Format('Witaj %s, nazywam się %s', ['Nieznajomy', 'Komputer']);
Pierwszy parametr tej funkcji jest wzorcem. W miejsce oznaczone %s podstawione zostaną wartości przekazane w drugim parametrze, czyli wartość zmiennej S będzie następująca: Witaj Nieznajomy, nazywam się Komputer
. Symbol %s oznacza, iż w to miejsce podstawiony zostanie parametr typu String. Jeżeli chcemy podstawić inne typy danych, należy użyć innego symbolu:
-
d
- liczba całkowita, przeważnie typ Integer, -
u
- liczba naturalna (bez znaku), -
e
- wartość zmiennoprzecinkowa, rezultat w postaci formatu "naukowego", -
f
- wartość zmiennoprzecinkowa, rezultat w postaci liczby zaokrąglonej do dwóch miejsc po przecinku, -
g
- wartość zmiennoprzecinkowa, -
n
- numer, rezultat w postaci liczby z separatorem tysięcznym, -
m
- wartość pieniężna, -
p
- wskaźnik, adres do pamięci, -
s
- łańcuch, -
x
- wartość heksadecymalna.
Przykładowy program:
program Foo;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
S : String;
TF : TextFile;
begin
S := 'Hello World';
AssignFile(TF, 'C:\foo.txt');
Rewrite(TF);
Writeln(TF, Format('String: %s', [S]));
Writeln(TF, Format('Decimal: %d', [1024]));
Writeln(TF, Format('Unsigned: %u', [1024]));
Writeln(TF, Format('Scientific: %e', [1024.1024]));
Writeln(TF, Format('Fixed: %f', [1024.1024]));
Writeln(TF, Format('General: %g', [1024.1024]));
Writeln(TF, Format('Number: %n', [1024.1024]));
Writeln(TF, Format('Money: %m', [1024.1024]));
Writeln(TF, Format('Pointer: %p', [@S]));
Writeln(TF, Format('Hexadecimal: %x', [1024]));
CloseFile(TF);
Readln;
end.
W skutek uruchomienia takiego programu, plik tekstowy zostanie zmodyfikowany następująco:
String: Hello World
Decimal: 1024
Unsigned: 1024
Scientific: 1.02410240000000E+003
Fixed: 1024.10
General: 1024.1024
Number: 1 024.10
Money: 1 024.10 zł
Pointer: 0040A79C
Hexadecimal: 400
Zamiast funkcji Format
, do wstawiania danych w łańcuchu można użyć funkcji konwersji danych, np. IntToStr oraz podobnych. Jednak w przypadku gdy mamy musimy wstawić wiele danych, zastosowanie funkcji Format
zwiększa czytelność, a ponadto daje większe możliwości manipulowania formatowaniem.
Funkcja Format
umożliwia określenie kilku dodatkowych parametrów, które należy nadać pomiędzy znakiem %
, a symbolem określającym typ danych (czyli np. s, d). Istnieje np. możliwość nadania szerokości dla wartości:
S := Format('|%5d|', [12]);
Znaki | są użyte jedynie po to, aby zaakcentować początek oraz koniec łańcucha. Najważniejsze jest formatowanie: %5d
, które spowoduje, iż zmienna S będzie posiadała wartość: | 12|
. Dodatkowo, operator - daje możliwość wyrównania wartości do lewej:
{ rezultat: | 12| }
S := Format('|%5d|', [12]);
{ rezultat: |12 | }
S := Format('|%-5d|', [12]);
W takim wypadku minimalna szerokość wstawianej liczby to 5 znaków. Istnieje możliwość wypełnienia pustej przestrzeni, zerami:
{ rezultat: |00012| }
S := Format('|%.5d|', [12]);
Istnieje możliwość zastosowania kombinacji:
{ rezultat: | 00012| }
S := Format('|%10.5d|', [12]);
Bardzo istostny operator, a mianowicie znak *
umożliwia dynamiczne podstawienie wartości. W powyższym przykładzie szerokość określona jest liczbą 10, a precyzja do 5 cyfr. Być może będziesz zmuszony, aby to użytkownik zadecydował o precyzji. W takim wypadku można zastosować operator *
:
program Foo;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
Width, Precision : Integer;
S : String;
begin
Width := 10;
Precision := 5;
S := Format('|%*.*d|', [Width, Precision, 12]);
Writeln(S);
Readln;
end.
Istnieje jeszcze jeden operator, znak dwukropka (:
). Umożliwia określenie numeru argumentu, który zostanie wstawiony w dane miejsce. Przykładowo:
S := Format('|Test: %s %s %s %1:s|', ['Jeden', 'Dwa', 'Trzy']);
{ Rezultat: |Test Jeden Dwa Trzy Dwa| }
Druga, przeciążona funkcja posiada parametr typu TFormatSettings, który może zawierać informacje o separatorze liczb dziesiętnych i innych związanych z daną lokalizacją.
Zobacz też: