ТЕМА: ОРГАНИЗАЦИЯ ПРОГРАММ С ИСПОЛЬЗОВАНИЕ ТИПИЗИРОВАННЫХ И НЕТИПИЗИРОВАННЫХ ФАЙЛОВ
Цель работы: научиться описывать в программе типизированные файлы, обрабатывать типизированные и нетипизированные файлы.
Оборудование: ПК, ИСР Pascal ABC
ТЕОРЕТИЧЕСКИЕ ДАННЫЕ
Типизированные файлы
Длина любого компонента типизированного файла строго постоянна, что дает возможность организовать прямой доступ к каждому из них (т.е. доступ к компоненту по его порядковому номеру).
Перед первым обращением к процедурам ввода-вывода указатель файла стоит в его начале и указывает на первый компонент с номером 0. После каждого чтения или записи указатель сдвигается к следующему компоненту файла. Переменные в списках ввода-вывода должны иметь тот же тип, что и компоненты файла. Если этих переменных в списке несколько, указатель будет смещаться после каждой операции обмена данными между переменными и дисковым файлом.
Процедура READ
Обеспечивает чтение очередных компонентов типизированного файла. Формат обращения: READ (<ф.п.>,<сп.ввода>)
Здесь <cn.вводa> - список ввода, содержащий одну или более переменных такого же типа, что и компоненты файла.
Файловая переменная <ф.п.> должна быть объявлена предложением FILE OF... и связана с именем файла процедурой ASSIGN. Файл необходимо открыть процедурой RESET. Если файл исчерпан, обращение к READ вызовет ошибку ввода-вывода.
Процедура WRITE
Используется для записи данных в типизированный файл. Формат обращения: WRITE (<ф.п.>,<сп.вывода>)
Здесь <сп.вывода> - список вывода, содержащий одно или более выражений того же типа, что и компоненты файла.
Процедура SEEK
Смещает указатель файла к требуемому компоненту. Формат обращения: SEEK (<ф.п.>,<N компонента>)
Здесь <N компонента> - выражение типа LONGINT, указывающее номер компонента файла. Первый компонент файла имеет номер 0. Процедуру нельзя применять к текстовым файлам.
Функция FILEPOS
Возвращает значение типа LONGINT, содержащее порядковый номер компонента файла, который будет обрабатываться следующей операцией ввода-вывода.
Формат обращения: FILEPOS (<ф.п.>)
Функцию нельзя использовать для текстовых файлов. Первый компонент файла имеет порядковый номер 0.
2. Нетипизированные файлы
Нетипизированные файлы объявляются как файловые переменные типа FILE и отличаются тем, что для них не указан тип компонентов. Отсутствие типа делает эти файлы, с одной стороны, совместимыми с любыми другими файлами, а с другой - позволяет организовать высокоскоростной обмен данными между диском и памятью.
Чтение файла осуществляется с помощью стандартной процедуры RESET:
RESET (<ф.п.>);
Здесь <ф.п.> - файловая переменная, связанная ранее процедурой ASSIGN с уже существующим файлом
При выполнении этой процедуры дисковый файл подготавливается к чтению информации. В результате специальная переменная-указатель, связанная с этим файлом, будет указывать на начало файла, т.е. на компонент с порядковым номером 0.
Стандартная процедура REWRITE (<ф.п.>).
инициирует запись информации в файл, связанный ранее с файловой переменной <ф.п.>. Процедурой REWRITE нельзя инициировать запись информации в ранее существовавший дисковый файл: при выполнении этой процедуры старый файл уничтожается и никаких сообщений об этом в программу не передается. Новый файл подготавливается к приему информации и его указатель принимает значение 0.
При инициации нетипизированного файла процедурами RESET или REWRITE можно указать длину записи нетипизированного файла в байтах.
Например, так:
var
f: file; begin
.......
assign(f, 'myfile.dat') reset(f,512);
.......
end.
Длина записи нетипизированного файла указывается вторым параметром при обращении к процедурам RESET или REWRITE, в качестве которого может использоваться выражение типа WORD. Если длина записи не указана, она принимается равной 128 байтам.
При работе с нетипизированными файлами могут применяться все процедуры и функции, доступные типизированным файлам, за исключением READ и WRITE
Работа с файлам записей
Пример1. Сформировать файл Fm.dat, содержащий экзаменационную ведомость одной студенческой группы. Записи файла состоят из следующих полей: фамилия, имя, отчество, номер зачетной книжки, оценка.
Program examen; Uses crt;
Type stud=record fio:string[30]; Nz:string[6]; mark:integer end;
Var Fstud:file of stud;
S:stud;
N,I:byte; Begin clrscr;
Assign(Fstud, 'Fm.dat'); Write('kolvo studentov'); Readln(n);
For I:=1 To n do Begin
Write('vvedite fio:'); readln(s.fio); Write('vvedite nomer zachetki:'); readln(s.Nz); Write('vvedite ocenka:'); readln(s.mark); Write(Fstud,s)
end;
Writeln('Formirovanie zaversheno'); Close(Fstud)
End.
Прямой доступ к записям файла
В стандарте языка Паскаль допустим только последовательный доступ к элементам файла. Одной из дополнительных возможностей, реализованный в Паскале, является прямой доступ к записям файла
Задав номер элемента файла, можно непосредственно установить указатель на него. После этого можно читать или перезаписывать данный элемент. Установка указателя на нужный элемент файла производится процедурой:
Процедура SEEK
Смещает указатель файла к требуемому компоненту. Формат обращения: SEEK (<ф.п.>,<N компонента>)
Здесь <N компонента> - выражение типа LONGINT, указывающее номер компонента файла. Первый компонент файла имеет номер 0. Процедуру нельзя применять к текстовым файлам.
ЗАДАНИЕ
1. Записать в файл последовательного доступа N действительных чисел. Вычислить произведение компонентов файла.
2. В типизированном файле, компонентами которого являются целые числа, подсчитать количество отрицательных чисел.
3. В типизированном файле, компонентами которого являются вещественные числа, вычислить произведение положительных чисел.
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.