Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratorny_praktikum_k_izdaniyu.doc
Скачиваний:
43
Добавлен:
17.03.2015
Размер:
522.75 Кб
Скачать

Лабораторная работа № 6 Использование файлов в Паскале

1.Цель работы:

Использование файлов, данных типа файл, выполнение операции над файлами, создание и дополнение файлов записей, выборка информации из файла по критерию в программах на языке Паскаль.

2.Краткая теория:

Файловый тип ( тип файл или файл) – это структурированный тип данных, который состоит из бесконечного (заранее неизвестного) количества элементов одного и того же типа. Элементы файла называются компонентами. Файловые типы Паскаля необходимы для того, чтобы получить возможность программного доступа к дисковым файлам. Дисковые файлы – это наборы данных на внешнем носителе.

Классификация файловых типов представлена рис.12.

Рис 12. Классификация файловых типов

Способы объявления файловых типов.

Общий вид объявления файлового типа

TYPE <тип файл> = FILE [ OF <тип компонент>];

  1. для текстовых файлов:

TYPE <тип файл> = TEXT;

  1. для файлов записей:

TYPE <тип файл> = FILE OF <тип запись>;

  1. для нетипизированных файлов:

TYPE <тип файл> = FILE;

Для того, чтобы использовать в программе файловые типы данных, необходимо объявить переменные файлового типа одним из следующих способов:

Способы объявления переменной файлового типа

1 Способ:

TYPE <тип файл> = FILE [ OF <тип компонент>];

VAR <программный файл> : <тип файл>;

2 Способ:

VAR <програм. файл> : FILE [ OF <тип компонент>];

Переменные файлового типа называют программными файлами. Файлы имеют начальную метку и конечную метку (рис.13).

С каждым программным файлом связан указатель файла или текущий указатель.

Указатель файла это специальная переменная, которая хранит адрес доступной в настоящий момент компоненты файла. После выполнения операции открытия файла указатель всегда указывает на начало первой компоненты файла. Значение указателя файла изменяется в результате выполнения операций чтения файла или записи информации в файл. Если выполнена одна операция чтения или записи, то указатель файла перемещается к началу следующей компоненты.

Рис.13.Файл и текущий указатель файла

Операции для работы с файлами

  1. Каждый программный файл должен быть связан с соответствующим дисковым файлом. Такая связь организуется специальной операцией связывания:

ASSIGN(<програм. файл>, ‘полное имя файла на диске’);

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

    • для создаваемого файла:

REWRITE (<программный файл>);

    • для существующего файла:

RESET (<программный файл>);

3. Операции обмена информацией между операционной памятью и программными файлами:

    • ввод информации из файла в ОП:

READ(<программный файл>, <переменная>);

    • вывод информации:

WRITE(<программный файл>,<переменная>);

Операции обмена информацией с файлом организуют так называемый последовательный доступ к компонентам файла. Этот принцип аналогичен поиску информации на магнитной ленте магнитофона.

4. Прямой доступ к компоненте файла, позволяет установить указатель файла непосредственно на начало нужной компоненты. В Паскале прямой доступ возможен только по номеру компоненты. В этом случае нужно помнить о том что номер компоненты не всегда известен программисту и пользователю.

SEEK(<программный файл>, № компоненты);

5. Закрытие файла :

CLOSE(<программный файл>);

Если файл не закрыт и по какой-то причине программа завершилась аварийно, то все изменения внесенные в файл будут утеряны. Поэтому рекомендуется закрывать файл по завершении работы с ним.

6. Некоторые дополнительные операции над файлами могут очень полезны:

- определяет закончился ли файл:

EOF(<программный файл>)

- определяет размер файла в компонентах:

FILESIZE(<программный файл>)

  • определяет номер текущей компоненты:

FILE POS(<программный файл>)

Последовательность работы с файлами записей:

При использовании файлов записей – файлов компонентами, которых являются записи (данные комбинированного типа) нужно придерживаться следующей последовательности написания программы:

  1. Объявить тип запись.

  2. Объявить программный файл, компоненты которого имеют тип запись.

  3. Объявить переменную, того же типа что и компонента файла, для обмена информацией между ОП и программными файлами.

  4. Открыть файл существующий или создаваемый.

  5. Для обмена информации использовать операторы ввода или вывода.

  6. Выполнить закрытие файла.

