2016-05-23 3 views
3

Мне поручено перенести какой-то старый (около 1986 года) код VAX VMS FORTRAN на C++ и запустили бит камнем преткновения. Следующие две строки кода являются частью вычисленного goto.vms fortran чтение/запись единица измерения

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

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

ответ

3

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

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

REC = r 
'r 

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

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

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

файл в блоке 2 должен не быть открыт в явном виде. Это указано в том же документе, Cl. 7.1.1.2 «Логическое Тендерный Unit»:

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

  • Явное корыта открытое заявление [...]
  • Косвенно системой [...]

в последнем случае имя файла используется определено в Cl. 4.2.2.1 "FORTRAN Logical Names" of the VAX Fortran user manual:

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

FOR0nn[.DAT] 

[...]

Например:

WRITE (17,200) 

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

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

+0

Благодарим вас за это! Теперь это имеет гораздо больший смысл. Спасибо также за ссылки на руководство. В коде есть одно место, которое открыто открывает файл как unit4, «ELIBn.DAT», а в папке с файловым каталогом есть файлы размером от 1 до 9. Я могу выяснить остальное отсюда. –

Смежные вопросы