| BEGIN
| Assign(f, 'A:\REAL.DAT'); { установлена связь }
| Rewrite( f ); { открытие файла для записи }
| Write( f, ... ); { запись в файл f }
| Close( f ); { обязательно закрытие файла}
| {Пусть теперь надо сменить имя файла 'REAL' на 'FLOAT'}
| Rename( f, 'A:\FLOAT.DAT' ); { Готово! }
Рис. 12.1
Переименование происходит при закрытом файле f. После него можно снова открывать файл, но f будет связана уже с новым именем. Старый файл не резервируется (его имя 'A:\REAL.DAT' замещено на 'A:\FLOAT.DAT').
Будет ошибкой так переименовывать имя, что изменится имя диска и путь к файлу. Например, заведомо ошибочен второй оператор:
- 229 -
Assign( f, 'A:\FILE.AAA');
Rename( f, 'C:\FILE.BBB');
поскольку, кроме имени файла, изменяется содержащий его диск. Ведь таким образом мы задаем перенос файла с А: на С:, а лишь затем его переименование. Перенос же, как и копирование, не определен в языке, и его надо конструировать средствами Турбо Паскаля или использовать внешний вызов командного процессора MS-DOS (см. процедуру Exec модуля DOS).
12.5.5. Удаление файлов
Процедура Erase(VAR f) уничтожает (стирает) физический файл на носителе (диске). Файловая переменная f должна быть предварительно связана с существующим физическим файлом. Сам файл к моменту вызова Erase должен быть закрыт.
Чтобы уничтожить файл с именем FileName, достаточно конструкции:
Assign(f, FileName); Erase(f);
где f — файловая переменная любого типа.
Если файл с именем FileName не существует, возникнет сбой при попытке уничтожить его.
12.5.6. Анализ состояния файлов
Логическая функция EOF(VAR f ) : Boolean возвращает значение True, когда при чтении достигнут конец файла f. Это означает, что уже прочитан последний элемент в файле или файл f после открытия оказался пуст. Во всех остальных случаях функция возвращает значение False. Состояние EOF обновляется автоматически при каждом обращении к процедуре ввода данных. Файл f должен быть открыт.
Обращение к EOF без указания файла соответствует анализу конца стандартного файла Input (как правило, связанного с клавиатурой). Стандартный файл считается текстовым, и конец файла в нем обозначен символом #26 (в прочих, нетекстовых файлах, явного обозначения конца файла не существует).
Назначение функции EOF — указывать на возникновение конца файла. Наиболее часто EOF используется в цикле while, читающем файл до конца:
while not EOF(f) do { пока не достигнут конец файла f,}
Read( f, ... ); { читать данные из этого файла}
- 230 -
Эта конструкция гарантирует, что чтение прекратится только после считывания последнего элемента в файле с логическим именем f. Обратите внимание, что используется именно цикл while...do, а не repeat...until. Функция EOF постоянно следит за статусом чтения и позволяет опознать конец файла до того, как мы его непосредственно прочитаем.
12.6. Текстовые файлы
Определение «текстовые файлы — это те, которые выдают или принимают текстовую информацию» в целом правильно, но не слишком развернуто. Дадим другое определение: текстовые файлы — это файлы, в которых:
1) информация представляется в текстовом виде посредством символов в коде ASCII;
2) порции информации могут разделяться на строки. Признаком конца строки служит символ #13 (код 13 — CR). Он может быть объединен с символом перевода строки #10 (код 10 — LF);
3) конец файла обозначается явно символом ^Z (код 26);
4) при записи чисел, строк и логических значений они преобразуются в символьный (текстовый) вид;
5) при чтении чисел и строк они автоматически преобразуются из текстового представления в машинное.
Бытовые примеры текстовых файлов просты. Если файл можно вывести на экран в текстовом режиме и прочитать его, то это — текст. Клавиатура посылает в компьютер «сплошной» текст-файл. Компьютер посылает на принтер текст-файл, даже если принтер рисует в графическом режиме. Рассмотрим коротенький текст-файл:
| Текст-файл
| [13][10]
| Вы читаете текстовый файл, который [13][10]
| может храниться на диске или печататься [13][10]
| на принтере.[13][10]
| В нем можно хранить цифровые записи чисел:[13][10]
| 123 456 789 0[13][10]
| 234 567 890 1[13][10]
| 1.2 3.4 5.60 4[13][10]
| -100.254 [13][10]
| Конец файла[13][10]
| [26]
Цифры в квадратных скобках — управляющие коды с тем же номером, т.е. [13]=#13. в файле они занимают по одному символу и в текстовых режимах, как правило, на экран и принтер не выводятся (но управляют выводом).