2011-09-09 20 views
0

我正在寻找一种方法来在读取fortran格式的文件时在C++中对Fortran read(*,*)功能进行镜像。我很熟悉,并希望使用类似语法的流,但我不确定如何编写我自己的/使用流来做我需要的。我有一个线,如文件:使用C++ Streams读取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的基本测试,它不能接受多个分隔符,并保持引号。

什么是最佳行动方案?

+0

好像C++中的流对工作很好。 –

回答

0

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

有关完整的实现方法,请参阅here