【发布时间】:2021-09-18 23:11:39
【问题描述】:
在 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 不是我的主要语言......)
【问题讨论】:
-
如果我理解你的描述是正确的,你的程序期望从
stdin读取输入文件的name,而不是文件的内容。试试echo 'input-deck01.par' | myprog.e。<是输入重定向,而不是管道。----------------是文件input-deck01.par的第一行吗? -
您没有使用正确的管道语法。您的 cmdline 获取文件 input-deck01.par 并发送文件中的所有行,就像在控制台中键入一样。你想要什么(我想到了,现在不能测试)是 echo 'input-deck01.par' | myprog.e
-
啊,我明白了。是的,文件以“----------”开头。我将第一行更改为一些随机字符串,并且它在错误中重现,因此当我想要输入文件名时它确实在读取内容。尝试建议的实际、正确的管道命令效果很好......谢谢你们!