Ввод и вывод данных из текстового файла.

Некоторые правила ввода.

Запись файла – это строка символов, завершаемая символом новой строки. Файл состоит из записей и завершается специальной записью «конец файла».

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

Ввод под управлением списка выполняется по следующим правилам:

· поля записи могут разделяться запятой и пробелами;

· если между полями записи присутствует слеш (/), то ввод прекращается;

· каждый оператор ввода (если не задана соответствующая опция) выполняет ввод с начала новой записи;

· если число элементов списка ввода больше числа полей записи, то для ввода недостающих значений оператор ввода перейдет к следующей записи;

· для ввода значения логической переменной достаточно набрать 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(номер устройства), причем номер устройства должен соответствовать одному из открытых файлов. Если понадобится, файл можно открыть снова.