如何读取文件,并获取逗号分隔值的最后一部分,用于求和。例如:我有这个数据的文件名
2014-12-22.16:31:36,3,3
2014-12-22.16:31:37,3,6
2014-12-22.16:31:38,3,9
2014-12-22.16:31:39,6,15
我想得到的实际上是数字15作为整数。所以我可以添加一些其他数字。但任何其他方式也可以..数字15本质上是逗号分隔值的所有第二部分的总和。我有阅读部分
if(IsFileExist(theFileName)) {
std::ifstream file(theFileName);
std::string str;
while (std::getline(file, str)) {
}
}
答案 0 :(得分:1)
根据我的经验,如果您的CSV包含特殊符号,
,则必须使用一些真实的库。您可以考虑 Boost Tokenizer (http://www.boost.org/doc/libs/1_55_0/libs/tokenizer/)。但如果您的数据从未包含,
,则只使用字符串吐出方法
std::string input = "abc,def,ghi";
std::istringstream ss(input);
std::string token;
while(std::getline(ss, token, ',')) {
std::cout << token << '\n';
}
答案 1 :(得分:1)
获得该行后,搜索最后一个逗号,该逗号应该跟随要汇总的数据。使用std::stoi()
转换子字符串:
#include <iostream> // std::cout
#include <fstream> // std::ifstream
#include <string> // std::string, std::getline
int main()
{
int sum(0);
for (std::string line; std::getline(file, line); )
{
std::string::size_type pos = line.find_last_of(',');
try
{
sum += std::stoi(line.substr(pos+1));
}
catch (...)
{
std::cerr << "Invalid CSV\n";
csv.setstate(std::ios_base::failbit);
}
}
std::cout << sum;
}