Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Io 用Fortran捕获写例程_Io_Fortran - Fatal编程技术网

Io 用Fortran捕获写例程

Io 用Fortran捕获写例程,io,fortran,Io,Fortran,我尝试!维护一组非常旧的非常大的FORTRAN代码。此代码包含分散在以下各处的WRITE语句: WRITE(NOUT,2050)DAMPING 2050 FORMAT(3X,'DAMPING =',F6.2,'%') 我希望能够控制这些WRITE语句。这样做的原因是我们需要创建一个额外的输出文件并进行一些修改,而复制这些语句将需要太多的工作。相反,我希望修改它们。。。一种方法可能是拥有自己的写入例程: WRITEF(NOUT,2050)DAMPING 2050

我尝试!维护一组非常旧的非常大的FORTRAN代码。此代码包含分散在以下各处的WRITE语句:

      WRITE(NOUT,2050)DAMPING 
2050  FORMAT(3X,'DAMPING =',F6.2,'%')
我希望能够控制这些WRITE语句。这样做的原因是我们需要创建一个额外的输出文件并进行一些修改,而复制这些语句将需要太多的工作。相反,我希望修改它们。。。一种方法可能是拥有自己的写入例程:

      WRITEF(NOUT,2050)DAMPING 
2050  FORMAT(3X,'DAMPING =',F6.2,'%')

      --------------------------------

      SUBROUTINE WRITEF(objectToWrite)
      ...
      Code to write out object
      ...
      END
另一种可能是将write语句作为参数:

      WRITEF(WRITE(NOUT,2050)DAMPING) 
2050  FORMAT(3X,'DAMPING =',F6.2,'%')

      --------------------------------

      SUBROUTINE WRITEF(characterToWrite)
      ...
      Code to write out character
      ...
      END
但不幸的是,我缺乏FORTRAN知识,无法知道这是否可行,以及如何实现它

如果将FORMAT语句交换为FORMAT字符串,可以执行以下操作

  SUBROUTINE WRITE_REAL(unit,fmt, x)
    INTEGER unit
    CHARACTER(*) fmt
    REAL x
    write(unit,fmt) x
  END


  WRITEF(NOUT, "(3X,'DAMPING =',F6.2,'%')", DAMPING) 

但我留给你看它是否有用。我有点怀疑。

第二个肯定不可能,因为write不是返回值的函数。似乎您唯一的选择是重构代码,以便在计算完成后将write语句收集到几个子例程中。感谢您的反馈,但遗憾的是,编写代码的方式不可能做到这一点-值被写入文件,然后在计算完成时被遗忘/覆盖正在运行…请注意,格式只是问题的一部分。write语句通常带有任意长度的任意类型变量列表。没有一种干净的方法可以使您自己的函数接受这样一个参数列表。你想做的可能是一个预处理器的工作。如果我能以某种方式获取format语句,而不是将其写出,那么这种方法可能会有些用处。。。减记,DAMPING@qu1ckdry否,如果要执行任何子例程来重新构造输出,并且要传递格式,则必须删除format语句并使用format字符串。没有办法通过标签IIRC分配不会有帮助。不管怎么说,格式已经过时了,可能不是正式的。