Значение READ в Фортране - PullRequest
9 голосов
/ 14 июля 2009

Что делает READ() в Фортране?

Например:

READ(1,82)

Ответы [ 6 ]

15 голосов
/ 14 июля 2009

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

        program foo
        implicit none
        integer :: i
        double precision :: a

        write (*,*) 'give me an integer and a float'
        read (*,82) i,a
        write (*,82) i,a
82      format (I4, F8.3)
        end program

В этом примере программа принимает от стандартного ввода (номер единицы которого не указан, и поэтому я ставлю *) целое число и значение с плавающей запятой. формат говорит, что целое число занимает первые четыре столбца, затем у меня есть число с плавающей запятой, которое остается в 8 столбцах, с 3 цифрами после десятичной точки

Если я запустил программу сейчас, и я не следую именно этому формату, программа будет жаловаться и вылетать, потому что первые 4 столбца должны представлять целое число (из-за формата I4), и «5 3 «. не является действительным целым числом

$ ./a.out 
 give me an integer and a float
5 3.5
At line 7 of file test.f (Unit 5)
Traceback: not available, compile with -ftrace=frame or -ftrace=full
Fortran runtime error: Bad value during integer read

Однако, правильная спецификация (обратите внимание на три пробела перед цифрой 5) будет выполнять правильную операцию (с небольшим допуском, это не , что строгое)

$ ./a.out 
 give me an integer and a float
   5 3.5
   5   3.500
$ 
6 голосов
/ 14 июля 2009

Он читает из «единицы» (открытого файла) номер 1, согласно инструкции FORMAT на метке 82. Однако, поскольку в инструкции нет никаких переменных, ему некуда поместить данные, которые он читает, что вряд ли Помогите; READ(1,82) FOOBAR с большей пользой поместил бы данные, которые он читает, в переменную FOOBAR.

3 голосов
/ 27 ноября 2012

Вы можете сделать еще несколько вещей с помощью оператора чтения "fortran".

рассмотреть следующие вопросы: читать (номер блока, формат, параметры) ... универсальный

read (7,*,end=10)

Где, "7" - это номер единицы, из которого читается, "*" - это формат (по умолчанию в этом случае), а "10" - это номер строки, к которой переходит программа, когда считываемое устройство / файл достигает ВФ. Слот "options" может быть заполнен такими вещами, как "err = 'номер строки для перехода к'" или iostat, advance = "no". Вы можете проверить некоторые из них

В части формата вы можете указать более точный формат ожидаемых данных. Например, если у вас есть спецификатор формата, например:

read (25,"(2X, 2I5, F7.3, A)")

Здесь «2X» относится к 2 пробелам, «2I5» относится к 2 целым числам, которые состоят из 5 цифр, «F7.3» относится к десятичному значению общей длиной 7 с тремя цифры после запятой. «А» относится к персонажу. Вы можете проверить еще эти

CHEERS!

1 голос
/ 10 июня 2015

«1» - единица, которую вы использовали для открытия файла в фортране, а «82» указывает формат для команды чтения.

open(1,file=fname,status='unknown')
read(1,82) var_name
82 format(2I5)

Приведенный выше код открывает файл с именем «fname», команда чтения читает из файла fname, когда он был открыт с единицей «1», и команда чтения читает в формате, указанном в формате 82. Подробности форматирования в фортране приводится ниже:

nim (Integer Specification)
nfm.d (Floating point Specification)
nEm.d(Exponential Specification)
nAm (string specification)

where
"m" is the number of character spaces reserved for printing. (should be more than what you are reading otherwise read statement would not give correct results)
"n" is the number of integers, floating point, characters or exponential numbers that you want to read.
"d" are the number of decimal places up to which you want to read.
0 голосов
/ 26 мая 2015

Когда Фортран читает из файла, требуется, чтобы операторы READ однозначно идентифицировали файл. Идентификация осуществляется с помощью идентификатора Фортрана.

Идентификатор единицы может быть одним из следующих:

1) Целочисленная переменная или выражение, значение которого больше или равно 0.

2) Звездочка (*) разрешена только для операторов READ и WRITE. В инструкциях READ звездочка относится к единице 100 (стандартный ввод).

Номера единиц лучше всего указывать с помощью newunit

open(newunit=i,file='test')

Используйте оператор INQUIRE, чтобы проверить достоверность (существование) любого номера единицы перед его использованием, как в следующем примере:

logical :: idok, fop 
inquire (unit=i, exist=idok, opened=fop)
if (idok .and. .not. fop) then
  open (unit = i, ...)
endif

Затем у нас есть оператор FORMAT, помеченный оператор, который может появляться в любой части программы, в которой отображается формат.

Он имеет форму

READ(*,100) I, J, K

Оператор FORMAT

100 FORMAT(I10,I10,I10)

Несколько иной оператор FORMAT:

100 FORMAT(3I10.8)

, что опять-таки дает три выравниваемых по правому краю целых числа шириной 10, но на этот раз необходимо напечатать минимум 8 цифр

0 голосов
/ 14 июля 2009

Считывает из блока 1 в формате, указанном в выражении с номером 82.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...