- •Файлы: понятие, причины использования. Носители для хранения файлов
- •Структура дисковых носителей
- •Именование файлов
- •Понятие файла в Pascal
- •Классификация файлов
- •Механизм работы с файлами
- •Описание файловой переменной
- •Сопоставление файловой переменной файлу на диске
- •Открытие файла
- •Добавление информации в файл.
- •Чтение или запись файла
- •Добавление информации в файл
- •Закрытие файла
- •Чтение и запись текстовых файлов. Добавление информации в текстовый файл
- •Добавление информации в текстовый файл
- •Определение размера текстового файла
- •Задание значений переменных генератором случайных чисел Решение задач по теме «Файлы»
- •Двоичные типизированные файлы
- •8.6.3. Двоичные нетипизированные файлы
- •8.7.2. Изменение текущего элемента
- •Добавление информации в файл
- •Работа с файловой системой
- •Обобщение систематизация. Контрольные вопросы и ответы
Двоичные типизированные файлы
Двоичные файлы содержат информацию, аналогичную по строению информации в оперативной памяти. Чтение и запись двоичных типизированных файлов осуществляется, соответственно, процедурами Read и Write (формы Readln и WriteLn не используется, так как файлы являются двоичными, следовательно, не содержат в себе каких-либо строк). Тип данных, записываемых в файл, должен строго соответствовать типу, заявленному в описании файловой переменной.
Read (<Файловая переменная>, <приемник информации1>, ., <приемник информации n>);
Write (<Файловая переменная>, <приемник информации1>, ., <приемник информации n>);
В отличие от работы с экраном и текстовыми файлами, в качестве параметра Источник информации должны использоваться переменные. Использование констант недопустимо.
Рассмотрим пример записи в двоичный файл с элементами типа Integer десяти целых чисел, вводимых пользователем с клавиатуры (см. Листинг 198).
Листинг 198. Создание двоичного типизированного файла
Program WriteTBinFile;
Uses
Crt;
Var
f: File of Integer; |
{описание файловой переменной с именем f для работы с двоичными типизированными файлами, элементы которых имеют тип Integer} |
I: integer; |
|
A: integer; |
|
Begin |
|
ClrScr; |
|
Assign(f, ‘numbers.bin’); |
{сопоставление файловой переменной f файлу с именем numbers.bin, находящемуся в текущем каталоге} |
Rewrite(f); |
{открытие файла, которому сопоставлена переменная f (numbers.bin) для записи} |
For i:=1 to 10 do |
|
Begin |
|
Write(‘Введите число’); |
|
Readln(a); |
{ввод пользователем целого числа} |
Write(f, a); |
{запись введенного числа в файл} |
end; |
|
Close(f); |
{закрытие файла, которому сопоставлена переменная f} |
End.
Теперь прочитаем все десять чисел из файла, созданного программой и выведем их на экран (см. Листинг 199).
Листинг 199. Чтение двоичного типизированного файла
Program ReadTBinFile;
Uses
Crt;
Var
f: File of Integer; |
{описание файловой переменной с именем f для работы с двоичными типизированными файлами, элементы которых имеют тип Integer} |
I: integer; |
|
A: integer; |
|
Begin |
|
ClrScr; |
|
Assign(f, ‘numbers.bin’); |
{сопоставление файловой переменной f файлу с именем numbers.bin, находящемуся в текущем каталоге} |
Reset(f); |
{открытие файла, которому сопоставлена переменная f(numbers.bin) для чтения} |
WriteLn; |
|
For i:=1 to 10 do |
|
Begin |
|
Read(f, a); |
{чтение числа из файла} |
WriteLn(‘Прочитано число: a); |
{вывод числа, прочитанного из файла} |
end; |
|
Close(f); |
{закрытие файла, которому сопоставлена переменная f} |
ReadKey;
End.
Таким же образом записываются в файл сложные типы данных. Например, создадим файл, каждый элемент которого будет иметь тип данных «запись», состоящий из трех строковых полей (см. листинг 200)
Листинг 200. Запись двоичного типизированного файла с элементами сложного типа данных
Program WriteRecords;
Uses
CRT;
Type
TName = Record
Name: String;
Patronymic: String;
SurName: String;
end; {описание типа данных запись из трёх полей строкового типа}
Var
NameFile: File Of TName;
{описание файловой переменной с именем NameFile
для работы с двоичными типизированными файлами,
элементы которых имеют тип TName}
Name: TName; {описание переменной типа TName}
Begin
ClrScr;
WriteLn (‘Введите фамилию: ’) |
{вывод строки на экран} |
Read (Name. SurName) |
{чтение строки с клавиатуры} |
WriteLn (‘Введите имя: ’) |
{вывод строки на экран} |
Read (Name. Name) |
{чтение строки с клавиатуры} |
WriteLn (‘Введите отчество: ’) |
{вывод строки на экран} |
Read (Name. Patronymic) |
{чтение строки с клавиатуры} |
Assign (NameFile, ‘names. bin’) |
|
{сопоставление файловой переменной NameFile
файлу с именем names. bin}
Rewrite (NamesFile); {открытие файла для чтения} |
Write (NameFile, Name); {запись переменной Name в файл, которомуСопоставлена переменная NameFile} |
Close (NameFile); {закрытие файла} |
End. |
Напомним, что тип файла – это условность, имеющая смысл только в подпрограмме его чтения или записи. Записав файл с элементами типа Integer, можно открыть его как файл с элементами, например, Byte.
Приведём такой пример (см. листинг 201).
Листинг 201. Запись и чтение двоичного типизированного файла
Program ReadWriteBin;
Uses
CRT;
Var
B1: File Of Integer;
{описание файловой переменной с именем В1
для работы с двоичными типизированными файлами,
элементы которых имеют тип Integer}
B2: File Of Byte;
{ описание файловой переменной с именем В2
для работы с двоичными типизированными файлами,
элементы которых имеют тип Byte}
V: Byte;
I: Integer;
Begin
Assign (B1, ‘names. bin’);
{сопоставление файловой переменной B1 файлу
с именем names.bin; элементы файла рассматриваются
как элементы типа Integer}
Rewrite (B1); {открытие файла для чтения } |
I := 12000; |
Write (B1, I); {запись в файл, которому сопоставлена |
переменная NameFile, значения 12000} |
Close (B1); {закрытие файла} |
ClrScr;
Assign (B2, ‘names.bin’);
{сопоставление файловой переменной B2 файлу
с именем names.bin; элементы файла рассматриваются
как элементы типа Byte}
Reset (B2); |
|
{открытие файла для чтения} |
Read (B2, V); |
|
{чтение значения переменной V из файла} |
Write (V); |
|
{вывод значения переменной V на экран} |
Close (B2); |
|
{закрытие файла} |
ReadKey;
End.
Приведённый пример вполне корректен с точки зрения языка программирования. В первой её части создаётся файл, содержащий целочисленное значение 12000, занимающее два байта. Далее производится считывание первого байта в переменную V. Однако никакого прикладного значения такая программа не имеет, так как основное правило работы с информацией – информация, записанная в какой–либо форме, должна быть прочитана в той же самой форме. А число, выдаваемое на экран – 224.