C ++与Boost库。 阅读栏目。 Excel中/ CSV

我正在阅读有3列的CSV。 在每一列我需要执行mean,var和std计算。 我能够得到第一列的输出,但不知道如何打印所有3列。 谢谢。

我尝试在while(getline(inNew,line,','))之后添加','
但那不适合我

int main() { ifstream inNew("C:/Users/A.csv"); accumulator_set<double, stats<tag::mean, tag::variance >> acc; if (inNew) { string line; while (getline(inNew, line)) { acc(stod(line)); } cout << "Expected return is: " << mean(acc) << std::endl; cout << "Variance: " << variance(acc) << std::endl; cout << "Std Dev: " << sqrt(variance(acc)) << std::endl; } inNew.close(); system("pause"); return 0; } 

由于您已经使用了boost,所以使用boost::split将每一行分割成列。 然后分别累积每列。 您将需要每个列accumulator_set

代码可能看起来像这样:

 #include <fstream> #include <iostream> #include <string> #include <vector> #include <boost/accumulators/accumulators.hpp> #include <boost/accumulators/statistics/stats.hpp> #include <boost/accumulators/statistics/mean.hpp> #include <boost/accumulators/statistics/variance.hpp> #include <boost/algorithm/string.hpp> int main() { using namespace std; using namespace boost; using namespace boost::accumulators; ifstream inNew("C:/Users/A.csv"); size_t columns = 3; vector<accumulator_set<double, stats<tag::mean, tag::variance>>> acc(columns); if (inNew) { string line; while (getline(inNew, line)) { vector<string> strs; split(strs, line, is_any_of("\t ,")); if (strs.size() == columns) { for (size_t i = 0; i < columns; ++i) { acc[i](stod(strs[i])); } } } for (size_t i = 0; i < columns; ++i) { cout << "Stats for column " << (i + 1) << endl; cout << "Expected return is: " << mean(acc[i]) << endl; cout << "Variance: " << variance(acc[i]) << endl; cout << "Std Dev: " << sqrt(variance(acc[i])) << endl; } } inNew.close(); system("pause"); return 0; } 

当然,通过不对列数进行硬编码,您可以使其更加花哨和强大。

Interesting Posts