我有一个文本文件中的数据,我希望读入并拆分成一个新的对象。

我找到了以下代码:

std::ifstream file("plop");
std::string   line;

while(std::getline(file, line))
{
    std::stringstream   linestream(line);
    std::string         data;
    int                 val1;
    int                 val2;

    std::getline(linestream, data, '\t');

    linestream >> val1 >> val2;
}


读入文本文档并按行分割。但是,此代码假定定界符始终是制表符。如果数据具有多个定界符,该定界符将指向将跟随哪种类型的数据,该怎么办。即假设一个文本文件,例如:

hey, "hi" (hello) [hola]
bye, "by" (byeee) [biii]


我想将数据分成

String twoCharacters;
String threeCharacters;
String fourCharacters;
String fiveCharacters;


所以

twoCharacters = hi and by


分隔符为两个“


threeCharacters = hey and bye


分隔符为a,之后是

任何帮助将不胜感激!谢谢。

最佳答案

您可以继续使用不同的定界符来调用std::getline()

std::ifstream file("test.txt");

std::string   line;
while(std::getline(file, line))
{
    std::stringstream linestream(line);

    std::string skip;
    std::string item1;
    std::string item2;
    std::string item3;
    std::string item4;

    std::getline(linestream, item1, ',');
    std::getline(linestream, skip, '"');
    std::getline(linestream, item2, '"');
    std::getline(linestream, skip, '(');
    std::getline(linestream, item3, ')');
    std::getline(linestream, skip, '[');
    std::getline(linestream, item4, ']');

    if(linestream) // true if there were no errors reading the stream
    {
        std::cout << item1 << '\n';
        std::cout << item2 << '\n';
        std::cout << item3 << '\n';
        std::cout << item4 << '\n';
    }
}


我使用变量skip读取下一个字段的开头。

10-06 13:05
查看更多