我想不出更好的标题,但让我解释一下。
我有一个像这样的文件
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只是行的一部分,以便如果字符串匹配,我可以继续解析文件?我尝试过查找函数,尝试过字符串比较函数,但是似乎什么也无法工作。关于如何解决此问题的任何建议将不胜感激。
答案 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;
}
}