【问题标题】:Convert text to csv file in C++?在 C++ 中将文本转换为 csv 文件?
【发布时间】:2014-06-18 15:25:46
【问题描述】:

我得到了一个包含很多行的文本文件,如下所示:

数据[0]:a=123 b=234 c=3456 d=4567 e=123.45 f=234.56

我正在尝试提取数字以便将其转换为 csv 文件以便让 excel 导入并识别它

我的逻辑是,找到“”字符,然后将数据切掉。例如,在第一个 “”和第二个“”。可行吗?我一直在尝试这个,但我没有成功。

其实我想创建一个类似的csv文件

a、b、c、d、e、f

123、234、3456 ....blablabla

234、345、4567 .... 废话

但完成这项特定任务似乎相当困难。 是否有任何实用程序/更好的方法可以帮助我做到这一点?

【问题讨论】:

    标签: c++ csv


    【解决方案1】:

    我建议你看看boost::tokenizer,这是我找到的最好的方法。你会在网上找到几个例子。也看看这个high-score question

    步骤:每行:

    1. 使用: 字符将字符串分成两部分
    2. 用空格符将右边部分分成几个字符串
    3. 使用= 字符分隔值,并将它们填充到std::vector<std::string>
    4. 将这些值放入文件中。

    最后一部分可以是这样的:

    std::ofstream f( "myfile.csv" );
    for( const auto& s: vstrings )
        f << s << ',';
    f << "\n";
    

    【讨论】:

    • 这个解决方案似乎可行。我不是 C++ 专业人士,而是新手。这是否意味着我可以下载整个 boost 库然后把它放在某个地方(我不知道放在哪里),这样我就可以使用这些功能了?
    • 我使用的是Visual Studio 2013,我已经选择了boost目录的附加包含目录,#include语句没有错误,但是有几个错误,比如“Error: namespace "boost" has没有成员“char_separator”。发生了什么?
    • 第二条评论:你检查this了吗?尝试将示例作为独立程序运行,然后根据您的用例进行详细说明。
    【解决方案2】:

    没有非标准库的简单方法是:

    std::string line;
    while (getline(input_stream, line))
    {
        std::istringstream iss(line);
    
        std::string word;
        if (is >> word)   // throw away "data[n]:"
        {
            std::string identifier;
            std::string value;
            while (getline(iss, identifier, '=') && is >> value)
                std::cout << value << ",";
            std::cout << '\n';
        }
    }
    

    如果训练逗号导致 excel 出现任何问题,您可以对其进行调整,添加更多的完整性检查(例如,该值是数字,该字段在所有行中都是一致的),但上面的基本解析是一个开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 2013-10-22
      相关资源
      最近更新 更多