Ввод и вывод данных из текстового файла.
Некоторые правила ввода.
Запись файла – это строка символов, завершаемая символом новой строки. Файл состоит из записей и завершается специальной записью «конец файла».
Поле записи файла – это часть записи, содержащая данные, которые могут быть использованы оператором ввода.
Ввод под управлением списка выполняется по следующим правилам:
· поля записи могут разделяться запятой и пробелами;
· если между полями записи присутствует слеш (/), то ввод прекращается;
· каждый оператор ввода (если не задана соответствующая опция) выполняет ввод с начала новой записи;
· если число элементов списка ввода больше числа полей записи, то для ввода недостающих значений оператор ввода перейдет к следующей записи;
· для ввода значения логической переменной достаточно набрать T (в случае .TRUE.) или F (в случае .FALSE.).
В соответствии с перечисленными правилами, оператору ввода
read *,x,y,z |
может соответствовать одна запись
1.1, 2.2, 3.3
Вместе с тем, конструкции ввода вида
read *,x read *,y read *,z |
соответствует три записи
1.1
2.2
3.3
При создании, например, в первой строке большего числа полей ввода, чем это необходимо
1.1 4.4 5.5 6.6 7.7
2.2
3.3
поля с символами 4.4 5.5 6.6 7.7 будут в последнем примере ввода проигнорированы («лишние» данные прочитаны не будут). По результатам ввода будем соответственно иметь: x=1.1, y=2.2, z=3.3.
Т.е. для каждого оператора READ следует набирать числа с новой строки данных (даже если на предыдущей строке не все числа прочитаны).
Ошибки ввода возникают в следующих ситуациях:
· число элементов списка ввода больше числа доступных для чтения полей записи (то есть выполняется попытка чтения записи «конец файла» или вслед за этой записью);
· размещенные на читаемом поле символы не могут быть преобразованы в тип соответствующего элемента списка ввода.
Так, если, например, имеем оператор ввода
read *,k |
то соответствующая ошибка ввода последует при задании, в частности,
k=2
правильный ввод:
Пусть необходимо определить вещественные переменные x,y,z, задав им при вводе значения 1.2, 3.4 и 5.6. Создадим файл inpdata.dat, например, на логическом диске D: в папке SAMPLE (заметим, что если файл расположен в том же месте, откуда выполняется запуск программы, то достаточно указать лишь имя файла и расширение (если есть), причем для файла исходных данных часто выбирают расширение dat) и занесем в него строку:
1.2 3.4 5.6
Программа ввода из файла:
real x,y,z ! ниже всюду 10 - номер устройства ввода-вывода open(10,file=’d:\sample\inpdata.dat’) read(10,*)x,y,z ! Ввод из файла inpdata.dat print *,’x=’,x,’ y=’,y,’ z=’,z ! Вывод на экран close(10) end |
Оператор OPEN создает в программе устройство ввода-вывода и соединяет его с файлом inpdata.dat. В операторе READ вместо первой звездочки используется номер устройства (файловая переменная), что обеспечивает ввод данных из файла, который с этим устройством связан. Номер устройства может быть константой или переменной целого типа. В последнем случае переменная должна предварительно получить нужное значение (любым допустимым в Фортране способом). Правила ввода из текстового файла и с клавиатуры совпадают.
Пример программы вывода данных в файл имеет вид:
real x,y,z ! ниже всюду 11 - номер устройства ввода-вывода open(11,file=’d:\sample\results.dat’) x=1.1; y=2.2; z=3.3 write(11,*)’x=’,x,’ y=’,y,’ z=’,z ! Вывод в файл results.dat close(11) end |
Количество файлов, которое может быть открыто, определяется настройкой операционной системы. Обычно их оказывается достаточно. Ненужные ранее открытые файлы рекомендуется закрывать, т.е., отключать от программы. Это делается с помощью оператора CLOSE вида CLOSE(номер устройства), причем номер устройства должен соответствовать одному из открытых файлов. Если понадобится, файл можно открыть снова.