让我先向你展示我正在阅读的数据的结构(否则很难传达我想要的内容):
Mode: 1 2 3
Frequency: -307.68 57.11 82.39
Force Cnst: 0.6182 0.0089 0.0283
Red. Mass: 11.0830 4.6138 7.0866
IR Active: YES YES YES
IR Intens: 17.343 7.786 0.017
Raman Active: YES YES YES
X Y Z X Y Z X Y Z
H -0.093 -0.046 -0.050 0.002 -0.268 0.324 -0.084 -0.209 0.128
C -0.072 -0.019 -0.063 0.003 -0.159 0.195 -0.048 -0.148 0.087
C -0.001 -0.046 -0.072 0.007 -0.001 0.001 -0.001 -0.229 0.139
H -0.001 -0.120 -0.089 0.006 -0.001 0.001 -0.001 -0.345 0.213
C 0.073 -0.023 -0.057 0.003 0.158 -0.194 0.047 -0.151 0.090
H 0.096 -0.052 -0.043 0.002 0.266 -0.322 0.083 -0.214 0.134
............................................................................
因此,我想将每个Mode的数据存储在它自己的struct对象(nmode)下,并将每个nmode存储在一个vector中。但是,正如您所看到的,每个Mode的数据都是以这种垂直格式输出的(我无法更改此文件的格式)。
目前,我的解决方案是告诉程序一次获取三个模式的数据,通常使用ifstream(我将在下面发布一个例子)。由于显而易见的原因,这个解决方案在任何不能被3整除的模式数量上都会中断。因此,我的问题是“让程序从这些垂直块中读取任意数量模式的数据的最佳方法是什么?”
以下是当前的解决方案(如果模式数不能被3整除,则该解决方案将失败),以及一个失败的案例:
第一次
1条答案
按热度按时间enyaitl31#
不幸的是,没有快速的答案。
你真的需要逐行解析......
这将导致大量的代码。你可以通过编写函数来解析类似的行来优化。但是我们在这里使用完整的方法:
请参阅: