将FORTRAN READ参数传递给字符串

时间:2012-06-05 11:34:42

标签: fortran

我有一个包含我想要读取的变量名称的字符串,我想将此字符串传递给read函数。这可以让我更改我读取的变量的名称,只需使用变量名称更改向量。 一个例子可能是:

PROGRAM test
implicit none

  integer :: no, age
  character(len=20) :: myname, vars

vars='no, myname, age'
read(*, '(i4,a20,i4)') vars
print*, no, myname, age 

END PROGRAM test

这可能吗?

2 个答案:

答案 0 :(得分:1)

您可以查看“NAMELIST”I / O,这可能会影响您的目标。通常,名单IO有各种各样的问题,人们常常依靠编写自己的自定义IO例程。但如果它足以满足您的需求,那么使用起来非常简单。 E.g。


program nmltest
  implicit none
  real :: x
  integer :: y
  namelist /mynml/ x, y
  x = 4711
  y = 42
  write(*, mynml)
end program nmltest

答案 1 :(得分:0)

Fortran是一种编译语言。 READ语句很难(不可能)在运行时从字符串列表中提取变量地址。这就是为什么,正如janneb所指出的,Fortran提供NAMELIST运算符,它自Fortran 90以来成为语言标准的一部分(一些Fortran 77也支持名单,但它是非标准的,编译器之间没有保证兼容性) 。就像这样使用:

...
NAMELIST /vars/ no, age, myname
...
READ(*, NML=vars)
...

输入应该是这样的:

! Input can contain comments starting with exclamation marks

! And blank lines too
&vars
 no = 12,
 myname = 'sometext'/

NAMELIST无法使用格式化输入/输出。