Способы объявления файловых типов.
Общий вид объявления файлового типа
TYPE <тип файл> = FILE [OF <тип компонент>] ;
для текстовых файлов:
TYPE <тип файл> = TEXT;
для файлов записей:
TYPE <тип файл> = FILE OF <тип запись>;
для нетипизированных файлов:
TYPE <тип файл> = FILE;
Для того, чтобы использовать в программе файловые типы данных, необходимо объявить переменные файлового типа одним из следующих способов:
Способы объявления переменной файлового типа
1 способ:
TYPE <тип файл> = FILE [OF <тип компонент>] ;
VAR <программный файл>: <тип файл>;
2 способ:
VAR <програм. файл>: FILE [OF <тип компонент>] ;
Переменные файлового типа называют программными файлами. Файлы имеют начальную метку и конечную метку.
С каждым программным файлом связан указатель файла или текущий указатель.
Указатель файла это специальная переменная, которая хранит адрес доступной в настоящий момент компоненты файла. После выполнения операции открытия файла указатель всегда указывает на начало первой компоненты файла. Значение указателя файла изменяется в результате выполнения операций чтения файла или записи информации в файл. Если выполнена одна операция чтения или записи, то указатель файла перемещается к началу следующей компоненты.
Рис. Файл и текущий указатель файла
Операции для работы с файлами
Каждый программный файл должен быть связан с соответствующим дисковым файлом. Такая связь организуется специальной операцией связывания:
ASSIGN (<програм. файл>, ‘полное имя файла на диске’);
2. Операции открытия программного файла необходима для начала работы с файлом и определения начального значения указателя файла. создаваемый и существующий файл открываются разными операциями:
для создаваемого файла:
REWRITE (<программный файл>);
для существующего файла:
RESET (<программный файл>);
3. Операции обмена информацией между операционной памятью и программными файлами:
ввод информации из файла в ОП:
READ (<программный файл>, <переменная>);
вывод информации:
WRITE (<программный файл>,<переменная>);
Операции обмена информацией с файлом организуют так называемый последовательный доступ к компонентам файла. Этот принцип аналогичен поиску информации на магнитной ленте магнитофона.
4. Прямой доступ к компоненте файла, позволяет установить указатель файла непосредственно на начало нужной компоненты. В Паскале прямой доступ возможен только по номеру компоненты. В этом случае нужно помнить о том что номер компоненты не всегда известен программисту и пользователю.
SEEK (<программный файл>, № компоненты);
5. Закрытие файла:
CLOSE (<программный файл>);
Если файл не закрыт и по какой-то причине программа завершилась аварийно, то все изменения внесенные в файл будут утеряны. Поэтому рекомендуется закрывать файл по завершении работы с ним.
6. Некоторые дополнительные операции над файлами могут очень полезны:
определяет закончился ли файл:
EOF (<программный файл>)
определяет размер файла в компонентах:
FILESIZE (<программный файл>)
определяет номер текущей компоненты:
FILE POS (<программный файл>)
Последовательность работы с файлами записей:
При использовании файлов записей - файлов компонентами, которых являются записи (данные комбинированного типа) нужно придерживаться следующей последовательности написания программы:
Объявить тип запись.
Объявить программный файл, компоненты которого имеют тип запись.
Объявить переменную, того же типа что и компонента файла, для обмена информацией между ОП и программными файлами.
Открыть файл существующий или создаваемый.
Для обмена информации использовать операторы ввода или вывода.
Выполнить закрытие файла.
Особенности работы с текстовыми файлами
Текстовые файлы - это файлы компонентами которых являются символьные строки. Среди текстовых файлов следует выделить стандартные текстовые файлы. Существуют особенности обработки текстовых файлов:
Стандартные текстовые файлы:
INPUT - стандартный файл ввода;
OUTPUT - стандартный файл вывода.
2. Стандартные файлы можно связать с дисковым файлом:
ASSIGN (OUTPUT, ‘дисковый файл‘);
3. Открытие текстового файла:
для чтения: RESET (<программный файл>);
для создания: REWRITE (<программный файл>);
для дополнения: APPEND (<программный файл>);
4. Обмен информацией с текстовым файлом:
чтение: READLN (<программный файл>, переменная);
запись: WRITEL] (<программный файл>, переменная);
где <переменная> должна быть объявлена как строка символов.
Работа с файлами без типа
чтение блока данных:
BLOCKREAD (<программный файл>, переменная, n [, m]);
запись блока данных:
BLOCKWRITE (<программный файл>, переменная n [, m]);
где переменная - переменная любого типа
n - размер блока,
m - необязательный параметр, определяющий размер блока в записях.
При чтении блока данных формируется значение m.
Составить алгоритм и программу создания файла записей. Составить алгоритм и программу дополнения файла записями. Составить алгоритм и программу поиска информации по критерию в файле записей.
Структура записи:
Фамилия, Имя, Отчество
Дата рождения
Город
Улица
Дом
Квартира
№ паспорта
2) Внести 5-10 записей
3) Изменение записей в справочнике
4) Дополнение записей в справочнике
5) Поиск по фамилии в справочнике
Входная информация - информация, известная до решения задачи, её необходимо запросить у пользователя и ввести в оперативную память с клавиатуры из файла.
Фамилия, Имя, Отчество
Дата рождения
Город
Улица
Дом
Квартира
№ паспорта
Теперь покажем, как описывается входная программа, так как в последствии мы увидим её в тексте программы.
Для упрощения пользования ввели отдельный тип переменной - запись, она включает в себя сведения о физическом лице.
Ниже находится таблица индификаторов, в ней описана запись и соответствующие поля, которые представлены в программе.
Название переменной | Тип переменной | Назначение |
RecBook | Запись (record) | для упрощения решения задачи |
Поля записи | ||
StFIO | string [20] | хранение ФИО физического лица |
StData | string [8] | хранение даты рождения |
StGorod | string [15] | хранение города, где проживает физическое лицо |
StUlica | string [16] | хранение улицы |
StDom | string [8] | хранение № дома |
StKvartira | string [10] | хранение № квартиры |
StNomer_Pasporta | string [15] | хранение № паспорта |
Выходная информация - искомый в задаче результат. Его нужно определить из входной информации и вывести пользователю на экран, печать или файл. Выходной информацией в курсовой работе являются файлы, хранящие записи с полями ФИО, дата рождения, город, улица, дом, квартира, № паспорта. Выходная информация будет заключаться в выходной информации по названию улицы. Ниже находится таблица, в которой описана выходная информация.
Название переменной | Тип переменной | Назначение |
BookFile | файл типа RecBook | хранение данных |
Промежуточная информация - промежуточные итоги решения задачи, без которых невозможно определить конечный результат.
В курсовой работе промежуточная информация служит для организации работы: для работы циклов, для считывания данных из файла и с клавиатуры.
Название переменной | Тип переменной | Назначение |
Work | RecBook | для доступа к полям записи |
VID | byte | для выбора вызова различных процедур |
End_Menu | boolean | для выхода из меню |
Name | string [12] | хранение имени файла |
Rez_Find | boolean | результат поиска |
NumRec | longint | локальная переменная принимает значение номера изменяемой записи |
Count | integer | количество записей |
Формализация задачи - это описание задачи формальными средствами (математическими, логическими). В данной работе математические средства не использовались.
Задача может выполнять следующие действия:
создания файла записей
просмотр списка справочника
изменение записи справочника
дополнение записи в справочник
поиск физического лица по названию улицы
Алгоритм - последовательность действий, необходимых для решения задачи.
Разработка алгоритмов и программ начинается с постановки задач. На этом этапе из условия задачи определяют входную, выходную и промежуточную информацию.
На первой стадии разработки программы были описаны все переменные и их типы.
Следующим шагом стала разработка блока (процедуры) ввода исходных данных. Ввод исходных данных включает в себя создание файла для хранения данных и его заполнения. Пользователю предлагается ввести ФИО, дату рождения, город, улицу, дом, квартиру, номер паспорта. Программа может выполнять следующие действия: