Среди всех файлов особое место занимают текстовые файлы. Особенностью текстовых файлов является объединение в них символов в строки. Каждая строка кончается специальным символом конца строки. Этот специальный символ (литера) не входит в стандартный тип CHAR и не имеет графического представления. Нас и не интересует вид этого символа. Главное, что с ним связана логическая функция EOLN (конец строки). EOLN (F) = TRUE, если окно указывает на признак конца строки. Заметим, что если EOLN (F) = TRUE, то при чтении элементов из файла в символьную переменную она принимает значение пробела (пробел – аналог конца строки). Для записи в файл признака конца строки служит стандартная процедура WRITELN.
Текстовые файлы, т.е. файлы с делением на строки, описываются с помощью слова TEXT, например: VAR X, D: TEXT.
П р и м е р 1. Определить количество строк в файле с именем BOOK.
program NOMBRELINE;
var K: integer; BOOK : text; S: char;
begin {Формирование файла BOOK}
assign (BOOK,'f1'); rewrite (BOOK); read (S);
while S<> '.' do begin
while S <> '#' do begin
write (BOOK, S); read (S); end;
writeln (book); read (S); end; close (BOOK);
{Подсчет числа строк в текст; BOOK}
K := 0; reset (BOOK); writeln ;
while not eof (BOOK) do
begin
if eoln (BOOK) then K := K + 1; read (BOOK, S); write (S);
end;
writeln ('В текстовом файле BOOK ', K,' – строк');
end.
Пояснение. В программе сначала формируется текстовый файл, у которого строки кончаются символом «$», а сам текст – символом «.». Текст вводится с клавиатуры в виде непрерывной цепочки, например:
Наша Маша громко плачет,$Уронила в речку мячик.$Тише, Машенька, не плачь,$Не утонет в речке мяч.$.
Во второй части программы с помощью функции EOLN подсчитывается число строк текста, и текст выводится на экран построчно:
Наша Маша громко плачет,
Уронила в речку мячик.
Тише, Машенька, не плачь,
Не утонет в речке мяч.
Итак, для записи литеры «конец строки» используется процедура WRITELN (F), где F находится в режиме записи.
Схема работы процедуры WRITELN
T
a
g
…
c
d
^
окно
WRITELN (T):
T
a
g
…
c
d
#
^
окно
Таким образом, сформированный файл легко выводится на печать построчно с помощью оператора WRITE, так как признак конца строки в файле инициирует переход на другую строку экрана (эффект оператора WRITELN).
В режиме чтения для работы с литерой «конец строки» есть процедура READLN. По этой процедуре окно файла устанавливается на первый элемент следующей строки файла.
Схема работы процедуры READLN
T
d
…
b
c
d
#
e
f
^
окно
READLN (T):
T
d
…
b
c
d
#
e
f
^
окно
Файлы как переменные величины могут выступать в качестве аргументов и результатов при создании функций-процедур, причем эти переменные должны быть всегда оформлены как параметры-переменные, даже если файл в процедуре играет роль аргумента.
П р и м е р 2. Посчитать число знаков препинания в указанном текстовом файле.
function PUNCTUATION (var CHARFILE: text): integer;
var SYMBOLNOMB: integer;
SYMBOL: char;
begin
SYMBOLNOMB := 0; reset (CHARFILE);
while not eof (CHARFILE) do
begin
read (CHARFILE, SYMBOL);
if SYMBOL in ['.',',',' ',':','...] then
SYMBOLNOMB := SYMBOLNOMB + 1
end;
PUNCTUATIОN := SYMBOLNOMB
end.
С помощью этой функции можно теперь произвести подсчет числа вхождений знаков препинания в любой текст, представленный некоторым текстовым файлом. Рассмотрим в качестве примера фрагмент программ для файла с именем FIL:
assign (FIL, 'FIL');
reset (FIL);
n := PUNCTUATION (FIL);
close (FIL);
writeln ('число знаков препинания в тексте FIL =', n).
Контрольные вопросы
1. Чем принципиально отличается файловый тип данных от всех остальных типов языка Паскаль?
2. Если файл объединяет величины одного типа, то как он называется?
3. Фиксируется ли число элементов файла при его объявлении?
4. Какие бывают типы файлов по способам доступа к их элементам?
5. Каково назначение процедуры ASSIGN?
6. С помощью каких процедур открывают типизированный файл для записи в него новых элементов?
7. Что осуществляет процедура CLOSE?
8. Какие процедуры используют для доступа к элементам файла (чтения из файла)?
9. Каким образом в текстовом файле образуются строки?
10. Какие логические функции используются при работе с файлами и какова их роль?