Этот шаг мы посвятим изучению особенностей текстовых файлов.
Начальные и завершающие операции
Процедура Append
Операции ввода/вывода
Функции EoLn, Eof
Функции SeekEoLn, SeekEof
В отличие от файлов других типов текстовые файлы не являются просто последовательностью элементов одного типа, а состоят из символов, объединенных в строки. Каждая строка завершается парой символов CR/LF ("Перевод строки/Возврат каретки"). Файл заканчивается маркером Ctrl-Z.
Представителем текстового файла в программе является переменная файлового типа,
которая должна быть описана с указанием стандартного типа Text:
Var
FileText: Text; .
Работа с текстовыми файлами организуется построчно. Это объясняется тем, что, в отличие от файлов других типов, здесь заранее неизвестна длина каждой записи. Поэтому, для того, чтобы "добраться" до третьей записи. нужно прочитать первые две. Таким образом, допускается только последовательная форма чтения/записи строк. Запрещается одновременно производить операции чтения и записи для одного и того же файла.
Перечислим основные операции, позволяющие организовать работу с текстовыми файлами.
1. Начальные и завершающие операции. Для текстовых файлов применимы те же самые операции инициализации, открытия и закрытия, что и для обычных файлов:
2. Процедура Append - предназначена для открытия
файла с последующей записью в него. Эта процедура не очищает файл, а только устанавливает
на конец указатель файла. Таким образом, эту процедуру удобно использовать при
добавлении записей в конец файла. Общий вид:
Append (<имя файловой переменной>); .
Приведем небольшой фрагмент программы с использованием этой процедуры:
Var
Extend: Text;
. . .
Assign(Extend,'BOOK');
Append(Extend);
В этом случае процедура Append открывает файл Extend для расширения.
3. Операции, связанные с вводом/выводом. Чтение из текстового файла и запись в текстовый файл производятся с помощью тех же самых процедур:
Текстовый файл по определению содержит символьную информацию, поэтому значения других типов будут преобразовываться в символьное представление и в таком виде читаться или записываться в файл.
Помимо процедур Read и Write для текстовых файлов имеются следующие модификации - процедуры ReadLn и WriteLn. Эти процедуры производят те же действия, но дополнительно производят переход к следующей строке текстового файла.
4. Функции EoLn, Eof. Для того, чтобы проверить,
достигнут ли конец текущей строки, используется функция EoLn. Общий вид:
EoLn(<имя файловой переменной>): Boolean; .
Эта функция возвращает логическое значение True, если текущая строка
исчерпана, и False - в противном случае.
Для контроля за исчерпанием текстового файла можно использовать ту же самую функцию Eof, что и для обычных файлов.
5. Функции SeekEoLn, SeekEof. Для текстовых файлов
неприменима операция поиска записи с нужным номером (процедура Seek),
определенная для обычных файлов. Некоторым подобием процедуры Seek являются
функции SeekEoLn и SeekEof. Их общий вид:
SeekEoLn(<имя файловой переменной>): Boolean;
SeekEof(<имя файловой переменной>): Boolean; .
Функция SeekEoLn осуществляет поиск конца строки. Она пропускает все пробелы, знаки табуляции в текущей строке и устанавливает указатель либо в конце строки (тогда ее значение True), либо на первом значащем символе.
Функция SeekEof осуществляет поиск конца файла. Результат действия этой функции аналогичен SeekEoLn, но она дополнительно пропускает символы конца строки.
В заключение приведем пример программы, иллюстрирующей некоторые из рассмотренных процедур и функций. Cоставить программу, позволяющую вводить в файл некоторый текст, открывать текстовый файл и подсчитывать количество строк в нем.
Program Textfile; Var FileText: Text; Strings: Array[1..4] Of String[35]; str: String[35]; i: Integer; Begin Strings[1]:='О сколько нам открытий чудных'; { Текст, } Strings[2]:='Готовит просвещенья дух.'; { помещаемый } Strings[3]:='И опыт, сын ошибок трудных,'; { в файл. } Strings[4]:='И гений, парадоксов друг.'; Assign(FileText,'STICH.TXT'); {Связь файловой переменной } { с именем файла. } Rewrite(FileText); { Открытие файла на запись. } For i:=1 To 4 Do { Запись текста в файл. } WriteLn(FileText,Strings[i]); Close(FileText); { Закрытие файла. } Reset(FileText); { Открытие файла на чтение. } i:=0; { Счетчик количества строк. } Repeat ReadLn(FileText,str); { Чтение текущей строки. } WriteLn(str); { Вывод прочитанной строки. } i:=i+1; { Увеличение счетчика. } Until (SeekEof(FileText)=TRUE); { Продолжать чтение до тех } { пор, пока не встретится } { конец файла. } WriteLn('Строк - ',i); End.
На следующем шаге мы посмотрим, что собой представляют нетипизированные файлы.
Начальные и завершающие операции
Процедура Append
Операции ввода/вывода
Функции EoLn, Eof
Функции SeekEoLn, SeekEof