Schnellster Weg, um Daten aus einer CSV in C ++ abzurufen
Ich habe eine große CSV (ca. 75 MB) dieser Art:
1,2,4
5,2,0
1,6,3
8,3,1
...
Und ich speichere meine Daten mit diesem Code:
#include <sstream>
#include <fstream>
#include <vector>
int main()
{
char c; // to eat the commas
int x, y, z;
std::vector<int> xv, yv, zv;
std::ifstream file("data.csv");
std::string line;
while (std::getline(file, line)) {
std::istringstream ss(line);
ss >> x >> c >> y >> c >> z;
xv.push_back(x);
yv.push_back(y);
zv.push_back(z);
}
return 0;
}
Und es hat mich in dieser großen CSV (~ 75MB) gekostet:
real 0m7.389s
user 0m7.232s
sys 0m0.132s
Das ist so viel!
Kürzlich habe ich mit einem Ausschnitt aus Sublime Text einen anderen Weg gefunden, eine Datei zu lesen:
#include <iostream>
#include <vector>
#include <cstdio>
int main()
{
std::vector<char> v;
if (FILE *fp = fopen("data.csv", "r")) {
char buf[1024];
while (size_t len = fread(buf, 1, sizeof(buf), fp))
v.insert(v.end(), buf, buf + len);
fclose(fp);
}
}
Und es hat mich (ohne Daten zu bekommen) in dieser großen CSV (~ 75MB) gekostet:
real 0m0.118s
user 0m0.036s
sys 0m0.080s
Das ist ein großer Zeitunterschied!
Die Frage ist, wie ich die Daten in 3 Vektoren schneller in einem Vektor von Zeichen erhalten kann! Ich weiß nicht, wie ich es schneller machen kann als der erste Vorschlag.
Vielen Dank! ^^