vms fortran обозначение единицы чтения / записи

Передо мной была поставлена ​​задача перенести старый (примерно 1986 г.) код VAX VMS FORTRAN на C++, и я столкнулся с небольшим камнем преткновения. Следующие две строки кода являются частью вычисленного перехода.

WRITE(2'N) (Y (I), I = 1, 5)
READ(2'N, ERR = 48) (Y (I), I = 1, 5)

Моя проблема в обозначении устройства "2'N", если это действительно так. "N" - целочисленная переменная, передаваемая подпрограмме. Я довольно много гуглял по этому шаблону и читал, какую документацию для VMS я смог найти, но не смог найти никакой информации относительно этого шаблона с апострофом. Я понимаю подразумеваемый цикл do, который следует за инструкциями write и read, но я не понимаю, "куда" он пишет и читает. Просмотр остальной части кода на языке FORTRAN не обнаруживает оператора open =2, который может быть связан с этим вызовом, поэтому, скорее всего, это не файл на диске, но я не уверен. Я надеюсь, что кто-то здесь сможет вернуться в их память и помочь мне.

1 ответ

Решение

Если я правильно прочитал руководство VMS VAX FORTRAN, 'N указывает на N -я запись в блоке 2, От кл. 7.1.1.6 "Спецификатор записи":

Спецификатор записи идентифицирует номер записи, к которой вы хотите получить доступ в файле с относительной организацией. Это принимает одну из следующих форм:

REC = r
'r

р
Числовое выражение со значением, представляющим позицию в файле прямого доступа к записи, к которой осуществляется доступ. [...]

Обратите внимание, что это не соответствует стандартам Фортран! Большинство компиляторов не примут этот синтаксис. Вместо этого используйте REC=...:

WRITE(2, REC=N) (Y (I), I = 1, 5)
READ(2, REC=N, ERR = 48) (Y (I), I = 1, 5)

Файл в блоке 2 не должно быть открыто открыто. Это указано в том же документе, кл. 7.1.1.2 "Спецификатор логической единицы":

Номер логической единицы назначается файлу или устройству одним из двух способов:

  • Явно через оператор OPEN [...]
  • Неявно системой [...]

В последнем случае используемое имя файла определяется в Cl. 4.2.2.1 "Логические имена FORTRAN" в руководстве пользователя VAX Fortran:

VAX FORTRAN предоставляет предопределенные логические имена в следующей форме:

FOR0nn[.DAT]

[...]

Например:

   WRITE (17,200)

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

Большинство современных компиляторов создадут файл fort.nn в этом случае.

Другие вопросы по тегам