Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование - 09 - Файлы.doc
Скачиваний:
10
Добавлен:
09.03.2016
Размер:
235.01 Кб
Скачать

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

Ниже приведенные процедуры используют следующие описания:

Type

Kniga = Record

Nomer : Integer ;

Avtor : String [ 20 ] ;

Nazv : String [ 50 ] ;

God : Integer

end ;

Var

Spisok : File of Kniga ;

Kn : Kniga ;

FileName : String [ 12 ] ;

Последовательная (начальная) организация (формирование) файла:

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

  • связать файловую переменную с именем создаваемого файла (дать файлу имя): Assign

  • открыть новый файл: ReWrite

чаще всего в цикле:

  • подготовить информацию (компоненту) для вывода в файл

  • записать компоненту в файл: Write

  • закрыть файл: Close

Рассмотрим пример занесения в файл списка литературы (см. описания выше):

Procedure PoslOrg ;

Begin

Write ( Дайте имя файлу: ) ;

ReadLn ( FileName ) ;

Assign ( Spisok, FileName ) ;

ReWrite ( Spisok ) ;

While True do

With Kn do

Begin

Write ( Номер книги (9999 – конец формирования списка): ) ;

ReadLn ( Nomer ) ;

If Nomer = 9999 then

Begin

Close ( Spisok ) ;

Exit

End ;

Write ( ФИО автора: ) ;

ReadLn ( Avtor ) ;

Write ( Название книги: ) ;

ReadLn ( Nazv ) ;

Write ( Год издания: ) ;

ReadLn ( God ) ;

Write ( Spisok, Kn )

End

End ;

Последовательная обработка файла:

Для последовательной обработки файла необходимо выполнить:

  • связать файловую переменную с именем обрабатываемого файла: Assign

  • открыть существующий файл: ReSet

чаще всего в цикле:

  • последовательно считать компоненты до нужной компоненты: Read

  • выполнить обработку

  • закрыть файл: Close

В качестве примера рассмотрим чтение и вывод на экран всего файла, созданного предыдущей процедурой:

Procedure PoslObr ;

Begin

Write ( Дайте имя файлу: ) ;

ReadLn ( FileName ) ;

Assign ( Spisok, FileName ) ;

ReSet ( Spisok ) ;

While Not EoF ( Spisok ) do

With Kn do

Begin

Read ( Spisok, Kn ) ;

WriteLn ( Nomer : 4, Avtor : 20, Nazv : 50, God : 6 )

End ;

Close ( Spisok )

End ;

Расширение файла (дополнительная запись новых компонент):

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

  • связать файловую переменную с именем расширяемого файла: Assign

  • открыть существующий файл: ReSet

  • установить указатель за последней компонентой файла: удобнее с помощью Seek

чаще всего в цикле:

  • подготовить новую компоненту для вывода в файл

  • записать компоненту в файл: Write

  • закрыть файл: Close

Procedure Rassh ;

Begin

Write ( Дайте имя файлу: ) ;

ReadLn ( FileName ) ;

Assign ( Spisok, FileName ) ;

ReSet ( Spisok ) ;

Seek ( Spisok, FileSize( Spisok ) ) ;

While True do

With Kn do

Begin

Write ( Номер книги (9999 – конец формирования списка): ) ;

ReadLn ( Nomer ) ;

If Nomer = 9999 then

Begin

Close ( Spisok ) ;

Exit

End ;

Write ( ФИО автора: ) ;

ReadLn ( Avtor ) ;

Write ( Название книги: ) ;

ReadLn ( Nazv ) ;

Write ( Год издания: ) ;

ReadLn ( God ) ;

Write ( Spisok, Kn )

End

End ;

Корректировка файла по ключу:

Для корректировки файла необходимо выполнить:

  • связать файловую переменную с именем корректируемого файла: Assign

  • открыть существующий файл: ReSet

чаще всего в цикле:

  • подвести указатель к корректируемой компоненте файла: Seek

  • считать корректируемую компоненту: Read

  • откорректировать нужные поля

  • повторить подвод указателя к нужной компоненте файла: Seek

  • записать откорректированную компоненту в файл: Write

  • закрыть файл: Close

Откорректируем в созданном файле годы издания некоторых книг (для новых изданий этих книг):

Procedure KorrKl ;

Var

NovGod, i, k, kl : Integer ;

Begin

Write ( Дайте имя файлу: ) ;

ReadLn ( FileName ) ;

Assign ( Spisok, FileName ) ;

ReSet ( Spisok ) ;

Write ( Число корректируемых записей: ) ;

ReadLn ( k ) ;

For i := 1 to k do

With Kn do

Begin

Write ( Номер кооректируемой записи: ) ;

ReadLn ( kl ) ;

Write ( Новый год издания: ) ;

ReadLn ( NovGod ) ;

Seek ( Spisok, kl - 1 ) ;

Read ( Spisok, Kn ) ;

God := NovGod ;

Seek ( Spisok, kl - 1 ) ;

Write ( Spisok, Kn )

End ;

Close ( Spisok )

End ;

Обработка файла по ключу:

Необходимо выполнить:

  • связать файловую переменную с именем файла: Assign

  • открыть существующий файл: ReSet

чаще всего в цикле:

  • подвести указатель (по ключу) к нужной компоненте файла: Seek

  • считать компоненту: Read

  • выполнить обработку

  • закрыть файл: Close

Выведем некоторые записи из списка:

Procedure ObrKl ;

Var

kl : Integer ;

Begin

Write ( Дайте имя файлу: ) ;

ReadLn ( FileName ) ;

Assign ( Spisok, FileName ) ;

ReSet ( Spisok ) ;

While True do

Begin

Write ( Ключ выводимой записи (9999 – выход): ) ;

ReadLn ( kl ) ;

If kl = 9999 then

Begin

Close ( Spisok ) ;

Exit

End ;

Seek ( Spisok, kl - 1 ) ;

Read ( Spisok, Kn ) ;

With Kn do

WriteLn ( Nomer : 4, Avtor : 20, Nazv : 50, God : 6 )

End

End ;

Организация файла произвольного доступа (форматирование файла):

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

Procedure FormatirFile ;

Var

i, Razmer : Integer ;

Begin

Write ( Дайте имя файлу: ) ;

ReadLn ( FileName ) ;

Assign ( Spisok, FileName ) ;

ReWrite ( Spisok ) ;

Write ( Начальный размер файла: ) ;

ReadLn ( Razmer ) ;

For i := 1 to Razmer do

With Kn do

Begin

Nomer := i ;

Avtor := ‘ ’ ;

Nazv := ‘ ’ ;

God := 0 ;

Write ( Spisok, Kn )

End ;

Close ( Spisok )

End ;

Загрузка (создание) отформатированного файла по ключу:

По ключу заносится фактическая информация, которая замещает фиктивную:

Procedure ZagrKl ;

Var

i, k, kl : Integer ;

Begin

Write ( Дайте имя файлу: ) ;

ReadLn ( FileName ) ;

Assign ( Spisok, FileName ) ;

ReSet ( Spisok ) ;

Write ( Число создаваемых записей: ) ;

ReadLn ( k ) ;

For i := 1 to k do

With Kn do

Begin

Write ( Номер книги: ) ;

ReadLn ( Nomer ) ;

kl := Nomer ;

Write ( ФИО автора: ) ;

ReadLn ( Avtor ) ;

Write ( Название книги: ) ;

ReadLn ( Nazv ) ;

Write ( Год издания: ) ;

ReadLn ( God ) ;

Seek ( Spisok, kl - 1 ) ;

Write ( Spisok, Kn )

End ;

Close ( Spisok )

End ;