C++ C++;相当于Fortran名称列表

C++ C++;相当于Fortran名称列表,c++,data-structures,file-io,fortran,dataformat,C++,Data Structures,File Io,Fortran,Dataformat,我的问题和你的几乎一样 P>主要区别是我使用C++ + 17,想知道是否有C++ C++的习惯用法来解决这个问题。而且没有可移植的方法来实现这一点 如果要实现类似的构造,需要一些通用的解析函数来处理istream上的行: 它将读取行并忽略“!”后面的任何内容 它将读取第一个“&”后面的名称,以查看它是否与预期的名称匹配 当在一行中遇到唯一的“/”时,它将停止读取 它将解析中间的每一行,找到一个包含变量名称的字符串、“=”,以及一个包含相等运算符右侧值的字符串,并将这两个字符串存储在一个数组中

我的问题和你的几乎一样


<> P>主要区别是我使用C++ + 17,想知道是否有C++ C++的习惯用法来解决这个问题。而且没有可移植的方法来实现这一点

如果要实现类似的构造,需要一些通用的解析函数来处理
istream
上的行:

  • 它将读取行并忽略
    “!”
    后面的任何内容
  • 它将读取第一个
    “&”
    后面的名称,以查看它是否与预期的名称匹配
  • 当在一行中遇到唯一的
    “/”
    时,它将停止读取
  • 它将解析中间的每一行,找到一个包含变量名称的字符串、
    “=”
    ,以及一个包含相等运算符右侧值的字符串,并将这两个字符串存储在一个数组中
对于临时读取,您可以调用解析函数将
istream
行转换为
map
。然后,您将访问映射以初始化变量。一种简单而强大的方法是使用
stringstreamsst(my_map[“variable name]”);sst>>我的_变量

如果名称列表或多或少地对应于
结构
X
,那么习惯用法就是重载
友元istream&操作符>>(istream&,X&)。然后,这个重载提取器将像在特殊情况下一样初始化成员变量

当然,我稍微简化了算法,因为您还需要处理输入文件中的错误:如果缺少预期的变量,您该怎么办?如果读取的值与目标变量不兼容,该怎么办

如果你将FORTRAN代码移植到C++,你必须使用NAMELIST来避免中断,这可能是一种可移植的方式。p>

但是如果它只是你的习惯,并且文件格式不是强制性的,那么你可以考虑使用现有的许多库中的一个来读写这个格式(链接库中列出了22个库)。优点是,您不必重新发明轮子,可以与许多其他语言进行互操作,而且json似乎更适合未来

> P> C++中没有FORTRAN的等价性。而且没有可移植的方法来实现这一点

如果要实现类似的构造,需要一些通用的解析函数来处理
istream
上的行:

  • 它将读取行并忽略
    “!”
    后面的任何内容
  • 它将读取第一个
    “&”
    后面的名称,以查看它是否与预期的名称匹配
  • 当在一行中遇到唯一的
    “/”
    时,它将停止读取
  • 它将解析中间的每一行,找到一个包含变量名称的字符串、
    “=”
    ,以及一个包含相等运算符右侧值的字符串,并将这两个字符串存储在一个数组中
对于临时读取,您可以调用解析函数将
istream
行转换为
map
。然后,您将访问映射以初始化变量。一种简单而强大的方法是使用
stringstreamsst(my_map[“variable name]”);sst>>我的_变量

如果名称列表或多或少地对应于
结构
X
,那么习惯用法就是重载
友元istream&操作符>>(istream&,X&)。然后,这个重载提取器将像在特殊情况下一样初始化成员变量

当然,我稍微简化了算法,因为您还需要处理输入文件中的错误:如果缺少预期的变量,您该怎么办?如果读取的值与目标变量不兼容,该怎么办

如果你将FORTRAN代码移植到C++,你必须使用NAMELIST来避免中断,这可能是一种可移植的方式。p>

但是如果它只是你的习惯,并且文件格式不是强制性的,那么你可以考虑使用现有的许多库中的一个来读写这个格式(链接库中列出了22个库)。优点是,您不必重新发明轮子,可以与许多其他语言进行互操作,而且json似乎更适合未来

什么是名字列表?它是一个文件输入,链接的问题有一个例子哦,很有趣。被接受的答案对你来说有用吗?是的,但我希望会有一种更优雅的c++方式来处理这个问题。你的名字列表中组合的数据只是一个不相关值的临时集合,或者它可以被视为一种结构化对象吗?什么是名字列表?它是一个文件输入,链接的问题有一个例子哦,有趣。这不是一个被接受的答案吗?它会,但是我希望有一个更优雅的C++处理方式,即在你的名字中组合的数据只是一个非相关的值的自组织集合,或者它可以被看作是一种结构化的对象?有没有被认为是C++标准的JSON库。如果没有,是否有一款以其对新用户最简单的功能而闻名。@DanielMarchand有一个非常好的设计,使其几乎像标准库中的容器一样易于使用。或者,只有标题。我还没有找到最近的,但是RAPIDJSON是一个很长的时间最快的解析器(在基准图中,JSON是现代C++出现在Nlohmann下)。Json看起来不错,但是它似乎不支持Fortran NealListReal.很多的评论。但也有一些变通方法,比如一些可以忽略的注释字段(或者,如果有一天这些注释可以为应用程序增加价值,则可以进行处理)。当然,如果有评论的话