Синтаксическая ошибка в Fortran OPEN (25, "file.txt", iostat = stat) - PullRequest
0 голосов
/ 27 февраля 2019

Ошибка времени компиляции при выполнении следующего кода на Фортране (Код: Blocks IDE).

PROGRAM file
IMPLICIT NONE
INTEGER stat
OPEN(25,"file.dat",iostat=stat)
IF(stat==0) THEN
  print *, "File read complete"
ELSE
   PRINT *, "Err.."
END IF
END PROGRAM file

Вывод:

/home/file.f90|7|Error: Syntax error in OPEN statement

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

В операторе open управление осуществляется с помощью спецификаторов .В постановке вопроса мы видим попытку указать три: единицу, к которой нужно подключиться, имя файла и iostatus.

Для всех спецификаторов, кроме единицы, необходимо предоставить их в виде SPECIFIER=....Если блок является первым в списке, unit= является необязательным.

Таким образом, в этом случае мы должны иметь

OPEN(20,file="file.txt",iostat=stat)  ! Optionally, (unit=20, ...)

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

0 голосов
/ 28 февраля 2019

Заявление:

OPEN(25,"file.dat",iostat=stat) неверно, оно должно читаться следующим образом: OPEN(25,FILE="file.dat",iostat=stat)

Из стандарта:

Syntax of the OPEN statement

R1204 open-stmt is OPEN ( connect-spec-list )

R1205 connect-spec is [ UNIT = ] file-unit-number
  or ACCESS = scalar-default-char-expr
  or ACTION = scalar-default-char-expr
  or ASYNCHRONOUS = scalar-default-char-expr
  or BLANK = scalar-default-char-expr
  or DECIMAL = scalar-default-char-expr
  or DELIM = scalar-default-char-expr
  or ENCODING = scalar-default-char-expr
  or ERR = label
  or FILE = file-name-expr
  or FORM = scalar-default-char-expr
  or IOMSG = iomsg-variable
  or IOSTAT = stat-variable
  or NEWUNIT = scalar-int-variable
  or PAD = scalar-default-char-expr
  or POSITION = scalar-default-char-expr
  or RECL = scalar-int-expr
  or ROUND = scalar-default-char-expr
  or SIGN = scalar-default-char-expr
  or STATUS = scalar-default-char-expr
...