我有一个包含我想要读取的变量名称的字符串,我想将此字符串传递给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
这可能吗?
答案 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
无法使用格式化输入/输出。