从文本文件中提取不均匀的数据

时间:2017-02-14 19:45:00

标签: c++ string file

我有一个数据文件,其中包含每行九个不同变量的值:xyzv_xv_y,{ {1}},v_zmID。我正在编写一个程序,只从数据文件中提取Vxy值。我对这种类型的过程比较陌生,我遇到了这样做的问题,因为这些值的长度并不总是相同。这里是一部分数据文件的示例(仅zxy列:

z

请注意,在大多数情况下,每个数字的长度是11个空格,但情况并非总是如此。我写的代码在这里:

2501.773926 1701.783081 211.1383057

1140.961426 4583.300781 322.4959412 

1194.471313 5605.764648 1377.315552 

506.1424866 6037.965332 1119.67041  

213.5106354 5788.785156 2340.610352 

59.43727493 5914.666016 2357.921143 

1223.028564 4292.818848 3007.292725 

4445.61377  3684.48999  2903.169189 

5649.732422 4596.819824 2661.301025 

5741.396973 5503.06543  2412.082031 

4806.246094 5587.194336 2676.126465 

4855.521973 5482.893066 2743.014648 

5190.890625 5399.349121 1549.1698   

代码显然失败,因为每个值的长度不一致。有谁知道另一种方法来实现这一目标?也许除了子串和跨越特定长度的字符之外的其他东西,但是可以将值抓取到白色空间的东西?任何帮助,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

我注意到您已使用ifstreamgetline阅读该文件。你为什么要回到将这些行切成N个字符的块并atof为它们?我的意思是,iostream可以读写整数,双精度等,最好见cincout的例子。

有一个istringstream课程可以帮助你:

std::istringstream input(line); // line is std::string from getline()
double x,y,z;
if(input >> x >> y >> z) // just this! and it's already a simple error check
    ; // do something with x,y,z
else
    ; // handle the error

它应该可以工作,因为你已经有逐行读取,并且因为数据是由空格分隔的,>>运算符默认忽略空格。

仅供参考:istringstream