Прз на эвм(2) Файлы
Файл - структурированный тип данных, состоящий из последовательности компонентов одного типа, записанных под определенным именем.
Характеристические особенности:
-
Каждый файл имеет свое имя (до 8 символов), что дает возможность программе работать сразу с несколькими файлами.
-
Файл содержит компоненты одного типа. Типом может быть любой тип Турбо Паскаля, кроме файлов (нельзя создать файл файлов)
-
Длина вновь создаваемого файла никак не оговаривается при его объявлении, а ограничивается только объемом внешней памяти.
Задание файлового типа или переменной файлового типа
<имя>= FILE OF <тип >; <имя>= TEXT<тип >; <имя>= FILE <тип >;
<имя> - имя файлового типа (правильный идентификатор).
FILE OF – зарезервированные слова (файл из).
<тип > - любой тип TP, кроме файлов.
В зависимости от способа объявления выделяют три вида файлов:
1. Типизированные (задаются предложением FILE OF…). (длина компонента строго постоянна)
2. Текстовые (определяются типом TEXT).(совокупность символов, разделенные на строки, в конце которой стоит признак конца строки. Для работы с файлом его необходимо открыть, а по окончании работы- закрыть).
3. Нетипизированные (определяются типом FILE).(для них не указан тип компонентов)
Описание файловой переменной задаётся обычным способом в разделе описаний: var f: file of integer;
Доступ к файлам осуществляется следующим образом: файловую переменную связывают с именем файла стандартной процедурой Assign <файловая переменная> <имя>.
Основные операции: создание, просмотр, копирование, перемещение и удаление.
Любой программе доступны два предварительно объявленных файла со стандартными файловыми переменными: INPUT – для чтения данных с клавиатуры и OUTPUT – для вывода на экран.
Файл можно представить как бесконечный список значений одного типа. Все элементы файла пронумерованы, начальный элемент имеет нулевой номер. В любой момент времени программе доступен только один элемент файла, на который ссылается текущий указатель (может перемещаться и настраиваться). Все действия с файлом производят поэлементно.
Процедуры и функции для всех файлов:
Процедуры:
ASSIGN (<имя файловой переменной>,<имя файла >) связывает файловую переменную с именем файла. При её выполнении старый файл уничтожается и никаких сообщений не передаётся. Новый файл подготавливается к информации и его указатель принимает значение ноль.
Rewrite – создает новый файл для записи, старый файл уничтожается и никаких сообщений при этом не выдается.
Append – записывает информацию в конец файла в ранее существующий текстовый файл.
Reset – открывает файл для чтения, указатель устанавливается в начало файла.
Seek – устанавливает указатель на компоненту с порядковым номером N.
Close – закрывает файл, но связь файловой переменной с именем файла сохраняется.
Rename – переименовывает файл, перед переименованием данный файл нужно закрыть.
Erase – уничтожает файл, перед уничтожением данный файл нужно закрыть.
Truncate – усекает размер файла связанной с файловой переменной до текущей позиции. (для текстового файла не используется)
Для текстового:
WRITE(f, <список>) – запись в файл
WRITELN(f, <список>) – запись строки в файл.
READ (f, <список>) – чтение из файла.
READLN (f, <список>) – чтение строки из файла.
Функциия:
EOF– проверяет конец файла, возвращает истину, если указатель достиг конца файла.
EOLN – возвращает истину, если во входном текстовом файле достигнут конец строки.
File Size – определяет длину файла, не для текстовых файлов.
FileРоs возвращает значение longint, содержащий порядковый номер компонента файлов, который будет обрабатывать операцию ввода – вывода. Не для текстовых файлов.
IORESULT – проверяет результат выполнения последней операции на наличие ошибок.
Организация файла:
1. Объявить файловую переменную
2. Имя файла связать с файловой переменной
3. Открыть файл для записи
4. Записать данные в файл
5. Закрыть файл
Пример описания файлов:
Type text80=file of string [80];
Var f1:file of integer;(типиз-ный)
f2: text;(текс-ый)
f3: file;(нетипиз-ый)
f4: text80;(типиз-ый)
Пример применения файлов:
var f:text;
m:array[1..100] of integer;
i,k:integer;
begin k:=0;
assign (f,'xxx.txt'); reset(f); i:=1;
while not eof(f)do
begin
readln(f,m[i]);
if m[i]<>0 then k:=k+1;
inc(i);
end;
writeln (k);
close (f);
end.