Работа с текстовыми файлами. Физические файлы и файловые переменные. Подпрограммы открытия и обработки файлов, страница 2

 


Рис.1. Физический файл и файловый указатель

Номер доступного элемента в последовательности элементов файла является значением специальной переменной. Такая переменная не определяется и явно не записывается в Паскаль-программе, но существует и называется файловым указателем (рис. 1). Значение файлового указателя и соответственно расположение доступного элемента в последовательности изменяется при выполнении подпрограмм обработки файлов.

Основными действиями при работе с файлом является чтение, т.е. копирование значения доступного элемента в “нормальные” переменные программы, и запись – копирование значения в доступный элемент. Возможность чтения и записи задается режимом доступа к файлу, или его состоянием. Таким образом, в любой момент выполнения программы файл находится в определенном состоянии – чтения, записи или чего-то еще.

Рассмотрим более детально ту часть информации о файлах, которая непосредственно и является темой нашей лабораторной работы.

2. Текстовые файлы.

Текст – это в общем смысле последовательность символов разбитая на строки, а строка – это последовательность символ с явно обозначенным концом. В языке Turbo Pascal  для файлов-текстов определен специальный тип с именем TEXT. Например,  можно определить:

varFiFotext;

Подчеркнем, что хотя элементами текста являются символы, этот тип отличается от типа fileofchar.  В текстах специальные символы, с помощью которых задаются конец строки и конец текста. Их обработка отличается от обработки других символов и задается специальными подпрограммами, неприменимыми к файлам типа fileofchar, например readln и writeln.

3. Запись в текст.

Описание работы с текстами, которые являются файлами на диске компьютера, начнем с операции записи, поскольку она имеет намного меньше “подводных камней”, чем чтение.

Пусть далее fявляется именем файловой переменной типа text. Текст, как и файлы других видов, устанавливается в начальное состояние для записи вызовом rewrite (f). После этого файл становится пустым. Для того чтобы дописывать информацию к уже существующему тексту, надо установить его в начальное состояние для дописывания вызовом процедуры APPEND:

append (f)

После этого все символы текста, кроме символа конца остаются в тексте, и новые символы будут дописываться вслед за последним из них.

Запись в текст задается вызовом процедуры WRITE или WRITELN, первым аргументом в которой является имя файловой переменной. При выполнении вызова:

write (f,   выражение_базового_типа_или_строка)

сначала вычисляется значение выражения. По этому значению создается последовательность символов, которая его изображает, и копируется в текст f. Например, при выполнении вызова:

write (f,   trunc(sqrt(9999)))

в файл дописываются два символа ‘9’ и ‘9’, задающие число 99. В вызове можно записать сразу несколько выражений через запятую:

write(f,   выражение1,   выражение2,...)

Например, при х=2 вызов:

write(f,   ‘х=‘,   х,   ‘;   х••2=‘,   sqr (х) )

задает вывод в файл последовательности символов х=2; х••2=4. Кстати, такой вызов выполняется как последовательность вызовов:

write (f,   выражение1) ;  write (f,   выражение2) ; . . .

Процедура writelnотличается лишь тем, что при вызове:

writeln (f,   список_выражений_базовых_типов_или_строк)

за последней константой в текст добавляется слово eol (в Turbo Pascal – символы [13][10]). Список выражений здесь может быть пустым – тогда добавляется только eol.

В вызовах процедур write и writeln после выражения через двоеточие можно задать ширину поля W для записи значения выражения, например:

write (f,   sqr (x) : 2)

Здесь W=2.