Слайд 1
ФАЙЛЫ
учитель информатики и ИКТ Пигарева Г.Г.
МБОУ Лицей № 7
имени Д.П.
Уланова г. Химки
Слайд 2Для программ, обрабатывающих реальную информацию, могут потребоваться повторные вызовы программы, в
которой данные в основной своей массе постоянны, а нередко изменяются с учетом предыдущих значений. Существует способ хранения данных – непосредственно в файлах на диске.
Слайд 3Файл – это поименованная область на диске, содержащая некоторые данные. В
ряде случаев под файлом подразумевается устройство, которое может выдавать или получать информацию, например, принтер или клавиатура.
Слайд 4Любой файл имеет три характерные особенности.
Во-первых, у него есть имя, что
дает возможность программе работать одновременно с несколькими файлами.
Во-вторых, он содержит компоненты одного типа. Компоненты могут быть любого типа, кроме файлов.
В-третьих, длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается лишь емкостью устройств внешней памяти.
Слайд 5Компоненты файла называются также записями. Файл целесообразнее всего просматривать сверху вниз.
Имеется так называемый указатель записи в файле, который указывает на обрабатываемую в данный момент запись.
Это называется последовательным доступом (а указатель записи называется индексом файла). Конечно, указатель можно установить на любую запись и начать последовательную обработку с нее.
Слайд 6Для доступа к файлу в программе необходимо:
определить файловую переменную. Она будет
использоваться как логический идентификатор файла;
связать эту переменную с конкретным физическим файлом.
Слайд 7В ABC Pascal есть два вида файлов: текстовые и типизированные.
В
типизированных файлах обмен с внешними устройствами производится без какого либо преобразования данных, т.е., например, числа типа integer непосредственно копируются на диск, занимая по 4 байта каждое. Просматривать такие файлы в текстовых редакторах нельзя, однако скорость ввода-вывода для них будет максимальной.
Слайд 8Текстовые файлы
Работа с текстовыми файлами очень похожа на работу с обычным
консольным вводом/выводом. Числовые данные преобразуются в цифры в соответствии с заданными форматами. Строковый и символьный типы данных выводятся без преобразований. Следует учесть, что текстовый файл может быть открыт либо на чтение, либо на запись.
Созданный текстовой файл можно прочитать в простом текстовом редакторе, а также его можно создать в текстовом редакторе и прочитать в программе.
Слайд 9Синтаксическая схема описания файлового типа
Для работы с типизированным файлом надо при
описании файловой переменной в качестве ее типа данных указать file of <тип>. Например:
var
f1, f2: file of integer;
Для работы с текстовым файлом надо при описании файловой переменной указать в качестве ее типа данных зарезервированное слово text. Например,
Var
f3 : text;
Слайд 10После того как файловая переменная определена, в тексте программы ее необходимо
связать с конкретным физическим файлом. Для этой цели используется процедура assign(f, name). Здесь f – правильный идентификатор, объявленный в программе как переменная файлового типа; name – текстовое выражение, содержащее имя файла или логического устройства.
Работать с файловой переменной f можно только после выполнения этой процедуры.
Слайд 11В параметре name указывается спецификация файла, которая обычно состоит из пути
к этому файлу и его имени.
Слайд 12Вывод таблицы квадратов первых 10 чисел в текстовый файл
table.txt
Слайд 13program TextOut;
const name = ‘text.txt’; //имя файла в текущем каталоге
var
f : text; //файловая переменная
n : integer; // переменная для цикла for
begin
assingn (f, name);// связывание файловой переменной с именем файла на диске
rewrite (f); // создание и открытие файла на запись
Слайд 14 for n:=1 to 10 do writeln (f, n:2, sqr
(n): 4); //вывод в файл
close (f); //закрытие файла, сохранение всех еще не записанных данных на диск
end.
Слайд 15Обратить внимание!
f : text – переменная специального встроенного типа «текстовый файл»;
assign
(f, name) – сопоставление файлу f в программе файла name на диске;
rewrite (f) – «перезаписывает» файл f, т.е. либо создает новый пустой файл, либо уничтожает старый (будьте осторожны поэтому) и опять создает новый пустой файл;
writeln (f, …) – модификация уже известного оператора writeln, отличается от привычного только тем, что первый параметр – имя файловой переменной;
close (f) – файлы надо обязательно закрывать, особенно файлы, открытые на запись (как в приведенном примере), иначе часть данных может быть утеряна.
Слайд 16Вместо оператора rewrite, файл можно открыть оператором append, в этом случае
будут произведено открытие уже существующего файла в режиме дозаписи в конец файла.
Слайд 17Пример чтения уже существующего файл, в качестве файла используем созданный в
предыдущем примере файл text.txt
Слайд 18program TextIn;
uses CRT;
const name = ‘text.txt’;// имя файла в текущем каталоге
var f: text;//файловая переменная
a,b: integer;// переменные для чтения
begin
assign (f, name); //связывание файловой переменной с именем файла на диске
reset (f); // открытие существующего файла на чтение
repeat
readln (f, a, b); // чтение из файла информации из целой строки
writeln (a:5, b:5); // вывод в окно CRT
until Eof (f); // функция Eof возвращает true при достижении конца файла
end.
Слайд 19Обратить внимание!
reset (f) – открытие существующего файла на чтение, если файла
нет, то произойдет ошибка выполнения программы;
readln (f, …) – оператор чтения из файла, при работе с файлами действие операторов read (f, …) и readln (f, …) различно: первый прочитает необходимую информацию в одной строке, второй – после чтения информации в строке пропустит все оставшиеся до конца строки символы, таким образом следующий оператор чтения начнет ввод с начала следующей строки;
функция eof (f) возвращает всегда ложное значение, кроме одного единственного случая: достигнут конец строки.
Слайд 20Работа с типизированными файлами
Основные стандартные процедуры и функции для обработки типизированных
файлов:
RESET (f) – открывает существующий файл, связанный с файловой переменной f.
REWRITE (f)- открывает новый файл (создает пустой файл). Ему присваивается имя, заданное процедурой ASSIGN. Если файл с таким именем уже существует, то он уничтожается.
Слайд 21READ (f, d1 [, d2, d3 … dn] – считывает данные
из файла в перечисленный список n переменных (их может быть один или несколько).
WRITE (f, d1 [,d2, d3, … dn] – записывается данные в файл. Предоставляет возможность легко обновлять ранее созданные типизированные файлы и при необходимости расширять их.
Слайд 22EOF (f) – функция типа boolean проверяет достигнут ли конец файла.
Она возвращает true, если указатель стоит в конце файла.
При записи информации в файл это означает, что очередной компонент будет добавлен в конец файла, при чтении – что файл исчерпан.
Слайд 23CLOSE (f) – закрывает файл, при этом в содержимое файла вносятся
все произведенные изменения.
После закрытия файла уже нельзя считывать или записывать в него данные, однако связь с файловой переменной сохраняется, файл можно повторно открыть без дополнительного использования процедуры ASSIGN.
Слайд 24Организация прямого доступа к компонентам файла
FilePos (f) – возвращает номер текущего
компонента файла f (компоненты нумеруются, начиная с нуля). Функция актуальна только для открытого файла.
SEEK (f, num) - смещает указатель файла к требуемому компоненту, num - номер компонента.
Слайд 25FileSize (f) – определяет количество компонентов в файле.
ERASE (f) – стирает
файл. Перед выполнением процедуры файл необходимо закрыть.
RENAME (f, <новое имя>) – переименовывает файл. Новое имя имеет строковый тип.
Truncate (f) – удаляет часть файла, начиная с текущей позиции и до его конца.
Слайд 26IORESULT – определяет, нормально ли прошло обращение к файлу. Если операция
завершилась успешно, функция возвращает 0.
Следует помнить, что функция становится доступной только при отключенном автоконтроле ошибок ввода-вывода. По умолчанию устанавливается директива {$I+}, а {$I-} отключает контроль.
Слайд 27Работа с текстовыми файлами
Текстовый файл представляет собой совокупность символов, разделенных на
строки неопределенной длины. При создании файла в конце каждой строки ставится признак конца строки Eoln (end of line).
Слайд 28Обработка текстовых файлов имеет ряд особенностей:
К компонентам текстового файла возможен только
последовательный доступ- считать n-ю строку можно только после того, как уже считаны предыдущие n-1 строк.
Текстовый файл может быть открыт либо для чтения (процедурой reset), либо только для записи (rewrite). При этом, если открыть файл только для записи, то вся предыдущая информация, хранящаяся в нем, будет утеряна.
Слайд 29Процедуры assign, reset, rewrite, close, rename и функция eof работают с
текстовыми файлами также, как и с типизированными.
Слайд 30Процедура read обеспечивает ввод символов, строк и чисел.
READ (f, )
или
READ (<список ввода>)
Если в качестве f используется стандартный текстовой файл INPUT, то его имя можно опускать.
- последовательность из одной или более переменных строкового, символьного, целого или вещественного типов.
Для ввода последовательности строк нужно использовать процедуру readln.
Слайд 31Пример программы организации ввода массива данных
Program vvod_massiva;
const
n= 1000; {}
var
f: text;
m: array [1..n] of real;
i: integer;
begin
assign (f, ‘prog.dat’);
reset (f);
i:=1;
while not EOF (f) and (i<=n) do
begin
read (f, m[i]);
inc (i);
end;
close (f);
End.
Слайд 32Процедура write записывает из переменных данные в файл.
WRITE (f, )
или
WRITE (<список вывода>), если используется стандартный файл OUTPUT.
<список вывода> - это последовательность одного или более выражений типа char, string, boolean, а также любого целого или вещественного типа.
Слайд 33Процедура WRITELN аналогична процедуре WRITE, но выводимая информация завершается признаком конца
строки. При вызове этой процедуры можно опускать список вывода; в этом случае в файл передается маркер EOLN, что при выводе на экран приведет к переводу курсора в начало следующей строки.