Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Процедуры и функции, которые применимы для всех категорий файлов

Поиск

Процедуры

Read(F, Х1,Х2,...,ХN) — считывает в переменную X1 один элемент файла F (или несколько элементов в переменные X1,..., ХN), начиная чтение с элемента, на котором установлен указатель.

Write(F, Xl, X2,...,XN) — записывает одно (X1) или более (X1,.... ХN) значений переменных в файл F, начиная с той позиции, на которую установлен указатель.

Close(F) — закрывает файл F.

Erase(F) — удаляет внешний файл, связанный с файло­вой переменной F.

Rename(F, NewName) — присваивает внешнему файлу, связанному с файловой переменной F, новое имя NewName.

Функции.

Eof(F) – конец файла - принимает значение True, если указатель находится за последней компонентой файла, и False - противном случае.

IOResult – возвращает условный признак последней операции ввода-вывода. Если операция завершилась успешно, функция возвращает ноль. В противном случае она возвращает код ошибки ввода-вывода. Следует помнить, что функция IOResult становится доступной при отключенном автоконтроле ошибок ввода-вывода. Директива компилятора {$I-} отключает, а директива {$I+} включает автоконтроль.

 

Процедуры и функции для типизированных файлов

 

Процедуры

Seek(F, N) – смещает указатель файла к компоненту с номером N. При этом первый компонент файла имеет номер N = 0, второй – N = 1 и т.д.

Truncate(F) – удаляет часть файла, начиная с текущего компонента и до конца файла.

Функции.

FilePos(F) – возвращает порядковый номер компонента файла, на котором стоит указатель файла.

FiIeSize(F) – возвращает значение, которое содержит размер (число компонент) файла.

 

Работа с файлами

Работа с разными категориями файлов несколько отличается друг от друга, но общие требования к работе со всеми категориями файлов одинаковы:

- файл должен быть открыт для работы с ним;

- файл должен быть создан и записан на внешний но­ситель (запись файла);

- файл может быть считан с внешнего носителя в опе­ративную память (чтение файла) и обработан;

- обработанный файл может быть снова записан на внешний носитель;

- файл должен быть закрыт по окончании работы с ним.

 

Рассмотрим пять основных операций с внешними файлами:

1) запись в файл;

2) чтение файла;

3) добавление данных к файлу;

4) запись и чтение файла;

5) прямая выборка элементов файла.

 

Запись в файл

 

Под записью в файл понимается вывод результатов программы из оперативной памяти ЭВМ на диск, т.е. создание нового файла на внешнем устройстве. Внешний файл, в который записываются данные из программы, называют выходным.

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

1) описать файловую переменную;

2) связать ее с выходным файлом (Assign);

3) открыть файл для записи (Rewrite);

4) вывести данные из программы в файл (Write);

5) закрыть файл для записи (Close);

Общая форма записи в файл имеет следующий вид:

Rewrite(F);

..........

Write(F,Al,A2,...,An);

..........

Close(F);

Здесь F — имя файла; Al, A2,..., An — выражения (в том чис­ле константы и переменные) того же типа, что и элементы файла.

Процедура Rewrite осуществляет подготовку к записи информации в файл F (очищает файл и устанавливает указатель в начало файла). Оператор Write записывает значения выражений Al, A2,.... An по одному в конец файла F (после имеющейся в нем информации).

Пример 3.1. Создать файл данных с именем D:\APPDOS\FP1.DAT, содержащий фамилии студентов и год их рождения.

Решение.

Возможный вариант программы:

Program Prim31;

Type

Stud = Record

Fio: String;

Year: Integer;

End;

Var

F: File of Stud;

St: Stud;

C: Char;

Begin

Assign(F, 'D:\APPDOS\FP1.DAT');

Rewrite(F);

C:='Д';

While (C='Д') OR (C ='д') Do

Begin

{Ввод с клавиатуры двух полей записи}

Write('Введите фамилию ');

Readln(St.Fio);

Write('Введите год ');

Readln(St.Year);

{Запись в файл. Элементом файла является вся запись}

Write(F, St);

Writeln('Продолжим ввод?(д/н)');

Readln(C);

End;

Close(F);

End.

 

 

Чтение файла

 

Под чтением файла понимается ввод данных из внешнего файла, находящегося на диске, в оперативную память ПЭВМ.

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

1) описать файловую переменную;

2) связать ее с внешним файлом (Assign);

3) открыть файл для чтения (Reset);

4) ввести данные файла в программу (Read);

5) закрыть файл для чтения (Close).

Общая структура фрагмента программы, составленной для чтения файла, имеет вид:

Reset(F);

........

Read(F,Xl.X2,...,XN);

........

Close(F);

Тип переменных X1, Х2,..., XN должен соответствовать базовому типу элементов файла (это условие необязательно для текстовых файлов).

Процедура Reset осуществляет подготовку к чтению из файла F (открывает файл и устанавливает указатель на первый элемент фай­ла).

Оператор Read последовательно присваивает переменным X1, Х2,..., XN значения из файла F. Количество этих переменных не должно превышать количества данных, которые могут быть введены из файла. В противном случае выполнение программы прекращается. Вместо Read (F,X1,X2,...,ХN) можно использовать несколько операторов Read:

