我有一些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
语句,无论我想将数据写入何处。
答案 0 :(得分:3)
不,这是不可能的。编译器必须知道write语句是用于内部I / O还是用于外部I / O.在第一种情况下,您提供一个整数(单位编号),在另一种情况下,您提供一个字符串。
另外,你不能open
一个字符串。
也许您可以编写一个泛型函数并使用单元号或字符串调用它?