用C++读取表格中的数字数据,代码行数最少

Read tabulated numeric data in C++ with the minimum number of code lines

本文关键字:代码 数据 数字 读取 C++ 表格      更新时间:2023-10-16

习惯了Python、R或Matlab等脚本语言中输入/输出操作的简单性,我发现在C++中读取表格数字数据等简单操作会变得不必要的复杂。

所以,我想知道C++中最短的代码片段是什么(不一定是STD库,其他库也可以),它可以读取任意大的数字、制表符分隔的数据表(浮点),格式适合以后的数学操作(统计等)?

如果您希望数据位于可以使用行和列索引访问的大型2D矩阵中,我更喜欢字符串流和istream_iterator方法。

vector<vector<double>> data;
ifstream is("pathtoyourfile.txt");
for (string row; getline(is, row); ) {
    stringstream ss(row);
    data.push_back(vector<double>(istream_iterator<double>(ss), istream_iterator<double>()));
}
struct Record {
    int f1;
    float f2;
    char f3[20];
};
std::vector<Record> recs;
for (string line; getline(cin, line); ) {
    Record rec;
    if (3 == sscanf(line.c_str(), "%d,%f,%20s", &rec.f1, &rec.f2, &rec.f3)) {
        recs.push_back(rec);
    }
}

如果你想要一个完全通用的字符串向量,你可以看看Boost的字符串算法split(),然后输入你的分隔符。如果可能的话,我更喜欢结构化的方法。

另一种方法是让Python来完成这项工作:您可以在C++程序中嵌入一个Python解释器,并使用类似numpy.loadtxt()的东西将数据加载到NumPy数组中,然后从C++访问它。我在这里做相反的操作:https://github.com/jzwinck/pccl/blob/master/NumPyArray.hpp

相关文章: