使用C ++ Streams读取Fortran记录格式的文件

时间:2011-09-09 07:43:40

标签: file-io stream

我正在寻找一种方法来在C ++中镜像fortran read(*,*)功能,同时阅读fortran格式的文件。我很熟悉,并希望使用类似语法的流,但我不知道如何编写自己的/利用流来做我需要的。我的文件包含如下行:

'Version' '5.3'
'This set has 1 member'
'Variable','nlo','EvolCode'
'list',1,1
1.E-05,1.,1.25,10000000.
0.00949 0.00208 -8.77372 0.89445 0.00000 0.00000 0.43318 0.89446

正如你所看到的,我必须处理不同的分隔符(换行符,空格和逗号)以及确保在读取字符串时它尊重引号并“忘记它们”(即它们不会结束)作为结果字符串的一部分)。

在fortran中你会写出类似的东西:

read(*,*) dummyString, versionString
read(*,*) descriptoinString
read(*,*) type, order, code
read(*,*) listType, number, repeats
read(*,*) double1, double2, double3, double4
read(*,*) a1, a2, a3, a4, a5, a6, a7, a8

而得到的C ++将是:

stream >> dummyString >> versionString;
stream >> descriptoinString
stream >> type >> order >> code
stream >> listType >> number >> repeats
stream >> double1 >> double2 >> double3 >> double4
stream >> a1 >> a2 >> a3 >> a4 >> a5 >> a6 >> a7 >> a8

从我使用stringstream的基本测试中,它不能接受多个分隔符并保留引号。

最佳行动方案是什么?

1 个答案:

答案 0 :(得分:0)

我设法通过实际利用Fortran来解决这个问题。它是有道理的,因为Fortran可以相对轻松地读取文件(并以类似流的方式),并且这摆脱了能够读取封装在引号中的字符串的大问题。为了提供更全面的包装,我还使用fortran文件单元读取文件。

有关完整实施的信息,请参阅here