Write
Adam Boduch
W przeciwieństwie do procedury Writeln, na końcu linii nie jest dodawany znak nowej linii.
program Foo;
{$APPTYPE CONSOLE}
var
Name : String;
begin
Write('Podaj swoje imię: ');
Readln(Name);
Writeln('Witaj ' + Name + ' jestem Twoim komputerem!');
Writeln('Naciśnij Enter, aby zakończyć');
Readln;
end.
Procedura Write
jest używana także do zapisywania danych w plikach typowanych.
Procedury Write
, Writeln, Read, Readln są podstawowymi jeśli chodzi o komunikację pomiędzy konsolą, plikiem i użytkownikiem. Dzięki procedurom Write/WriteLn
możemy swobodnie wyprowadzać na ekran tekst i liczby. Różnica w działaniu polega na tym, że WriteLn
na końcu wiersza stawia Enter i przesuwa kursor na początek następnej linii. Taki sam efekt uzyskamy wywołując procedurę Write(CR+LF)
, gdzie CR to (carrige return) powrót karetki, a LF to (line feet) czyli nowy wiersz.
Umożliwiają także zapis wartości do pliku. Tu należy zastrzec, że Writeln możemy użyć tylko plików tekstowych, natomiast Write
jest bardziej uniwersalna ze względu na możliwość obsługi plików typowanych. Generalnie posługiwanie się nimi jest bardzo elastyczne, co czyni je niezwykle prostymi w użyciu Należy tylko pamiętać, że poszczególne argumenty należy poprzedzać przecinkiem. Przedstawię tu najczęstsze przypadki użycia procedur Write/WriteLn
.
Akceptowalne są następujące sposoby użycia (gdzie ch to zmienna char):
WriteLn(ch); Write(ch);
WriteLn(2+2); Write(2+2);
WriteLn(ch + ch); Write(ch + ch);
WriteLn(sin(30)); Write(sin(30));
WriteLn('Adam Oleksy'); WriteLn('Adam Oleksy');
WriteLn('Adam' + ch); Write('Adam' + ch);
WriteLn('Adam', ch); Write('Adam', ch);
WriteLn('Adam', ch, sin(30)); Write('Adam', ch, sin(30));
Dodatkowo dla liczb całkowitych i zmiennoprzecinkowych możliwe jest stosowanie formatowania:
a). Liczby całkowite: WriteLn(wrazenie-calkowite:liczba-cyfr);
b). Liczby rzeczywiste: WriteLn(wyrazenie:liczba-cyfr:po-przecinku);
Jeżeli liczba cyfr będzie zerem wówczas nie ma ograniczeń długości wyświetlania.
WriteLn(sin(30):0:3 ? wyświetli wartość sinusa z dokładnością do 3 miejsc po przecinku.
Write(sin(30):0:3
WriteLn(PI:10:1); - wyświetli wartość PI o łącznej ilości 10 cyfr i 1 po przecinku
Write(PI:10:1);
Procedury owe wspomagają również obsługę zapisu do pliku. Write
operuje na plikach tekstowych i typowanych, natomiast WriteLn
tylko na plikach tekstowych. Przykłady:
type
TRec = record
A, B, C :Word;
end;
var
T :Text; { plik tekstowy dla write/writeln}
F :FILE OF TRec; { plik typowany tylko dla write}
Rec :TRec;
Standardowa postać wywołania jest następująca:
WriteLn(zmienna-plikowa, wyrażenie);
Write(zmienna-plikowa, wyrażenie);
Dopuszczalne są więc wszystkie style wywołania zawarte w tabelce, należy tylko poprzedzić wyrażenie zmienną plikową:
WriteLn(T,'Adam Oleksy'); { zapisze do pliku T wyrażenie }
Write(F, Rec);
Dodatkowo dopuszczalne jest również użycie procedur z pominięciem parametrów:
WriteLn; Write; WriteLn(T); Write(T);
Jest to równoważne z
WriteLn(); Write(
); WriteLn(T, ); Write(T,
);
Wśród całej elastyczności procedur należy pamiętać, że nie operują one na zmiennych obiektowych Służą do tego strumienie, ale jest to temat na osobny artykuł. Nielegalną będzie więc instrukcja:
TYPE
Tobj = object
X, Y :real;
constructor Init;
end;
var
Obj :Tobj;
begin
WriteLn(Obj);
WriteLn(Obj.Init);
end;
Natomiast kostrukcja:
WriteLn(Obj.X, Obj.Y);
Jest całkowicie legalna.
Zobacz też: