Write

Adam Boduch
Write
Moduł: System
```delphi procedure Write( [var F: Text; ] P1 [ , P2,..., Pn] ); procedure Write(F, V1,...,Vn); ``` [[Delphi/Procedury|Procedura]] realizuje zapis tekstu do pliku. Jeżeli parametr F nie został określony, tekst będzie wypisywany na ekranie konsoli.

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ż:

0 komentarzy