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.

Kopiuj
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):

Kopiuj
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.

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

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

Kopiuj
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ą:

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

Kopiuj
TYPE
 Tobj = object
  X, Y :real;
  constructor Init;
 end;

var
 Obj :Tobj;

begin
 WriteLn(Obj);
 WriteLn(Obj.Init);
end;

Natomiast kostrukcja:

Kopiuj
 WriteLn(Obj.X, Obj.Y);

Jest całkowicie legalna.

Zobacz też:

0 komentarzy