问题描述
在 Unix 中使用 Fortran90...
我有一个程序需要从文件“input-deck.par
”中读取输入参数。这个文件名目前是硬编码的,但我想使用不同的输入文件(input-deck01.par
、input-deck02.par
、input-deck03.par
等)运行多次运行,所以我已经设置代码执行简单的“read(*,*) inpfile
”,允许用户在运行时直接输入此文件的名称,以便稍后编写脚本。
这可以很好地交互。如果我执行它要求输入文件名的程序,您输入它并接受文件名,打开文件,程序从该文件中获取参数。
问题在于编写此脚本。我尝试使用“<
”管道命令编写脚本,因此:
myprog.e < input-deck01.par
但我收到一条错误消息:
Fortran runtime error: Cannot open file '----------------': No such file or directory
如果我在输入行之后打印文件名,它会打印文件名是 '----------------
'(我将变量初始化为 16 个字符,因此我认为是 16 个连字符)
似乎“<
”管道没有正确传递键盘输入。我试过在文件名周围使用空格和引号(各种组合),但错误是一样的。
有人可以帮忙吗?
(请保持温和——这是我在 SO 上的第一篇文章,Fortran 不是我的主要语言......)
解决方法
Fortran 能够读取命令行参数。一个简单的例子是
program foo
implicit none
character(len=80) name
logical available
integer fd
if (command_argument_count() == 1) then
call get_command_argument(1,name)
else
call usage
end if
inquire(file=name,exist=available)
if (.not. available) then
call usage
end if
open(newunit=fd,file=name,status='old')
! Read file
contains
subroutine usage
write(*,'(A)') 'Usage: foo filename'
write(*,'(A)') ' filename --> file containing input info'
stop
end subroutine usage
end program foo
您只需将文件导入可执行文件即可
% foo input.txt