【问题标题】:Assigning I/O Unit Number to a String Variable将 I/O 单元号分配给字符串变量
【发布时间】:2014-11-19 00:59:08
【问题描述】:

我有一些 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

正如我所指出的,我上面的语法不起作用。 是否可以像这样为WRITEing 提供OPEN 变量,或者您只能使用OPEN 文件?

我知道我可以将我的 if 块向下移动,并执行类似的操作

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

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

【问题讨论】:

    标签: fortran


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。发布 Q 后,我进行了更多研究,发现this site for Intel compilers,它准确地说明了你所拥有的。编写一个通用函数可能会起作用,我会研究一下。
    猜你喜欢
    • 2019-02-08
    • 1970-01-01
    • 2013-11-13
    • 2019-02-20
    • 2013-02-23
    • 2013-06-08
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多