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

Fortran 将I/O单元编号分配给字符串变量,fortran,Fortran,我有一些FORTRAN代码,可以创建从两个不同项目调用的.dll。在某些情况下,我希望将输出写入.txt文件,而在其他情况下,输出将从.dll传回,具体取决于调用它的项目。我要寻找的是一种处理语句的方法,无论在哪种情况下都是一样的。也就是说,我正在寻找类似 SUBROUTINE MYPROGRAM(PROJECTFLAG,MYSTRING) IF (PROJECTFLAG.EQ.1) THEN OPEN(1,FILE='RESULTS.TXT') ELSEIF (PROJECTFLAG.E

我有一些FORTRAN代码,可以创建从两个不同项目调用的.dll。在某些情况下,我希望将输出写入.txt文件,而在其他情况下,输出将从.dll传回,具体取决于调用它的项目。我要寻找的是一种处理
语句的方法,无论在哪种情况下都是一样的。也就是说,我正在寻找类似

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
IF (PROJECTFLAG.EQ.1) THEN
  WRITE(1,*) OUTPUTDATA
ELSEIF (PROJECTFLAG.EQ.2) THEN
  WRITE(MYSTRING,*) OUTPUTDATA
ENDIF
正如我所指出的,我上面的语法不起作用可以这样
打开
一个变量进行
写入
吗,还是只能
打开
文件?

我知道我可以移动我的if块,然后做类似的事情

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
IF (PROJECTFLAG.EQ.1) THEN
  WRITE(1,*) OUTPUTDATA
ELSEIF (PROJECTFLAG.EQ.2) THEN
  WRITE(MYSTRING,*) OUTPUTDATA
ENDIF

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

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

此外,您不能
打开
字符串


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

谢谢。在我发布了Q之后,我做了更多的研究,我发现,这正是你所拥有的。编写一个泛型函数可能会奏效,我将对此进行研究。