Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
103
Добавлен:
14.04.2015
Размер:
678.91 Кб
Скачать

Операторы open и close

Оператор openсвязывает условный номер устройства с файлом для ввода или вывода данных (“открывает” файл):

open(номер устройства, file=имя файла)

На номер устройствассылаются операторыreadиwrite. Можно открыть несколько файлов, но каждому из них должен быть сопоставлен уникальный номер устройства.Имя файла– символьная строка.

Если файл не существует, он создается, а если такой файл существует, то он обновляется при выводе. Другие возможности работы с файлами регулируются дополнительными параметрами.

Оператор closeотсоединяет файлы от устройства (“закрывает” файлы):close (списокномеров устройств)

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

Пример.

open (1, file=’in.txt’)

open (2, file=’out.txt’)

read (1,*) a, b

write (2,*) "a =", a, " b =", b, " a+b =", a+b

close (1, 2)

Оператор read – ввод данных

При вводе данные, подготовленные в символьном виде, преобразуются в значения переменных списка в соответствии с форматом (форматный ввод) или с типами переменных (ввод под управлением списка).

Данные, подготовленные для ввода под управлением списка, разделяются между собой запятыми, пробелами или символами конца строки (клавиша <Enter>).

Данные для форматного ввода следует готовить строго в соответствии с выбранным форматом. Это не всегда удобно и используется редко.

Некоторые свойства оператора read:

  1. Данные при вводе контролируются

Пример. Ввести число из файла'data.txt':

1.23

Фрагмент для чтения:

integer m

open (7, file='data.txt')

read (7, *) m

Попытка ввести вещественное значение для целой переменной приведет к ошибке ввода, которая будет зафиксирована на экране монитора (ошибка выполнения): Run-time error F6101: READ(data.txt) – invalid INTEGER

  1. В некоторых случаях данные конвертируютсяв соответствии с типом переменной. Например, если для ввода вещественных переменных подготовлены целые числа, в результате ввода переменным будут присвоены вещественные значения с нулевой дробной частью.

Пример. Ввести числа из файла'data.txt':

123, 21, 17

Фрагмент для чтения:

real a, b, c

open (7, file='data.txt')

read (7, *) a, b, c ! a= 123.0; b= 21.0; c= 17.0

  1. Каждый оператор read начинает читать данныес новой строки, независимо от того, все ли данные предыдущей строки прочитаны.

Пример.Прочитать две строки из файла'data.txt':

1.23, 4.56 77 55

11, 13

Фрагмент программы для чтения:

real x,y,z; integer m,n

open (7,file='data.txt')

read (7,*)x, y, z ! x= 1.23; y= 4.56; z= 77.0

read (7,*)m, n ! m= 11; n= 13

  1. В списке управляющей информации оператора readможет присутствовать необязательный параметр endвидаend=меткаЭтот параметр указывает, что при достижении конца файла в случае отсутствия ошибок ввода, управление будет передано оператору с меткой метка.Использование этого параметра удобно, когда неизвестно, сколько данных подготовлено в файле.

Пример.

real x, y, z

do

read (*,*, end=99) x, y, z

write (*,*) x, y, z, sin(x) + sin(y) + sin(z)

enddo

99 continue ! продолжение программы

Цикл будет продолжаться до тех пор, пока не будут введены все числа, подготовленные в файле.

Примечание. Операторcontinue – пустой оператор, по которому не производится действий, а выполнение программы продолжается со следующего оператора.

  1. Чтобы избежать аварийного завершения программы вследствие ошибки ввода данных, можно запрограммировать переход на обработку ошибки ввода, указав метку в качестве значения дополнительного параметра err в оператореread, например:

Пример.

integer m,n

do

read (*,*, err=88) m, n

. . .

exit

88 write(*,*) ‘ Re-enter the data’ ! Повторите ввод данных

enddo

Цикл будет продолжаться до тех пор, пока не будут введены целые значения.

Соседние файлы в папке Фортран_Лекции