2016-06-06 2 views
0

У меня есть куча файлов данных мне нужно прочитать в какой-то многомерном контейнер, все из которых имеют следующий вид:Подсчет количества точек в линии от ifstream

a1,a2,a3,...,aN, 
b1,b2,b3,...,bN, 
c1,c2,c3,...,cN, 
................ 
z1,z2,z3,...,zN, 

Я знаю from this previous question что быстрый способ подсчета общего количества строк в файле может быть достигнут следующим образом:

std::ifstream is("filename"); 
int lines = std::count(std::istreambuf_iterator<char>(is), std::istreambuf_iterator<char>(), '\n'); 

Это позволяет мне знать, что г, общее число наборов данных для чтения в каждый из которых содержит N данных точки. Следующая задача состоит в том, чтобы подсчитать количество значений данных в строке, для которой я могу сделать следующее:

std::ifstream is("filename"); 
std::string line; 
std::getline(is, line); 
std::istringstream line_(line); 
int points = std::count(std::istreambuf_iterator<char>(line_), std::istreambuf_iterator<char>(), ','); 

я могу быть уверен, что каждый файл имеет одинаковое количество значений данных в каждой строке. Мой вопрос в том, есть ли более хороший/более быстрый способ достижения выше, не прибегая к использованию getline и демпинг одной строки в строку? Мне было интересно, можно ли это сделать с потоковыми буферами, но, проведя немного поиска, мне это не совсем понятно.

Любая помощь будет очень признательна, благодарю вас!

+5

Выглядит хорошо. Были ли у вас какие-то проблемы? Разве это не соответствует вашим требованиям к производительности? Это очень откровенный вопрос о том, какую «помощь» вы действительно ищете здесь. Если бы я был вами, я бы просто улыбнулся тому, что вы сделали до сих пор, и переходите к следующей задаче в вашем проекте. –

ответ

0

Если вы должны были использовать

int points = std::count(std::istreambuf_iterator<char>(line_), std::istreambuf_iterator<char>(), ','); 

для каждой строки текста, я бы посоветовал вам искать способ, чтобы сделать его более эффективным.

Однако, вы сказали:

я могу быть уверен, что каждый файл имеет одинаковое количество значений данных в каждой строке.

Это означает, что вы можете вычислить числовые точки из первой строки и считать их действительными для остальных строк.

Я бы не потел это для разового звонка.

Смежные вопросы