发现这个lib用于csv解析https://github.com/ben-strasser/fast-cpp-csv-parser,我试图将数据转换为2d数组。我有一个可用性问题,因为lib是以特定方式构建的
bool read_row(ColType1&col1, ColType2&col2, ...);
从github中提供的示例开始,我提出了:
main() {
double** data = new double*[5];
for (int i = 0; i < 4; ++i) {
data[i] = new double[5];
}
io::CSVReader<5> in("c:/code/test.txt");
//in.read_header(io::ignore_extra_column, "vendor", "size", "speed");
double a; double b; double c; double d; double e;
int n = 0;
while (in.read_row(a, b, c, d, e)) {
printf("time elapse: %f\n", c);
data[n][0] = a;
data[n][1] = b;
data[n][2] = c;
data[n][3] = d;
data[n][4] = e;
n++;
}
for (int i = 0; i < 4; i++){
for (int j = 0; j < 5; j++) {
printf("data %f\n", data[i][j]);
}
}
}
这可以完成这项工作,通过4行5列,例如我必须为每列提供一个变量。如何修改代码以获取数千列?是否有更好/更简单的方法将csv处理成2d数组?我的目标是速度,我知道确切的csv输入格式,行数和列数,所以不需要检查。
答案 0 :(得分:1)
您说输入的CSV文件有数千列。您链接的库不能有效地支持这样的用例(毕竟,几乎没有人拥有千列CSV文件)。
一个简单且仍然很快的方法是一次读取一行(std::getline()
或fgets()
),然后明确地用逗号分割。