Read(F, Xl); Read(F, X2);...; Read(F, XN);

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

Процедура Close выполняет закрытие файла F.

Пример 3.2. Из созданного программой Prim31 файла c именем D:\APPDOS\FP1.DAT вывести на экран информацию о студентах, родившихся в 1985 г.. Полученные данные записать (для отчета) в файл с именем D:\APPDOS\FP2.DAT.

Решение.

Возможный вариант программы:

Program Prim32;

Type

Stud = Record

Fio: String;

Year: Integer;

End;

Var

St: Stud;

F1, F2: File of Stud;

Begin

Assign(F1, 'D:\APPDOS\FP1.DAT');

Assign(F2, 'D:\APPDOS\FP2.DAT');

Reset(F1);

Rewrite(F2);

Writeln('Список студентов, родившихся в 1985 году');

{ Пока не достигнут конец файла F1, осуществляется считывание из него данных, их обработка и запись в новый файл}

While Not EOF(F1) Do

Begin

{Чтение записи из файла}

Read(F1, St);

If St.Year = 1985 Then

Begin

{Вывод записи на экран}

Writeln(St.Fio, St.Year:6);

{Вывод записи в файл}

Write(F2, St);

End;

End;

Close(F1);

Close(F2);

End.

Заметим, что в этом примере мы используем файл D:\APPDOS\FP1.DAT, пребывая в полной уверенности, что такой файл на диске существует. Действительно, в предыдущем примере мы создали такой файл. Однако если делается попытка инициировать чтение несуществующего файла, возникает ошибка периода исполнения, которая может быть сообщена программе ненулевым значением функции IOResult. Поэтому более правильно было бы убедиться в наличии файла на диске прежде, чем начать работу с файлом в новой программе. Ниже приводится вариант программы, в которой устанавливается существование требуемого файла на диске:

Program Prim32а;

Label 10;

Type

Stud = Record

Fio: String;

Year: Integer;

End;

Var

St: Stud;

F1, F2: File of Stud;

Begin

Assign(F1, 'D:\APPDOS\FP1.DAT');

{$I-}

Reset(F1);

{$I+}

If IOResult <> 0 Then

Begin

Writeln(‘Файл не существует’);

GoTo 10

End

Else

Begin

Assign(F2, 'D:\APPDOS\FP2.DAT');

Rewrite(F2);

Writeln('Список студентов, родившихся в 1985 году');

{ Пока не достигнут конец файла F1, осуществляется считывание из него данных, их обработка и запись в новый файл}

While Not EOF(F1) Do

Begin

{Чтение записи из файла}

Read(F1, St);

If St.Year = 1970 Then

Begin

{Вывод записи на экран}

Writeln(St.Fio, St.Year:6);

{Вывод записи в файл}

Write(F2, St);

End;

End;

Close(F1);

Close(F2);

10: End;

End.

Пример 3.3. Составить программу для вычисления среднего арифметического положительных значений элементов файла с именем File1.Dat.

Решение.

В данной программе для чтения файла используется оператор цикла с постусловием Repeat.

Программа

Program Prim33;

Var

F: File of Real;

S, X: Real;

N: Integer;

Begin

Assign(F, ‘File1.Dat’);

Reset(F);

N:=0;

S:=0;

Repeat

Read(F, X);

If X > 0 Then

Begin

S:= S + X;

N:= N + 1;

End;

Until Eof(F);

S:= S / N;

Writeln(‘Среднее арифметическое = ‘, S);

End.

Мы рассмотрели два основных действия над последовательными файлами:их чтение и запись. Все остальные действия представляют собой сочетание записи и чтения файла.

 

Добавление данных к файлу

 

В Турбо Паскале разрешается обращаться к типизированному файлу, открытом процедурой Reset (т.е. для чтения информации), с помощью процедуры Write (т.е. для записи информации).

Пусть необходимо к уже существующему типизированному файлу добавить ряд эле­ментов. Для этого надо выполнить следующие действия:

1) открыть уже существующий файл F процедурой Reset;

2) установить указатель файла за последним его компонентом процедурой Seek следующим образом:

Seek(F,FileSize(F));

3) записать дополнительные данные (Write);

4) закрыть файл (Close).

 

Пример 3.4. Пусть уже создан файл F, состоящий из целых чисел 1, 2, 3, 4, 5. Необходимо добавить к этому файлу числа 10, 20, 30.

Решение.

Возможный вариант программы:

Program Рrim34;

Var

F: File of Integer;

I,X: Integer;

Begin

Assign(F, 'F');

Reset(F);

Seek(F, FileSize(F));

For I:=1 to 3 do

Begin

X:=10*I;

Write(F, I)

End;

Close(F);

End.

В результате выполнения программы получим файл F, состоящий из чисел 1, 2, 3, 4, 5, 10, 20, 30.

 



Поделиться:


Последнее изменение этой страницы: 2016-12-17; просмотров: 231; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.234.50 (0.008 с.)