C ++如何读取文件并解析逗号分隔值

时间:2014-12-23 01:57:17

标签: c++ file parsing csv readfile

如何读取文件,并获取逗号分隔值的最后一部分,用于求和。例如:我有这个数据的文件名

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)) {

    }
}

2 个答案:

答案 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;
}