有没有办法让getline成为线路的一部分?

时间:2018-11-07 09:43:43

标签: c++ string getline

我想不出更好的标题,但让我解释一下。

我有一个像这样的文件

potions.txt药水 Ingredients.txt成分

INSERT((Red Mountain Flower|0.1|2|Yes|No|Mountains,Forests),ingredients)
INSERT((Abecean Longfin|0.5|15|No|Yes|Rivers,Lakes),ingredients)
INSERT((48|Glibness|Fortify|+20 Speechcraft for 60 seconds.|96|None|None),potions)
UPDATE((Abecean Longfin|0.5|15|No|Yes|Rivers,Lakes,Swamps),ingredients)
UPDATE((205|Minor Healing|Health|Restore 25 points of Health.|17|Blue Mountain Flower|Charred Skeever Hide),potions)
UPDATE((206|Healing|Health|Restore 50 points of Health.|36|Blue Mountain Flower|Swamp Fungal Pod),potions)
SELECT((9|*|*|*|*|*|*),potions)
INSERT((Purple Mountain Flower|0.1|2|Yes|No|Mountains,Forests),ingredients)

我正在尝试分析文件,以将适当的内容存储到适当的变量中。

所以,我尝试写作

for(int i = 0; i < num_of_lines; i++)
{
        getline(inputFile, insert, '(');
        if(insert == "INSERT")
        {
            cout << insert << endl;
        }
}

我立即知道我的问题。当for循环继续时,它将读取内容的顺序为

(
Red Mountain Flower|0.1|2|Yes|No|Mountains,Forests),ingredients)INSERT(
(Abecean Longfin|0.5|15|No|Yes|Rivers,Lakes),ingredients)INSERT(

这意味着它永远不会再有另一个“插入”内容可供读取,因此我将永远无法访问它以进一步解析文件。

有没有办法让getline只是行的一部分,以便如果字符串匹配,我可以继续解析文件?我尝试过查找函数,尝试过字符串比较函数,但是似乎什么也无法工作。关于如何解决此问题的任何建议将不胜感激。

1 个答案:

答案 0 :(得分:3)

输入显然是基于行的,因此请逐行读取然后解析这些行:

for(int i = 0; i < num_of_lines; i++)
{
        getline(inputFile, lineText);
        std::istringstream line(lineText);

        // Now, work with `line` as your stream
        getline(line, insert, '(');
        if(insert == "INSERT")
        {
            cout << insert << endl;
        }
}