2014-09-24 2 views
3

У меня есть код FORTRAN, который создает .dll, который вызывается из нескольких разных проектов. В некоторых случаях я хочу записать вывод в файл .txt, а в других случаях вывод передается из .dll, в зависимости от проекта, который его вызывает. То, что я ищу, - это способ обработать инструкцию WRITE то же самое в любом случае. То есть, я искал что-то вродеНазначение номера модуля ввода/вывода переменной строки

SUBROUTINE MYPROGRAM(PROJECTFLAG,MYSTRING) 

IF (PROJECTFLAG.EQ.1) THEN 
    OPEN(1,FILE='RESULTS.TXT') 
ELSEIF (PROJECTFLAG.EQ.2) THEN 
    OPEN(1,MYSTRING) !THIS SYNTAX DOES NOT WORK 
ENDIF 

... 

WRITE (1,*) OUTPUTDATA 

END SUBROUTINE 

Как я уже отмечал, синтаксис, который у меня выше, не работает. Возможно ли использовать OPEN переменную для WRITE, например, или вы можете только OPEN файлов?

Я знаю, что я мог пошевелить, если блок вниз, и сделать что-то вроде

IF (PROJECTFLAG.EQ.1) THEN 
    WRITE(1,*) OUTPUTDATA 
ELSEIF (PROJECTFLAG.EQ.2) THEN 
    WRITE(MYSTRING,*) OUTPUTDATA 
ENDIF 

но код в реальном проекте, очевидно, гораздо более сложным, и моя цель состоит в том, чтобы иметь такое же WRITE заявления используется , независимо от того, где я хочу записать данные.

ответ

3

Нет, это невозможно. Компилятор должен знать, является ли оператор записи для внутреннего ввода-вывода или внешнего ввода-вывода. В первом случае вы производите целое число (номер единицы), в другом случае вы указываете строку символов.

Кроме того, вы не можете написать open строку символов.

Возможно, вы могли бы написать общую функцию и называть ее либо номером устройства, либо строкой?

+0

Спасибо. Я провел еще несколько исследований после того, как разместил Q, и нашел [этот сайт для компиляторов Intel] (https://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/fortran -mac/GUID-A4E25114-C10A-486E-B835-DEA35B371472.htm), в котором точно указано, что у вас есть. Написание общей функции может работать, я буду смотреть на это. – GeneralMike

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