【问题标题】:c++ - Parse a File Object using Commas? [duplicate]c++ - 使用逗号解析文件对象? [复制]
【发布时间】:2020-05-25 10:28:35
【问题描述】:

我正在尝试使用逗号而不是空格正确解析文件对象 RecordFile,然后将数据分配给正确的变量。我目前正在使用空格进行解析,如下面的记录示例所示。有什么建议吗?

    ifstream RecordFile("records.txt"); 

    while (!RecordFile.eof())    
    {
        string f, l, aba, id, e;                          
        RecordFile >> f >> l >> aba >> id >> e;           
        Recordsarray[i].setRecords(f, l, aba, id, e);     

       i++;
       recordcounter++; 
    }

    RecordFile.close();            

    return recordcounter;          

示例记录:

Albert Green 000000000 8181234567 a.green@piercecollege.edu

【问题讨论】:

  • 不太清楚。您的示例记录中没有逗号
  • 您的代码到底有什么问题?请包括minimal reproducible example 以及输入、输出和预期输出
  • @Yksisarvinen 代码有效,如果我用逗号替换记录中的空格,它就行不通
  • @idclev463035818 我的代码正在运行,它只是使用空格而不是逗号进行解析,如下行所示:RecordFile >> f >> l >> aba >> id >> e;我的目标是读取 CVS 文件而不是常规文本文件,所以想象一下记录中的空格被逗号替换。

标签: c++ arrays object


【解决方案1】:

你可以使用 boost::splite 函数:

int func()
{
    ifstream RecordFile("records.txt"); 
    std::string line;
    while (!std::getline(RecordFile, line);)    
    {
        std::vector<string> vec;
        boost::split(vec, line, boost::is_any_of(","));

        Recordsarray[i].setRecords(vec);     

       i++;
       recordcounter++; 
    }

    RecordFile.close();            

    return recordcounter;
}

【讨论】:

  • 如果没有它,为什么要提升?而且为什么只有一个is_any_of
  • is_any_of 的使用让您可以选择使用各种分隔符,而不仅仅是逗号,而与 boost 的使用让您可以选择将字符串移动到 stl 容器,并可以选择对其进行迭代并且不要使用很多变量
  • 我知道,但是为什么在只使用逗号作为分隔符时使用它,而不是别的?
  • 那么明天他们可以使用is_any_of
  • 我们正在进入一些稍微偏离主题的讨论,虽然“稳健”对我来说意味着:做需要做的事情,而不是更多,同时不要比必要的复杂。如果明天我想读OtherRecordFile 而不是RecordFile,那我明天会写更多代码,但不是今天;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-02
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 2011-05-20
相关资源
最近更新 更多