Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
Топ:
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Интересное:
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Дисциплины:
2020-05-07 | 111 |
5.00
из
|
Заказать работу |
|
|
Напомним, что программа ориентирована на обработку логического файла. Язык программирования высокого уровня имеет все процедуры СУФ, связанные с действиями на физическом уровне в ответ на логические файловые операции. Алгоритмы этих системных процедур скрыты от пользователя, его задача – правильно к ним обратиться.
В языке Турбо Паскаль имеется три типа файлов: текстовые, типизированные (компонентные), бестиповые.
Мы рассматриваем компонентные файлы как наиболее чётко представляющие классическую организацию для последовательных файлов.
ОБЪЯВЛЕНИЕ ФАЙЛОВОЙ ПЕРЕМЕННОЙ
Файловая переменная задаёт имя логического файла. Как и любое имя в Турбо Паскаль-программе, имя файла начинается с буквенного символа и содержит не более восьми буквенно-цифровых символов. Имя дискового файла указывается, прежде всего, в заголовке программы, например:
Program LES (FL1);
…………………….
FL1 – имя файла. СУФ получает сообщение о внешнем по отношению к программе объекте – файла на диске.
Так де, как любая переменная Турбо Паскаль-программы, файловая переменная должна быть объявлена в разделе VAR. Предварительно может быть объявлен файловый тип в разделе типов. Объявление выполняется с помощью ключевых слов FIL OF. Например:
TYPE F=File of <тип компоненты>:
Тип компоненты – любой тип оперативных структур данных. Тогда файл FL1 объявляется так:
VAR FL1: F;
Возможно объявление файловой переменной сразу в разделе VAR, например:
VAR FL1: File of <тип компоненты>;
<Тип компоненты> называют базовым типом. Если базовый тип – ординальный или любой вещественный тип, структура логической компоненты однородна (неделима). В качестве базового типа можем использовать и любую неоднородную оперативную структуру данных, тогда структура логической компоненты более сложная. Например:
|
Program LES(F1,А2,А3); { обработка трёх файлов }
TYPE R=RECORD
P1: string[15];
P2: integer
end;
AR=array[1..10] of real;
VAR F1: file of R; {файл из компонент «запись»}
F2: file of AR; {каждая логическая компонента}
{файла-вектор из 10 вещ. чисел}
F3: file of char; {компонентой файла является}
{ один символ }
………………..
ПРОЦЕДУРЫ ОТКРЫТИЯ И ЗАКРЫТИЯ ФАЙЛА
Назначение этих процедур описано в п. 1.5.Файл может быть открыт для формирования и обработки, если СУФ получила сообщение о точном местоположении файла на диске. Для этого вызывается специальная процедура СУФ, связывающая логический и физический файлы:
ASSIGN (<имя файловой переменной>, <строка>);
<Строка> может быть задана строковой константой или переменной строкового типа, определённой к моменту вызова процедуры. Например:
Program LES (F);
VAR F: file of real;
…………………..
begin {LES}
ASSIGN (F, ‘E:\GSM\FF.DAT’);
………….
После выполнения процедуры ASSIGN логический и физический файлы для СУФ становятся как бы едины: переменная F будет управлять определённым местом на диске, поименованным меткой, заданной строковой константой.
После выполнения «связывания» файл может быть открыт для формирования (записи компонент в файл) либо для обработки (чтения компонент из файла или модификации файла).
Открытие файла для записи выполняется вызовом процедуры:
REWRITE (<имя файловой переменной>);
При этом указатель текущей компоненты файла автоматически устанавливается на несуществующую пока нулевую компоненту. Нельзя открывать для записи ранее созданный файл: он автоматически стирается!
Открытие файла для чтения выполняется вызовом процедуры:
RESET (<имя файловой переменной>);
Нельзя открывать для чтения несформированный файл – это аварийная для программы ситуация!
|
Закрытие файла выполняется вызовом процедуры:
CLOSE (< имя файловой переменной>);
ФОРМИРОВАНИЕ ФАЙЛА
Формирование файла связано с алгоритмом создания логической компоненты файла и записью (перемещением) этой информации на диск.
Очевидно, что в программе должна быть объявлена некоторая переменная оперативной памяти, тип которой идентичен (совпадает) с типом файловой компоненты. В соответствии с постановкой задачи в программе определяется значение этой переменной. Для перемещения информации в файл используется знакомая нам операция
WRITE (<имя файл. перем.>, <имя логич. комп.>);
Напоминаем, что файл должен быть предварительно открыт для записи.
Например, если компоненты файла – целые числа, то объявим логическую компоненту как переменную целого типа:
Program LES(h);
Var
h: file of integer;
a: integer; { логическая компонента }
……………
begin {LES}
assign(h,’E:\CTL\hd.dat’);
rewrite(h);
a:=5;
write(h,a); {запись компоненты в файл}
……………
Так как все компоненты файла имеют одинаковый тип, очевидно, что формирование файла необходимо вести в цикле. Но логический файл не имеет конечной длины. Как правило, наиболее общим алгоритмом формирования файла является цикл-пока. Условием окончания цикла является задание некоторого значения-сигнала. Это значение не записывается в файл и никогда в файле не встречается. Оно задаётся константой того же типа, что и тип компоненты.
Структура алгоритма создания файла показана рис.4. S – некоторое сигнальное значение.
Например, необходимо записать в файл информацию о студентах по следующим спецификациям:
фамилия, номер зачётной книжки, номер группы. Студенты не «рассортированы» по группам. Соответствующая программа приведена на рис.5.
Program STD(h);
TYPE SR=RECORD { структура }
name : string[30]; { логической }
numbz : integer; { компоненты }
numbG : integer
end;
VAR h: file of SR;
a: SR; { логич. компонента }
begin
assign(h,’E:TL\h1.dat’);
rewrite(h);
writeln(‘введите номер группы очередного студента’);
writeln(‘0 – признак окончания ввода’);
{4} readln(a.numbG);
{формирование файла в цикле - пока управляющее поле a. numbG не получит значение 0}
while a.numbG<>0 do
begin
writeln(‘Фамилия?’);
|
{1} readln(a.name);
writeln(‘Номер зачётки?’);
{2} readln(a.nambz);
{3} writeln(h,a); {запись комп. в файл}
writeln(‘введите номер группы очередного студента’);
{4} readln(a.numbG);
end; {while}
writeln(‘Запись файла окончена’);
close(h)
{5} end.
Рис.5
В этой программе роль сигнальной переменной играет константа целого типа нуль, записанная в условие проверки при входе в цикл while. Такое значение выбрано из соображения, что, как правило, не бывает номера группы нуль.
В строках 1, 2, 4 набираются значения полей структурированной логической компоненты a. Тип её объявлен одинаковым с типом компоненты файла h. Как только значение номера группы введётся нулевым, цикл формирования файла заканчивается. Процедура закрытия файла в конце формирования создаёт метку конца файла на диске.
ЧТЕНИЕ И МОДИФИКАЦИЯ ФАЙЛА
Файл читается, прежде всего, для проверки созданной информации, а также для алгоритмической обработки в соответствии с условием задачи. Чтение возможно только для сформированного файла!
После чтения последней компоненты указатель текущей записи переместится на метку конца файла. Попытка читать файл в таком состоянии приведёт к аварии в программе. Для слежения за ситуацией «наступил конец файла» СУФ имеет логическую функцию
EOF(<имя файлов. перем.>).
Значение этой функции есть FALSE, если указатель стоит на любой существующей компоненте файла, и TRUE, если указатель переместился на метку конца файла.
Чтение очередной компоненты файла выполняется с помощью обращения к процедуре
READ (<имя файл. перем.>,<имя логич. комп.>)
Второй параметр процедуры чтения имеет тот же смысл, что и п.2.3.
Наиболее общий алгоритм чтения и обработки информации из файла изображён на рис.6. Это алгоритм последовательного доступа.
Шаг «обработать компоненту» может быть алгоритмически простым (например, печать компоненты), а может представляться сложным алгоритмом в соответствии с условием задачи.
|
В качестве примера продолжим программу на рис.5 фрагментом программы распечатки созданного файла. Для этого строку {5} отодвинем в конец модифицированной программы. Продолжение программы приведено на рис.7.
……………
close(h); {файл после формирования был закрыт}
reset(h); {открыть файл для чтения}
while not EOF(h) do
begin
read(h,a); {читать с диска в оперативную память}
write(a.numbG:5,a.name:30, a.numbz:4);
writeln
end;
close(h)
end.
Рис.7
|
|
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!