Fortran. Операторы ввода/вывода.
READ(n, m) <список переменных>
WRITE(n, m) <список переменных>
n – номер канала ввода или вывода;
m – метка оператора FORMAT, который определяет порядок расположения данных в строке при вводе или выводе; <список переменных> – вводимые или выводимые переменные.
Пример
write(*,*) "Fortran 1954"
read(*,*) !нет переменных, перевод строки
Вместо второй звездочки в операторе write(*,*) указывается спецификация формата вывода.
Спецификация формата - это набор дескрипторов преобразования, заключенных в "( )".
для вывода текста и запрещения перевода строки используется следующая спецификация:
write(*,"(A,N)") ''Press Enter..."
состоящая из дескрипторов:
A - вывод символов,
\ - запрет перехода на следующую строку.
При форматируемом выводе часто используются дескрипторы:
/ - переход на следующую строку,
// - пропуск строки,
nx - вывод n пробелов.
При выводе текстовой строки можно указать количество выводимых символов в А-дескрипторе. Так, например оператор write(*,"(A3)") "Press Enter..." выведет на экран "обрезанный" текст:
Pre
Если указать write(*,"(A30)") "Press Enter...", то оставшееся свободное место дополнится пробелами:
^^^^^^^^^^^^^^^^^^^Press Enter...
Если спецификация формата часто повторяется, то ее рекомендуется записывать отдельно при помощи оператора format (формат). Ссылка на формат осуществляется при помощи числовой метки, например:
write(*,100) "Press Enter..."
100 format(A30)
При форматируемом выводе данных одного типа (например, вывод пяти строк текста) в спецификации формата указывается число повторений, например:
write(*,100) "prog1 ”,&
"prog2 ” ,&
''prog3 ", &
"prog4 ” ,&
100 format(4A)
Здесь спецификация 4A означает вывод 4х символьных строк.
Для форматного ввода и вывода целых чисел используется i-дескриптор преобразования.
write(*, ' (i4) ') k
Здесь i4 означает вывод целого числа k, длина которого не более четырех позиций.
При задании позиций больше требуемых неиспользованные позиции заполняются пробелами (с начала!).
При одновременном выводе текста и целых чисел следует указывать через запятую соответствующие дескрипторы преобразования, например: write(*,'(А,i2,А,i4)’)"Date...",29," April ",2005
При форматном вводе и выводе вещественных чисел применяются следующие дескрипторы преобразования:
- F-дескриптор преобразования:
- f5.2 означает, что под число отводится 5 позиций, из них 2 позиции после запятой, 1 позиция для точки и 2 - для целой части и знака, т. e. максимальное число будет 99.99, минимальное -9.99.
Е-дескриптор преобразования:
Е12.6 означает, что под число отводится 12 позиций, из них 4 для обозначения десятичной экспоненты, знака и показателя степени (E+01), 6 под дробную часть, 1 под точку и 1 под знак.
Форматируемый ввод и вывод комплексных данных осуществляется при помощи удвоенного вещественного формата.
program complex_number
complex :: i=(0.0,1.0) !мнимая единица
write(*,"(2f5.2)") i end
Результат:
- 1.00
При выводе с форматом по умолчанию на экран автоматически выдаются пары круглых скобок:
program complex_number
complex :: i=(0.0,1.0) !мнимая единица
write(*, *) i
end
Результат работы программы:
(0.0000000E+00,1.000000)
При форматном вводе и выводе логических данных используется L-дескриптор преобразования, например при работе оператора write(*,"(L)"):
write(*,"(L)") 2<3, 6==9
на экран будут выданы два значения - истина и ложь:
T
F
Вывод в Файлы
При организации ввода-вывода с использованием файлов файл, с которого будет осуществляться ввод-вывод, нужно связать с номером канала ввода-вывода. Для этого используется оператор открытия файла вида
OPEN(n,FILE ='<имя файла>')
где n – номер канала, которым может быть любое целое число.
Пример:
OPEN(10,FILE='DANN.DAT')
READ(10,*)X,Y,M
Файл может быть отсоединен от канала ввода-вывода с помощью оператора закрытия файла, который имеет вид:
CLOSE(n)
Одновременно с закрытием канала файл может быть удален, если использовать оператор
CLOSE(n, STATUS='DELETE')
Стандартная логическая функция определения конца файла EOF (end of file):
функция возвращает .TRUE., если достигнут конец файла, .FALSE. - в противном случае.
! do while (.NOT. EOF.(1) )
Файлы
K данным последовательных файлов доступ осуществляется по порядку. B таких файлах новые записи можно добавлять только в конец файла.
Файлы прямого доступа состоят из ячеек определенной, фиксированной длины. Каждая ячейка имеет свой уникальный номер и содержит одну запись или ни одной. Данные в таких файлах читаются и записываются в любом порядке. Типичный пример использования - базы данных.
Файлы также могут быть форматными, неформатными и двоичными.
B форматных файлах данные хранятся в символьном представлении. Эти данные можно редактировать в текстовом редакторе.
B случае неформатных файлов данные записываются во внутреннем представлении. При записи и чтении неформатные файлы обрабатываются гораздо быстрее, так как не требуется время на преобразование из внутреннего представления во внешнее форматное представление. Чтобы задать такие файлы, следует указать в операторе open параметр
FORM='UNFORMATTED’
B двоичных, или бинарных, файлах данные хранятся в двоичном представлении. Длина записи фиксирована и равна 1 байту. B этом случае в операторе open следует указать
FORM=‘BINARY’
Двоичные файлы очень компактны, и время доступа к данным минимально. Поэтому такие файлы используются для хранения больших объемов информации.
При работе с файлами используются следующие операторы, позволяющие реализовать некоторые дополнительные возможности.
Оператор rewind устанавливает файловый указатель на начало файла. Применятся, например, если необходимо еще раз прочитать данные из файла.
Оператор inquire делает запрос о характеристиках файла. Его можно выполнять независимо от того, подсоединен ли файл к устройству или нет.
Пример. Вывести сообщение о существовании файла:
program see_file character(255) filename logical res
write(*,"(A,\)") "Enter file name..."; read(*,*) filename inquire(file=filename, EXlST=res)
! Параметр EXIST определяет существование указанного файла
if (res) then
write(*,*) "File is ok!" else
write(*,*) ''File not found!" end if
end
Операторы open и close содержат многие необязательные параметры, которые предназначены для выполнения определенных действий с файлами, обработке ошибок, совместного доступа и т. п.
Для возможности добавления данных в файл следует использовать параметр access='APPEND' в операторе open:
open(1,file="log.txt", access='APPEND')
Для удаления файла используется оператор close с параметром STATUS='DELETE'.
close(1, STATUS='DELETE')