2012-04-04 39 views
0

打开输出文件我有一段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') 

替换主程序,希望它会像以前一样说同样的事情,如果在输入文件我管包含“EVO_0wall.dat”(用单引号)在适当的地点。

如果我运行代码,所有其他输入变量被正确读取,并且数据输出正确 - 但是,它创建并将输出放置在一个奇数文件中,没有扩展名和字符名称(例如,程度,\“{a}和0)。使用.dat扩展名重命名文件可让我打开它,并且内部的数据是正确的(编辑:实际上,变量OUTFILE变为奇数字符函数,如果我试图简单地打印它的值,所以我猜它不只是OPEN语句中的错误语法)

有没有某种方法可以让FORTRAN处理字符串,我是FORTRAN的新手(这是别人的代码,我正在适应),我不太清楚我错过了什么,任何帮助都会很多不胜感激!

谢谢!

+2

您如何获得将read_hyd中的outfile设置回主例程中的outfile版本的值?对不起,要问的基本知识,但你知道,没有使用像参数列表或模块的东西,他们是不同的变量?我的猜测,我强调这是一个猜测,主程序中的outfile是未初始化的 – 2012-04-04 09:14:28

回答

1

这似乎没问题。下面的阅读语句应该允许你忽略撇号:

read (*, '(A)') outfile 

什么OUTFILE产值的“回声”写声明?

0

我的FORTRAN很生锈,但我认为{a}可能代表十六进制A,或十进制10,它是换行符。这就是当你读入OUTFILE名字时你会得到的。

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

1

的OUTFILE作为替代@MSB的建议,你可以使用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

+0

+1(triml(...))---这应该修复它。 – alexurba 2012-04-05 07:18:15