string - 如何从输入文件中设置 Fortran 变量?
问题描述
我有一个这样的输入文件:
x = 1.5
y = 2.8
z = 9.4
x = 4.2
我想设置变量的值。所以,我这样做:
read(1,'(A)', IOSTAT=io) str
if (io > 0) then !error
write(*,*) 'Check input. Something was wrong'
exit
else if (io < 0) then !EOF
exit
else !read new value
do i=1,len_trim(str)
if (str(i:i) == "=") str(i:i) = " " !replase "=" with spaces
end do
read(str, *) curvar, curval
SELECT CASE (curvar)
CASE ("x")
x = curval
CASE ("y")
y = curval
CASE ("z")
z = curval
END SELECT
是否可以将名称存储在“curvar”中的变量设置为与“curval”相同的值而不使用“CASE SELECT”?我想存在一些更简单的方法。我需要它,因为我的程序将有比三个多得多的变量。
解决方案
如果您可以在开头和结尾稍微更改文件,则可以使用namelist。参见,例如:http: //jules-lsm.github.io/vn4.2/namelists/intro.html
&namelist_name
x = 1.5
y = 2.8
z = 9.4
/
用一个简单的 Fortran 代码
namelist /namelist_name/ x, y, z
read(unit, nml = namelist_name)
否则答案是否定的,不可能只从配置文件中为具有特定名称的变量赋值,而不解析名称并使用一些条件或选择案例或指针数组或类似的东西。Fortran namelist I/O 这样做是为了您的方便。
或者有一些库可以做类似的工作并允许各种形式的配置文件。这个答案在命令行参数的上下文中讨论了这些选项。各种形式的配置文件有各种库,但例如天气预报和气候预测模型,通常只使用名称列表。对于我的模型,我编写了自己的解析器,它为结构化数据提供了更多选项,但它没有记录在案,并且更难用于其他人。
推荐阅读
- javascript - 检查连接的用户是否与 Javascript 变量的值匹配
- python - PyQt5 在 menuBar 中自定义 QAction 的样式
- go - 无法获得额外的信息。来自 gin-jwt 中的登录响应
- ruby - 如何在同一行显示文本?
- python - 如何在 Python 中为 Json 对象添加 ""Users" : "?
- javascript - React 和 Redux 丢失状态
- javascript - Firebase 使用电子邮件登录失败且未提供错误
- java - 如何让按钮用完 BorderLayout 中的所有空间,不留空白?
- selenium - 谷歌仍然支持硒测试谷歌地图吗?
- node.js - 我无法在 Angular7 中使用“ng new myworkspace”命令创建工作区。可能是什么原因