Итак, за именем диска может указываться имя каталога, за именем каталога может следовать одно или несколько имен каталогов нижнего уровня. Каждому из них должна предшествовать обратная косая черта (\), т.е. весь путь к файлу отделяется от имени файла обратной косой чертой. Максимальная длинна имени вместе путем – 79 символов, например:
Var
Finp: text;
Flout: file of string;
Const
Name = ‗c: \dir\Sub dir\out. txt‘;
Begin
Assign (finp,‘123.dat);
Assign (fout, name);
End.
Инициация файла.
Прежде чем программа сможет манипулировать текстовым файлом, этот файл должен быть подготовлен к вводу или выводу – иными символами, открыт. Заметим, что текстовый файл не может быть открыт для ввода и для вывода одновременно. То есть, если идет процесс считывания данных из текстового файла, невозможно осуществить запись результатов в тот же файл.
Таким образом, инициировать (открыть) файл означает
– указать для этого файла направление передачи данных.
Для чтения файл инициируется с помощью стандартной процедуры RESET:
RESET (< ф.п.>);
Здесь < ф.п.> - файловая переменная, с вязанная ранее процедурой ASSIGN с уже существующим файлом или логическим устройством – приемником информации. При выполнении этой процедуры дисковый файл или логическое устройство подготавливается к чтению информации. В результате специальная переменная – указатель, связанная с этим файлом, будет указывать на начало файла, т.е. на самый первый компонент с порядковым номером 0 (см. рис.4.2.11.).
Рассмотрим фрагмент программы иллюстрирующей вышеизложенное:
Var
F: life of char; Begin
Assign (f,‘ my file. dat‘);
Reset (f);
…
end.
Рассмотрим другую стандартную процедуру REWRITE:
REWRITE (< ф.п.>)
Данная процедура инициирует запись информации в файл или в логическое устройство, связанное ранее с файловой переменной <ф.п.>. Данной процедурой нельзя инициировать запись информации ранее существующий дисковый файл: при выполнении этой процедуры старый файл уничтожается и никаких сообщений об этом выдается. При этом новый файл подготавливается к приему информации и его указатель принимает значение 0 (в пустой строке).
Другая процедура:
APPEND (<ф.п.>);
Инициирует запись в ранее существующий текстовый файл для его расширения, при этом указатель файла устанавливается в его конец.
Процедура APPEND применима только к текстовым файлам, т.е. их файловая переменная должна иметь тип TEXT. Кроме того данной процедурой нельзя инициировать запись в типизированный или не типизированный файл. Если текстовый ранее уже был открыт с помощью RESET или REWRITE, то использование APPEND приведет к закрытию этого файла и открытию его вновь, но уже для добавления файла.
Дополнительные процедуры и функции для работы с файлами.
Выше были рассмотрены процедуры инициации файлов. Рассмотрим дополнительные процедуры и функции.
Процедура CLORE. Закрывает файл, однако связь файловой переменой с именем файла, установлен – формат обращения:
CLORE (<ф.п.>);
Процедура RENAME. Переименовывает файл. Формат обращения:
RENAME (<ф.п.>, < новое имя>);
Здесь < новое имя > - строковое выражение, содержащее новое имя файла. Перед выполнением данной процедуры необходимо закрыть файл.
Процедура ERASE. Уничтожает файл. Формат обращения:
ERASE (<ф.п.>);
Перед выполнением данной процедуры файл должен быть закрыт.
В Turbo Pascal существует еще множество дополнительных процедур и функций (FLUSH, EOF, GETDIR, MKDIR, RMDIR и т.д.), рассмотренных в соответствующей литературе.
Здесь же рассмотрим только процедуры READ, WRITE и функцию EOF.
Процедура READ. Предназначена для считывания в программу данных из текстового файла (символов, строк и чисел). Формат обращения:
READ (< ф.п.>, <сп. ввода>); или READ (< сп. ввода>); Здесь < сп. ввода> - список ввода: последовательность из одной или более переменных типа CHAR, STRING, а та же любого целого или вещественного типа. Рассмотрим пример: пусть имеется программа, в которой имеются следующее описание переменных:
Var
Salary: Real;
Name: String; Separator: Char; My Data: Text;
Здесь, последняя строка объявляет переменную My Data, относящуюся к типу TEXT. Тип TEXT – это стандартный тип для текстовых файлов.
Далее, если в программе будет:
Read ( My Data, Salary, Name);
то этот оператор будет считывать три элемента данных из файла My Data, отправляя первый из них в переменную Salary, второй - Separator и третью – в
Name.
При этом, Turbo Pascal «знает» откуда ему с помощью этого оператора считывать данные, т.к. самый первый параметр оператора Read представляет собой переменную типа TEXT и Turbo Pascal считывает данные из файла соответствующего этой переменой ( в противном случае данные считываются с клавиатуры).
Заметим, что для считывания множества элементов из файла необходимо использовать оператор цикла.
Процедура READL. Данная процедура идентична процедуре Read за исключением того, что после считывания последней переменной оставшаяся часть строки до маркера EOLN пропускается, поэтому следующее обращение к Readln или Read начинается с первого символа новой троки.
Процедуры WRITE и WRITELN. Обеспечивают вывод информации из программы в текстовый файл или передачу ее на логические устройства. Формат обращения:
WRITE (< ф.п. >, <сп. вывода>); или WRITE (<сп. вывода>);
Здесь <сп. вывода> - список вывода: последовательность из одного или более выражений типа CHAR, STRING и т.д.
При этом, файловая переменная должна быть предварительно описана как переменная типа TEXT и связана с именем файла или логическим устройством процедурой ASSIGN. Если <ф.п.> отсутствует, то процедура вывода будет автоматически осуществлена на экран дисплея.