我以前在数据中读取的数据长度都相同,我在这里找到答案。
数据:
0.001 0.001 0
0.001 0.001 0
代码:
#include <iostream>
#include <fstream>
std::vector<double> heights, times, stdDevs;
std::ifstream data ("inputData.dat");
std::string line;
double var1, var2, var3;
if (data.is_open())
{
while (getline(data,line))
{
std::istringstream(line) >> var1 >> var2 >> var3;
heights.push_back(var1);
times.push_back(var2);
stdDevs.push_back(var3);
}
}
但是,现在我有不同列长度和更多列的数据。 新数据:
0.001 0.001 0 0.002 0.000 0.001 0 0.002
0.001 0.001 0.002 0.001 0.001 0 0.002
0.002 0.003 0.001 0.002 0 0.003
0.003 0.005 0.003 0 0.004
我的想法:
是否所有人都有任何建议,或者我可以获得一些如何阅读如此多的循环列的帮助?感谢。
编辑:我尝试了这个以确定整体尺寸,因为每一栏都以某些内容开头:
if (data.is_open())
{
getline(data,line);
for(unsigned int k = 0; k < line.length(); ++k)
{
if(!isspace(line[k])){ j++; } //How many columns
}
while (getline(data,line))
{
i += 1; //How many rows
}
现在我要尝试我最大的想法。
答案 0 :(得分:0)
首先,为了提高效率,最好在一次扫描中完成所有读数。你可以为此组织一个getline()循环。
1)如果第一行定义了整个表的最大列数,则可以读取它以检测此数字并定义正确的数组。
2)你需要决定在没有值的情况下对数组元素放什么。如果所有预期的数字都是>例如,您可以使用-1.0或DBL_MAX。
3)&#34;确定每列中的数据长度&#34; - 你为什么需要这个?假设这些都是双值,你可以在双精度数组的元素中读取它们 - 你不需要临时变量。