Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lesson 3.doc
Скачиваний:
0
Добавлен:
08.01.2020
Размер:
675.33 Кб
Скачать

Операторы 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 exit

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

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

Пример.

integer m,n

do

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

. . .

exit

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

enddo

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

  1. Форматный ввод данных требует подготовки этих данных в соответствии с форматом, что неудобно и используется редко.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]