0

我有一个字符串,其中包含我要读取的变量的名称,我想将此字符串传递给 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

这可能吗?

4

2 回答 2

1

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

于 2012-06-05T11:58:51.077 回答
1

您可以查看“NAMELIST”I/O,它可能会满足您的需求。通常,namelist IO 存在各种问题,而且人们经常求助于编写自己的自定义 IO 例程。但是,如果它足以满足您的需求,那么它很容易使用。例如


program nmltest
  implicit none
  real :: x
  integer :: y
  namelist /mynml/ x, y
  x = 4711
  y = 42
  write(*, mynml)
end program nmltest
于 2012-06-05T11:43:48.460 回答