Шаг 60.
Текстовые файлы

    Этот шаг мы посвятим изучению особенностей текстовых файлов.

Начальные и завершающие операции
Процедура 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

Предыдущий шаг Содержание Следующий шаг