2017-12-02 1 views
0

fand diese Lib für CSV-Parsing https://github.com/ben-strasser/fast-cpp-csv-parser und ich versuche, die Daten in 2D-Array zu bekommen. Ich habe ein Problem mit useability als die lib in einer bestimmten Art und Weise aufgebaut istC++ Fast-cpp-CSV-Parser in Array

bool read_row(ColType1&col1, ColType2&col2, ...); 

von Beispiel in Github präsentiert Going kam ich mit:

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]); 
    } 
}  

}

Dies macht den Job , geht durch 4 Zeilen mit 5 Spalten und als Beispiel musste ich für jede Spalte eine Variable präsentieren. Wie ändert man den Code, um Tausende von Spalten zu nehmen? Gibt es eine bessere/einfachere Möglichkeit, CSV in 2d-Array zu verarbeiten? Mein Ziel ist Geschwindigkeit, ich kenne genaue Formatierung von CSV-Eingabe, Anzahl von Zeilen und Spalten, also keine Überprüfungen benötigt.

Antwort

0

Sie sagen, Ihre Eingabe-CSV-Dateien haben Tausende von Spalten. Die Bibliothek, die Sie verknüpft haben, unterstützt einen solchen Anwendungsfall nicht effektiv (schließlich hat fast niemand tausendspaltige CSV-Dateien).

Eine einfache und immer noch schnelle Methode besteht darin, jeweils eine Zeile zu lesen (std::getline() oder fgets()), dann explizit durch Kommas zu trennen.