Поскольку размер файлов, как правило, превышает количество элементов, которое может уместиться на одной экранной строке, для отображения содержимого файла может отводиться более одной экранной строки. Слева от каждой строки с содержимым файла указывается порядковый номер файлового элемента, значение которого указано первым в этой строке (элементы нумеруются от 1).
Запуск нашей программы признан ознакомительным (и поэтому правильность решения не анализировалась), так как в ходе ее выполнения не было введено ни одного элемента исходных данных. При ознакомительном запуске раздел результатов не отображается, однако приводится пример верного решения , т. е. те числа, которые должны содержаться в результирующем файле при правильной обработке исходных файлов.
Ввод части исходных данных
Добавим в программу фрагмент, позволяющий ввести имена исходных файлов и связать с этими файлами соответствующие файловые переменные. Поскольку мы собираемся работать с четырьмя файлами одного типа, удобно предусмотреть массив для хранения всех файловых переменных:
usesPT4;
var
i: integer;
s: string;
f: array[1..4] of file ofinteger;
begin
Task('File48');
fori := 1 to3 do
begin
read(s);
Assign(f[i], s);
end;
end.
Мы намеренно ограничились тремя итерациями цикла, оставив непрочитанным имя результирующего файла. Считывание имен файлов производится в одну и ту же переменную s, поскольку после связывания файла, имеющего имя s, с соответствующей файловой переменной (процедурой Assign) все остальные действия с данным файлом в нашей программе будут осуществляться с использованием файловой переменной, без обращения к имени файла.
Запуск нового варианта программы уже не будет считаться ознакомительным, поскольку в программе выполняется ввод исходных данных. Так как имя результирующего файла осталось непрочитанным, этот вариант решения будет признан неверным и приведет к сообщению Введены не все требуемые исходные данны е ":
При этом на экране появится раздел результатов (кроме комментария он пока ничего не содержит), а также панель индикаторов. Первый из индикаторов (индикатор ввода) показывает количество введенных исходных данных. Обратите внимание на то, что второй индикатор (индикатор вывода) является неактивным: он выделяется серым цветом более светлого оттенка и не содержит текстового заголовка. Это объясняется тем, что индикатор вывода показывает количество результирующих данных, полученных задачником от программы, а в нашем случае программа не должна передавать задачнику никакие данные; вместо этого ей необходимо создать файл и заполнить его требуемыми значениями. Для заданий подобного типа (обычно это задания, связанные с обработкой файлов) индикатор вывода не используется.
Ввод всех исходных данных без создания требуемого файла
Изменим программу, заменив в заголовке цикла число 3 на 4, и вновь запустим программу. Теперь все данные, необходимые для выполнения задания, введены в программу (это видно по индикатору ввода). Однако задание не выполнено, поскольку результирующий файл не создан. Поэтому решение опять признано ошибочным с диагностикой Результирующий файл не найде н ":
Пример программы, приводящей к ошибке времени выполнения
Добавим в тело цикла после процедуры Assign вызов процедуры Reset, обеспечивающий открытие существующего файла:
usesPT4;
var
i: integer;
s: string;
f: array[1..4] of file ofinteger;
begin
Task('File48');
fori := 1 to4 do
begin
read(s);
Assign(f[i], s);
Reset(f[i]);
end;
end.
Теперь запуск программы приведет к сообщению об ошибке Error System.IO.FileNotFoundExceptio n ":
Сообщение, начинающееся со слова Error , означает, что при работе программы произошла ошибка времени выполнения (Runtime Error). После слова Error указывается имя этой ошибки (в данном случае System.IO.FileNotFoundException , то есть ошибка ввода-вывода, связанная с тем, что файл не найден) и краткое ее описание на английском языке.
Читать дальше