Есть ли способ получить строку только часть строки? - PullRequest
0 голосов
/ 07 ноября 2018

Я не мог придумать лучшего названия, но позвольте мне объяснить.

У меня есть такой файл

potions.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(

Это означает, что он никогда не получит другую «вставку» для чтения, поэтому у меня никогда не будет доступа к ней для дальнейшего анализа файла.

Есть ли способ получить строку только для части строки, чтобы, если строка совпадала, я мог продолжить анализ файла? Я пытался найти функции, я пробовал функции сравнения строк, но я не могу заставить что-то работать. Будем благодарны за любые предложения о том, как я могу решить эту проблему.

1 Ответ

0 голосов
/ 07 ноября 2018

Входные данные, очевидно, основаны на строках, поэтому читайте их построчно, а затем анализируйте эти строки:

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;
        }
}
...