Обработка файла в Турбо Паскаль-программе — КиберПедия 

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Обработка файла в Турбо Паскаль-программе

2020-05-07 111
Обработка файла в Турбо Паскаль-программе 0.00 из 5.00 0 оценок
Заказать работу

Напомним, что программа ориентирована на обработку логического файла. Язык программирования высокого уровня имеет все процедуры СУФ, связанные с действиями на физическом уровне в ответ на логические файловые операции. Алгоритмы этих системных процедур скрыты от пользователя, его задача – правильно к ним обратиться.

В языке Турбо Паскаль имеется три типа файлов: текстовые, типизированные (компонентные), бестиповые.

Мы рассматриваем компонентные файлы как наиболее чётко представляющие классическую организацию для последовательных файлов.

 

ОБЪЯВЛЕНИЕ ФАЙЛОВОЙ ПЕРЕМЕННОЙ

Файловая переменная задаёт имя логического файла. Как и любое имя в Турбо Паскаль-программе, имя файла начинается с буквенного символа и содержит не более восьми буквенно-цифровых символов. Имя дискового файла указывается, прежде всего, в заголовке программы, например:

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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.025 с.