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
в этом случае.