После открытия файла процедурой Append запись в него будет происходить с того места, где находился признак конца файла (код 26). При необходимости поменять текстовый буфер надо сделать это до открытия файла процедурой Append. Вообще говоря, процедура Append, кроме способа открытия файла (с конца), ничем не отличается от процедуры Rewrite.
12.6.1.3. Процедура Flush( VAR f: Text). Эта процедура применяется к файлам, открытым для записи (процедурами Rewrite или Append). Данные для записи накапливаются в буфере файла и только после полного его заполнения записываются в физический файл. Процедура Flush принудительно записывает данные из буфера в файл независимо от степени его заполнения. Когда буфер имеет большую емкость, его содержимое может не попасть в физический файл, если программа внезапно прервется в процессе счета. Этого можно избежать, если перед «аварийными» частями программы ставить вызовы Flush.
Процедура Flush не закрывает файл и не влияет на последовательность вывода. Flush может найти применение при работе со стандартными файлами MS-DOS: устройствами AUX, или COM1, COM2,...,PRN, или LPT1 LPT3. При работе с ними данным незачем «отстаиваться » в буфере, и процедура Flush, поставленная после Write, снимет эффект задержки буфера файла.
12.6.1.4. Функция EOLn( VAR f: Text) : Boolean. Эта функция анализирует текущее положение в текстовом файле f, открытом для чтения. Расшифровка этой функции говорит сама за себя:
- 236 -
«End-Of-Line» — конец строки. EOLn возвращает значение True, если следующей операцией будет прочитан признак конца строки (символ #13) или конца файла (символ #26) и False во всех прочих случаях. Функция как бы предчувствует результат предстоящего чтения и анализирует его. Необходимость в EOLn( f ) возникает всякий раз, когда заранее не известно, где встретится конец строки. Пусть у нас имеется файл со столбцами цифр (рис. 12.5).
DIGITS.DAT
12.3 13.2 14.4 5.7 126.0[13][10]
17.8 -7.6 100 456 987.6[13][10]
55.5 6.06 7.8 0.00 10.11[13][10]
[26]
Рис. 12.5
Как автоматически определить число столбцов в нем и наладить чтение? С помощью EOLn (рис. 12.6).
| VAR
| >f :Text; { логический текстовый файл }
| >NCol :Byte; { счетчик числа столбцов }
| >R :Real; { число для чтения из файла }
| BEGIN
| >Assign( f, 'DIGITS.DAT' ); { связывание файлов }
| >Reset ( f ); { открытие f для чтения }
| >Ncol := 0; { стартовое значение Ncol}
| >while NOT EOLn(f) do
| >begin { Цикл до конца строки: }
| > Read( f, R ); { чтение вправо по строке}
| > Inc( Ncol ) { увеличение счетчика столбцов }