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



ЗНАЕТЕ ЛИ ВЫ?

Как создать внешний файл данных

Поиск

Внешний фай данных можно создать двумя способами:

1. Создать файл, например, с именем Dan1.pas в каком-либо текстовом редакторе и записать туда необходимую информацию.

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

2. Создать внешний файл данных можно и программно, т.е. в программе создать этот файл и программно же записать туда нужную информацию (данные.)

Запись файла

Под записью файла понимается:

- создание нового файла;

- вывод данных в результате работы программы из оперативной памяти во внешний файл (ОП → ВФ).

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

1. Открыть файл для записи с помощью процедуры Rewrite(Fv); где Fv – файловая переменная.

При этом текущий указатель файла (ТУ) устанавливается на начало файла. Если в файле до этого была информация, то она затирается, и указатель устанавливается на начало файла.

Схематично выполнение процедуры Rewrite можно представить так:

До процедуры Rewrite После процедуры Rewrite

ТУ ТУ

S1 S2 ……… Sn
МКФ
МКФ

2. Вывод данных во внешний файл производится с помощью процедуры Write.

Формат процедуры:

Write (<имя ФП>, <список вывода>);

Происходит запись во ВФ значений из < списка вывода>, после этого выставляются маркеры концов строк (МКС) и маркер конца файла (МКФ).

3. Закрыть файл для записи с помощью процедуры

Close (<имя ФП>).

Если случайно забыть процедуру Close, то во внешнем файле сформируется «чeпyxa».

 

Пример 8.1. Сформировать одномерный массив квадратов чисел от 1 до 10. Записать его во внешний файл с именем Dan1.pas в текущей папке (там же, где и программа).

 

Program Demo-VnF;

Var A: Array[1..10] of integer;

i: integer;

Fout: text; {файловая переменная}

Begin

Assign (Fout, ‘Dan1.pas’); {связь между ФП и ВФ}

ReWrite (Fout); {открыть файл для записи}

For i:=1 to 10 do

Begin

A[i]:=i*i;

Write (Fout, A[i]: 5); {запись во внешний файл}

End;

Close(Fout); {закрыть ВФ}

End.

В результатом работы программы будет создан файл Dan1.pas в текущей папке, содержащий следующий набор данных:

----1----4----9---16---25---36---49---64---81--100

Символ «-» означает пробел.

Пример 8.2. Сформировать двухмерный массив случайных чисел и записать его во внешний файл с именем Dan3.pas на дискетку.

Program D_Vn_F;

Var A: Array[1..10, 1..10] of real;

i, j:integer;

Fout: text; {файловая переменная}

Begin

Assign(Fout, 'А:\Dan3.pas'); {связь между ФП и ВФ }

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

Randomize; {несовпадение случайных чисел }

For i:=1 to 5 do

begin

For j:=1 to 7 do

begin

a[i, j]:=Random;

Write(fout,a[i,j]:8:2);

end;

Writeln(Fout); {перевод курсора на следующую строку}

end;

Close(Fout);

End.

Результатом работы программы будет текстовый файлDan3.pas, содержащий матрицу случайных чисел из 5 строк и 7 столбцов.

Таким образом, созданы внешние файлы Dan1.pas иDan3.pas. Эти файлы можно использовать в других программах, считывая данные из этих внешних файлов, а не вводя их с пульта. Эти файлы можно скопировать, переименовать, отредактировать в каком-либо текстовом редакторе.

Чтение внешнего файла

Чтение внешнего файла – это ввод данных из внешнего файла в оперативную память компьютера (ВФ → ОП).

Выше мы договорились, что рассматриваем файлы последовательного доступа, т.е. для чтения n -го элемента этого файла необходимо прочесть все первые n -1 элементов.

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

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

1. Открыть файл для чтения с помощью процедуры

ReSet (<имя ФП>).

При этом вся информация в файле сохраняется, а текущий указатель устанавливается на начало файла.

Схема выполнения процедуры ReSet:

До процедуры ReSet После процедуры ReSet

ТУ ТУ

S1 S2 Sn МКФ   S1 S2 Sn МКФ

 

2. Прочитать (ввести) данные из ВФ с помощью процедуры Read.

Форматпроцедуры: Read (Finp, x).

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

х -текущий указатель

S1 S2 S3 …….


3. Считанные данные обработать программно.

4. Закрыть файл с помощью процедуры Close (Finp);

 

Пример8.3. Прочитать 5 значений данных из созданного в примере 8.1 внешнего файла Dan1.pas (там их 10) и вывести их на экран.

 

Program D_Vn_F;

Var A: Array[1..10] of integer;

i:integer;

Finp:text; {файловая переменная}

 

Begin

Assign(Finp, 'Dan1.pas'); {связь между ФП и ВФ }

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

For i:=1 to 5 do

begin

Read(Finp,a[i]); {чтение из ВФ}

Write(a[i]:6);

end;

Close(Finp);

End.

В результате работы программы на экран будут выведены пять чисел: -----1-----4-----9----16----25

 

 

Функция EOF

Если заранее число элементов во внешнем файле неизвестно, то используется стандартная функция EOF (End Of File). Функция фиксирует положение текущего указателя файла на последнем элементе ВФ, т.е.

 

 

Схематично это выглядит так:

ТУ EOF=F ТУ EOF= T

S1 S2 ……… Sn МКФ

 

Пример 8.4. Считать все имеющиеся данные из ВФ Dan1.pas и вывести их на экран.

Программа аналогична программе примера 8.3. Запишем только фрагмент ее.

Assign(F, 'Dan1.pas');

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

While not EOF(F) do

begin

Read(F, s); {чтение из ВФ}

Write(s:6);

End;

Контрольные вопросы и задания

1. В каких случаях полезно использовать внешние файлы данных. Понятие текстового файла данных.

2. Зачем используется специальная файловая переменная? Как устанавливается соответствие файловой переменной внешнему файлу?

3. Что общего у процедур Reset и Rewrite, чем они отличаются?

4. Зачем применяется процедура Close и что может произойти при ее отсутствии?

5. Сформировать массив C[N] из элементов арифметической прогрессии для a 0=2, d =3 и записать его во внешний файл Dan.pas

6. Написать фрагмент программы, позволяющий считать массив А[N,M] из внешнего файла Dan.pas и найти произведение диагональных элементов.

7. Написать фрагмент программы, позволяющий считать массив C[N], N=10 из внешнего файла Dan.pas и найти минимальный элемент.

8. Сформировать вектор В[N], используя функцию Rendom, и записать его во внешний файл Dan.pas.

 


Приложение 1



Поделиться:


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

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