使用变量在FORTRAN中打开输出文件

时间:2012-04-04 02:13:34

标签: string variables fortran

我有一段FORTRAN代码:

C --------------------------------------------
      CALL READIN_HYD
      CALL READIN_CONFIG
      CALL READIN_FORCE
      CALL READIN_STEPPER
C --------------------------------------------

      OPEN(11,FILE='EVO_0wall.dat')

我正在尝试用我可以从输入参数输入的东西替换硬编码文件名(EVO_0wall.dat)(这些参数都由子例程readin_hyd等读取)。

我正在尝试做这样的事情:

  CHARACTER*30 OUTFILE

  WRITE(*,*) 'OUTPUT FILE'
  READ(*,*)   OUTFILE
  WRITE(*,*) 'OUTPUT FILE: ',OUTFILE

我已将其添加到READIN_CONFIG子例程中。回来后,我用

替换
  OPEN(11,FILE=OUTFILE,STATUS='NEW')

在主例程中希望如果输入文件I pipe in包含'EVO_0wall.dat'(带撇号)在适当的位置,它会说出与之前相同的东西。

如果我运行代码,所有其他输入变量都被正确读取,并且数据输出正确 - 但是,它创建并将输出放在一个奇数文件中,没有扩展名和一个名称的破碎字符(例如,度使用.dat扩展名重命名文件让我打开它,并且其中的数据是正确的。(编辑:实际上,变量OUTFILE在主函数中变为奇数字符时,如果我试着简单地打印它的值,那么我猜它不仅仅是OPEN语句中的错误语法)

FORTRAN是否有某种方法可以处理这些字符串之间缺少的字符串?我担心我是FORTRAN的新手(这是我正在调整的其他人的代码),并且我不太确定我缺少什么。任何帮助将不胜感激!

谢谢!

3 个答案:

答案 0 :(得分:2)

作为@ M.S.B。的建议的替代方案,您可以使用trimadjustl,如下所示:

   implicit none
   character*99 :: outf

   outf='outf.outf'

   open(1,file=trim(adjustl(outf)))
   write(1,*)'foobar',42
   close(1)

   end

此处adjustl确保没有前导空格,trim修剪尾随空格。只要outf变量只包含合法字符[我建议仅使用基本ASCII],这应该有效。

另外,如果我将status='new'添加到open语句,它会在运行时失败(至少gfortran 4.4.3)如果文件已经存在。如果您确实希望确保不覆盖现有文件,则需要先inquire

答案 1 :(得分:1)

那似乎没问题。以下read语句应该允许您省略撇号:

read (*, '(A)' )  outfile

outfile输出值的“echo”写入语句是什么?

答案 2 :(得分:0)

我的FORTRAN生锈了,但我认为{a}可能代表十六进制A或十进制10,这是一个换行符。这就是你在OUTFILE名称中读到的内容。

您可能需要修剪所有空格的OUTFILE