2012-04-04 4 views
-1

Я интересно, если кто-нибудь может помочь мне решить следующую задачу в C++:обработки файлов в C++

У меня есть файл, где некоторое время там не хватает данных, т.е. есть два последовательных ТКС, то мне нужно, чтобы преобразовать вторая ТАБ в «-999999» или «0», например. вот как файл выглядит

 i_1 i_2 i_3 i_4 i_5 
j_1 12   14   16 
j_2  11 17 25 
j_3 44    51 65 

Я хочу, чтобы вычислить среднее значение элементов на первом ряду, т.е. (12,14 и 16) как:

sum+=tab[i][j]; 
mean = sum/5; (considering empty spaces =0) 

спасибо

+0

Являются ли i_1, i_2, j_1 и т. Д. Частью файла? – jrok

+0

Пробелы или вкладки между значениями? Значения всегда имеют 2 цифры? – k06a

+0

Если количество столбцов фиксировано, вам не нужно ничего конвертировать ... Просто подведите итог тому, что есть. – jrok

ответ

1
#include <boost/algorithm/string/split.hpp> 
#include <iostream> 
#include <fstream> 
#include <vector> 
#include <list> 

bool const compress_tokens = false; 
bool const table_width = ...; 

std::ifstream inp("filename"); 

// parsed grid 
std::list<std::vector<std::string> > table; 

std::string strbuf; 
std::vector<std::string> vecbuf; 
while(inp.getline(strbuf)) 
{ 
    vecbuf.clear(); 
    boost::split(vecbuf, strbuf, boost::is_any_of("\t"), compress_tokens); 
    assert(vecbuf.size() == table_width); 
    table.push_back(vecbuf); 
} 
+0

может объяснить структуру вашего кода? – NadCo

+0

открыть файл, прочитать строку за строкой, разделить каждую строку и поместить токены в вектор, добавить вектор в список векторов, представляющих 2D-таблицу – bobah

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