Plik tekstowy przechowuje zbiór łańcuchów znaków podzielonych na linie, odseparowane znakami CR (Carret Return: #13) i LF (Line Feed: #10).
Pliki tekstowe można otwierać procedurami Rewrite, Reset i Append w zależności od sytuacji:
Dostęp do plików tekstowych jest sekwencyjny, tzn. aby odczytać konkretną informację umiejscowioną w konkretnej linii pliku tekstowego, trzeba odczytać wszystkie linie poprzedzające. Analogicznie traktowany jest zapis.
Zapis i odczyt realizują procedury standardowe:
Pierwszym parametrem jest zawsze zmienna plikowa. Kolejne parametry wymieniane po przecinku, specyfikują listę elementów zapisywanych/odczytywanych do/z pliku.
Przykład:
var f:TextFile; L:string; S5:string[5]; z1,z2,z3,z4:Char; begin AssignFile(f, 'c:\Ala.txt'); Rewrite(f); //otwarcie nowego pliku do zapisu L:=''Ala ma kota''; Writeln(f,L); //zapis łańcucha "Ala ma kota" //jako pierwszej linii pliku Write(f, 'A kot'); //zapis łańcucha w drugiej linii Writeln(f,' ma Alę'); //zapis łańcucha jako kontynuacji //drugiej linii (zakończonej znakami CR/LF) WriteLn(f); //zapis trzeciej, pustej linii //(czyli zapis znaków CR/LF) Writeln(f,'Ola ma ','psa');//zapis dwóch łańcuchów jako czwartej linii CloseFile(f); //zamknięcie pliku
W efekcie powstanie plik z zawartością:
Ala ma kota A kot ma Alę Ola ma psa
Ciąg dalszy przykładu:
Reset(f); //otwarcie pliku do odczytu ReadLn(f,L); //odczyt pierwszej linii pliku do //zmiennej L typu string Read(f,S5); //odczyt pięciu znaków: "A kot" do //zmiennej S5 Readln(f,L); //odczyt reszty linii jako zmiennej L ReadLn(f); //odczyt kolejnej całej linii (trzeciej) //bez jej zapamiętywania Read(f,z1); //odczyt jednego znaku z czwartej linii Read(f,z2); //odczyt kolejnego znaku z czwartej linii Read(f,z3); //odczyt kolejnego znaku z czwartej linii Read(f,z4); //odczyt kolejnego znaku z czwartej linii CloseFile(f); //zamknięcie pliku end;
Nie ma potrzeby dokonywania konwersji wartości numerycznych na łańcuchowe przed ich zapisem do pliku tekstowego. Przykład
var X:Double; Y:Integer; f:TextFile; begin AssignFile(f,'plik.txt'); Rewrite(f); X := Sin(Pi/4); Y : =Random(99); Writeln(f,X); Writeln(f,Y); CloseFile(f); end;
Powstanie plik z zapisem:
13 7.07106781186548E-0001 1.62754791419004E+0005
Można plik tekstowy z zapisanymi w nim liczbami odczytać w następujący sposób:
var A:array[1..3] of Double; i:Integer; f:TextFile; begin AssignFile(f,'plik.txt'); Reset(f); for i:=1 to 3 do Read(f,a[i]); CloseFile(f); end;
Procedura Read jest zdolna odczytać sekwencje znaków reprezentujące wartości numeryczne i konwertować te łańcuchy na wartości numeryczne, o ile są one odseparowane od innych sekwencji znakami tabulacji (#9), znakami spacji (#32) lub znakami CR/LF.
Można wpływać na format wartości numerycznych zapisywanych do pliku, bezpośrednio w procedurach Write, WriteLn, bez potrzeby odwoływania się do specjalistycznych funkcji formatujących. Należy użyć składni:
Writeln(f, WarReal:nZnakow:nPoPrzecinku);
gdzie: nZnakow - specyfikuje liczbę znaków przeznaczonych na reprezentację wartości rzeczywistej WarReal,
nPoPrzecinku - oznacza liczbę znaków przeznaczonych na cyfry po miejscu dziesiętnym.
W przypadku nadmiaru wyspecyfikowanej ilości znaków - liczba zostanie uzupełniona wprowadzającymi spacjami, zaś w przypadku niedomiaru, procedura Write/WriteLn zapisze liczbę z minimalną ilością znaków potrzebną do niezafałszowanej reprezentacji liczby.
Wykonanie instrukcji:
var f:TextFile; begin AssignFile(f,'d:\plik.txt'); Rewrite(f); WriteLn(f,Pi); WriteLn(f,Pi:5:3); WriteLn(f,Pi:10:3); WriteLn(f,Pi:0:3); CloseFile(f); end;
spowoduje utworzenie pliku z zawartością:
3.14159265358979E+0000 3.142 3.142 3.142