Тема: "Работа с файлами. Чтение и запись данных в файл".
Цель работы:
Получение практических навыков по разработке алгоритмов на чтение и запись данных в файл.
Количество часов на выполнение работы
Продолжительность выполнения данной практической работы составляет 2 академических часа.
Оборудование
Аппаратное обеспечение: персональный компьютер следующей конфигурации:
процессор не ниже Intel i3;
жесткий диском со свободным объемом не менее 1 Гб;
Программное обеспечение:
операционная система Windows 7 / 8 / 8.1 / 10.
установленная среда программирования PascalABC.
Краткие теоретические сведения
Многим программам требуется сохранять и читать информацию, используя файловую систему компьютера. В языке Pascal изначально были предусмотрены специальные операторы и типы данных для работы с файлами.
В ABC Pascal есть два вида файлов: текстовые и типизированные. В типизированных файлах обмен с внешними устройствами производится без какого либо преобразования данных, т.е., например, числа типа integer непосредственно копируются на диск, занимая по 4 байта каждое. Попытка просмотра такого файла в текстовом редакторе обречена на неудачу, мы увидим лишь бессмысленный набор знаков. Однако скорость ввода/вывода для таких файлов будет максимальной. Типизированные файлы мы рассмотрим позже в связи с типом данных record.
Работа с текстовым файлами очень похожа на работу с обычным консольным вводом/выводом. Числовые данные преобразуются в цифры в соответствии с заданными форматами. Строковый и символьный тип данных выводится без преобразований. Следует учесть, что текстовый файл может быть открыт либо на чтение, либо на запись
Созданный текстовый файл можно прочитать в простом текстовом редакторе (notepad, aditor, в редакторе ABC Pascal. В текстовом файле ABC Pascal используется кодировка Win-1251, в которой один символ занимает один байт.
Текстовый файл можно создать в редакторе (в соответствии с указанными правилами) и прочитать в программе на ABC Pascal.
Рассмотрим сразу простой пример – вывод таблицы квадратов первых 10 чисел в текстовый файл table.txt.
Program TextOut;
const name = 'text.txt'; // имя файла в текущем каталоге
var f : text; // файловая переменная
n : integer; // переменная для цикла for
begin
assign (f,name); // связывание файловой переменной с именем файла на диске
rewrite (f); // создание и открытие файла на запись
for n:=1 to 10 do writeln(f,n:2,sqr(n):4); // вывод в файл writeln(f,...);
close (f); // закрытие файла, сохранение всех еще незаписанных данных на диск
end.
В этом пример надо обратить внимание на несколько операторов:
f : text – переменная специального встроенного типа «текстовый файл»;
assign (f,name) – сопоставление файлу f в программе файла name на диске;
rewrite (f) – «перезаписывает» файл f, т.е. либо создает новый пустой файл, либо уничтожает старый (будьте осторожны поэтому) и опять создает новый пустой файл;
writeln (f,…) – модификация уже известного оператора writeln, отличается от привычного только тем, что первый параметр – имя файловой переменной
close (f) – файлы надо обязательно закрывать, особенно файлы, открытые на запись (как в приведенном примере), иначе часть данных может быть утеряна.
Вместо оператора rewrite, файл можно открыть оператором append, в этом случае будет произведено открытие уже существующего файла в режиме дозаписи в конец файла.
Рассмотрим теперь пример чтения уже существующего файла, в качестве файла используем созданный в предыдущем примере файл text.txt.
Program 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 при достижении конца файла
close (f); // закрытие файла
end.
В этом пример надо обратить внимание на следующее: 1. reset (f) – открытие существующего файла на чтение, если файла нет, то произойдет ошибка выполнения программы;
2. readln (f,…) – оператор чтения из файла, при работе с файлами действие операторов read (f,…) и readln (f,…) различно, первый прочитает необходимую информацию посредине строки, так что следующий оператор чтения продолжит чтение со средины строки. Оператор readln после чтения информации пропустит все оставшиеся до конца строки символы, таким образом следующий оператор чтения начнет ввод с начала следующей строки;
3. Функция eof (f) возвращает всегда ложное значение, кроме одного единственного случая: достигнут конец строки. Для того, чтобы обойти всякие тонкие случаи, когда в конце файла есть несколько символов «конец строки» или лишние пробелы и символы табуляции, рекомендуются использовать функцию SeekEof (f) – ее действие аналогично eof, но она возвращает true, если до конца файла есть только «пустые» символы: конец строки, табуляция и пробелы.
Задания по практической работе
Дана строка S. Если S является допустимым именем файла, то создать пустой файл с этим именем и вывести TRUE. Если файл с именем S создать нельзя, то вывести FALSE.
Дано имя файла и целое число N (1). Создать файл целых чисел с данным именем и записать в него N первых положительных четных чисел (2, 4, ...).
Дано имя файла и вещественные числа A и D. Создать файл вещественных чисел с данным именем и записать в него 10 первых членов арифметической прогрессии с начальным членом A и разностью D: A, A + D, A + 2·D, A + 3·D, ... .
Даны имена четырех файлов. Найти количество файлов с указанными именами, которые имеются в текущем каталоге.
Дано имя файла целых чисел. Найти количество элементов, содержащихся в данном файле. Если файла с таким именем не существует, то вывести −1.
Дано целое число K и файл, содержащий неотрицательные целые числа. Вывести K-й элемент файла (элементы нумеруются от 1). Если такой элемент отсутствует, то вывести −1.
Дан файл целых чисел, содержащий не менее четырех элементов. Вывести первый, второй, предпоследний и последний элементы данного файла.
Даны имена двух файлов вещественных чисел. Известно, что первый из них существует и является непустым, а второй в текущем каталоге отсутствует. Создать отсутствующий файл и записать в него начальный и конечный элементы существующего файла (в указанном порядке).
Даны имена двух файлов вещественных чисел. Известно, что один из них (не обязательно первый) существует и является непустым, а другой в текущем каталоге отсутствует. Создать отсутствующий файл и записать в него конечный и начальный элементы существующего файла (в указанном порядке).
Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но в обратном порядке.