Быстрый и простой анализ CSV в C++

Я пытаюсь разобрать простой CSV-файл с данными в таком формате, как:

20.5,20.5,20.5,0.794145,4.05286,0.792519,1
20.5,30.5,20.5,0.753669,3.91888,0.749897,1
20.5,40.5,20.5,0.701055,3.80348,0.695326,1

Итак, очень простой файл с фиксированным форматом. Я сохраняю каждый столбец этих данных в вектор STL. Таким образом, я пытался придерживаться C++, используя стандартную библиотеку, и моя реализация внутри цикла выглядит примерно так:

string field;
getline(file,line);
stringstream ssline(line);

getline( ssline, field, ',' );
stringstream fs1(field);
fs1 >> cent_x.at(n);

getline( ssline, field, ',' );
stringstream fs2(field);
fs2 >> cent_y.at(n);

getline( ssline, field, ',' );
stringstream fs3(field);
fs3 >> cent_z.at(n);

getline( ssline, field, ',' );
stringstream fs4(field);
fs4 >> u.at(n);

getline( ssline, field, ',' );
stringstream fs5(field);
fs5 >> v.at(n);

getline( ssline, field, ',' );
stringstream fs6(field);
fs6 >> w.at(n);

Проблема в том, что это очень медленно (в каждом файле данных более 1 миллиона строк) и мне кажется несколько неэлегантным. Есть ли более быстрый подход с использованием стандартной библиотеки, или я должен просто использовать функции stdio? Мне кажется, что весь этот блок кода уменьшится до одного вызова fscanf.

Заранее спасибо!

9
задан Kyle Lynch 30 May 2012 в 10:20
поделиться