Особенности работы с текстовыми файлами

Текстовые файлы – это файлы компонентами которых являются символьные строки. Среди текстовых файлов следует выделить стандартные текстовые файлы. Существуют особенности обработки текстовых файлов:

  1. Стандартные текстовые файлы:

INPUT – стандартный файл ввода;

OUTPUTстандартный файл вывода.

2. Стандартные файлы можно связать с дисковым файлом:

ASSIGN(OUTPUT, ‘дисковый файл‘);

3. Открытие текстового файла:

- для чтения : RESET(<программный файл>);

- для создания : REWRITE(<программный файл>);

  • для дополнения : APPEND(<программный файл>);

4. Обмен информацией с текстовым файлом:

- чтение : READLN (<программный файл>, переменная);

- запись : WRITEL] (<программный файл>, переменная);

где <переменная> должна быть объявлена как строка символов.

Работа с файлами без типа

- чтение блока данных:

BLOCKREAD(<программный файл>, переменная, n[, m]);

- запись блока данных:

BLOCKWRITE(<программный файл>, переменная n[, m]);

где переменная - переменная любого типа

n - размер блока,

m – необязательный параметр, определяющий размер блока в записях.

При чтении блока данных формируется значение m .

Пример 1: Разработать программу для создания файла записей, если структура файла должна быть следующей:

  • табельный номер

  • должность

  • зарплата

  • месяц

Type tip_f=record

tn: byte;

dol: string[30];

zar: real;

mes: byte;

end;

Var z: tip_f;

Otv:char;

F:file of tip_z;

Begin

Assign(f, ‘a:\dat.dat’);

Rewrite(f);

Repeat

With z do

Begin

Write(‘введите табельный номер’);Readln(tn);

Write(‘должность’); readln(dol);

Write(‘зарплата’); readln(zar);

Write(‘месяц’); readln(mes);

End;

Write(f,z);

Writeln(‘продолжить ввод данных (д/н)’); readln(otv);

Until otv=’н’;

Close(f);

End.

Пример 2: Разработать программу для дополнения файла записями, если структура файла та же, что и в примере 1.

Type tip_f=record

tn: byte;

dol: string[30];

zar: real;

mes: byte;

end;

Var z: tip_f;

Otv:char;

F:file of tip_z;

Begin

Assign(f, ‘a:\dat.dat’);

Reset(f);

Seek(f, filesize(f));

Repeat

With z do

Begin

Write(‘введите табельный номер’);Readln(tn);

Write(‘должность’); readln(dol);

Write(‘зарплата’); readln(zar);

Write(‘месяц’); readln(mes);

End;

Write(f,z);

Writeln(‘продолжить ввод данных (д/н)’); readln(otv);

Until otv=’н’;

Close(f);

End.

Пример 3: Разработать программу для выборки информации из файла записями по табельному номеру, если структура файла та же, что и в примере 1.

Type tip_f=record

tn: byte;

dol: string[15];

zar: real;

mes: byte;

end;

Var z: tip_f;

Otv:char;

tn1:byte;

F:file of tip_z;

I, N:byte;

Begin

Assign(f, ‘a:\dat.dat’);

Reset(f);

Writeln(‘введите образец табельного номера’);

Readln(tn1);

Writeln(‘ВЕДОМОСТЬ’);

Writeln(‘начисления заработной платы по табельному номеру - ’, tn1);

Writeln(‘--------------------------------------------------’);

Writeln(‘I п/п I должность I месяц I зарплата I’ );

Writeln(‘--------------------------------------------------’);

N:=0;

For i:=1 to filesize(f) do

Begin

Read(f,z);

If z.tn=tn1 then

Begin

N:=N+1;

With z do Writeln (‘I’, n:4, ’I’, dol:15, ‘I’, mes:5, ’I’,

zar:10:2, ‘I’);

End;

End;

Close(f);

End.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]