Планирование уроков на учебный год (по учебнику К.Ю. Полякова, Е.А. Еремина, полный углубленный курс, 4 часа в неделю)



Уроки 107 - 110
Файловый ввод и вывод. Обработка массивов, записанных в файле
Обработка смешанных данных, записанных в файле
§68. Работа с файлами




Содержание урока

Как работать с файлами?

Неизвестное количество данных

Обработка массивов

Обработка строк

Вопросы и задания

Задачи


Как работать с файлами?


Файл — это набор данных на диске, имеющий имя.

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

1) текстовые, которые содержат текст, разбитый на строки; таким образом, из всех специальных символов в текстовых файлах могут быть только символы перехода на новую строку; 
2) двоичные, в которых могут содержаться любые данные и любые коды без ограничений; в двоичных файлах хранятся рисунки, звуки, видеофильмы и т. д.

Мы будем рассматривать только текстовые файлы.

Работа с файлом из программы включает три этапа. Сначала надо открыть файл, т. е. сделать его активным для программы. Если файл не открыт, то программа не может к нему обращаться. При открытии файла указывают режим работы: чтение, запись или добавление данных в конец файла. Чаще всего открытый файл блокируется так, что другие программы не могут использовать его. Когда файл открыт (активен), программа выполняет все необходимые операции с ним. После этого нужно закрыть файл, т. е. освободить его, разорвать связь с программой. Именно при закрытии все последние изменения, сделанные программой в файле, записываются на диск.

Такой принцип работы иногда называют «принципом сэндвича», в котором три «слоя»: «хлеб», затем «начинка», и потом снова «хлеб» (рис. 8.16).

Рис. 8.16

Рис. 8.16

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

Например, в школьном алгоритмическом языке существуют стандартные функции:

• открыть на чтение;
• открыть на запись;
• открыть на добавление,

которые принимают имя файла (символьную строку) и возвращают ссылку на открытый файл (ключ файла), которая записывается в специальную переменную типа файл. Команда

закрыть закрывает открытый файл:

файл Fin, Fout

Fin:=открыть на чтение('input.txt')

Fout:=открыть на запись('output.txt')

| здесь работаем с файлами

закрыть(Fin)

закрыть(Fout)


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

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

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

Если в переменных Fin и Fout записаны ключи файлов, открытых соответственно на ввод и на вывод, можно написать так:

ввод Fin, а, b

вывод Fout, а, '+', b, ’=', а + b


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

Как правило, текстовый файл — это «устройство» последовательного доступа к данным. Это значит, что для того, чтобы прочитать 100-е по счёту значение из файла, нужно сначала прочитать предыдущие 99. В своей внутренней памяти система хранит положение указателя (файлового курсора), который определяет текущее место в файле. При открытии файла указатель устанавливается в самое начало файла, при чтении смещается на позицию, следующую за прочитанными данными, а при записи — на следующую свободную позицию.

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

начать чтение(Fin)


Когда файловый курсор указывает на конец файла, логическая функция конец файла возвращает значение «истина»:

если конец файла (Fin)

вывод 'Данные кончились'

все


В языке Паскаль для работы с текстовыми файлами используются файловые переменные типа Text:

var Fin, Fout: Text;


Сначала их нужно с помощью процедуры Assign связать с именами файлов, к которым будем обращаться:

Assign(Fin, 'input.txt');

Assign(Fout, 'output.txt');


Эти файлы ещё не открыты, и работать с ними нельзя. Для открытия файлов в разных режимах существуют стандартные процедуры

• Reset — открыть на чтение,
• Rewrite — открыть на запись,
• Append — открыть на добавление.

У них один параметр — файловая переменная, которая была предварительно связана с именем файла. После окончания работы файлы закрываются командой Close:

Reset(Fin);

Rewrite(Fout);

{здесь работаем с файлами}

Close(Fin);

Close(Fout);


Для чтения и записи используются процедуры read, readln, write и writein, в которых в качестве первого параметра указывают файловую переменную:

readln(Fin, а, b);

writein(Fout, а, '+', b, '=', а + b);


Напомним, что readin, в отличие от read, читает всё до конца строки. В приведённом выше примере после прочтения значений переменных а и b все оставшиеся символы до конца строки игнорируются, а следующий вызов read или readin берёт данные уже с новой строки.

Функция Eof (англ. EOF — end of file — конец файла) возвращает значение True (истина), если указатель стоит на последней позиции файла:

if Eof(Fin) then

write('Данные кончились');



Следующая страница Неизвестное количество данных



Cкачать материалы урока







Наверх