将I / O单元号分配给字符串变量

时间:2014-09-24 13:44:20

标签: fortran

我有一些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块,并执行类似

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

但实际项目中的代码显然要复杂得多,我的目标是使用相同的WRITE语句,无论我想将数据写入何处。

1 个答案:

答案 0 :(得分:3)

不,这是不可能的。编译器必须知道write语句是用于内部I / O还是用于外部I / O.在第一种情况下,您提供一个整数(单位编号),在另一种情况下,您提供一个字符串。

另外,你不能open一个字符串。

也许您可以编写一个泛型函数并使用单元号或字符串调用它?