Назначение переменных после разбора файла с помощью c ++

0

Я ищу небольшое руководство или помощь с этим конкретным барьером, который у меня есть в C++. Я исхожу из фона python, поэтому некоторые вещи меня смущают. Я беру текстовый файл в качестве аргумента командной строки и пытаюсь разобрать/назначить переменные тем вещам, которые я прочитал в тексте. Я сделал супер простой текстовый файл и то, что я считаю супер простым файлом cpp. Я написал это, основываясь на некоторых других советах, похожих на вопросы, которые я видел здесь.

В python я мог бы реализовать быстрое сортировку регулярных выражений для функции.readlines() и быстро назначать переменные, и я знаю, что в CPP это будет не так просто, потому что у меня есть то, что у меня есть:

#include <fstream>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    if (argv > 1) 
    {
        std::ifstream s(argv[1]);
        if (s.is_open())
            ; // compiler complained unless this was on its own line
        {
            int i, j, k; // assign ints, no idea why
            s >> i >> j >> k; // 
            std::cout << i << endl;
            std::cout << j << endl;
            std::cout << k << endl;

            // repeat the same with chars, try to assign from file reads?

        }
    }
}

и мой текстовый файл просто имеет:

5
3
1

Я ожидаю, что вывод из моей программы будет "5\n 3\n 1"

который не происходит. В конечном итоге я хочу, чтобы у вас была целевая линия: "Truck 500" и найдите "Truck", но присваивая переменную int truck "500",

Извините, если мой вопрос повсюду, но также приветствуется любая помощь или ссылки в правильном направлении. Благодарю!

Теги:
parsing
args

1 ответ

3
Лучший ответ

Во-первых, точка с запятой после if -statement является полным условным блоком if -statement (и он абсолютно может идти по предыдущей строке, но почти наверняка вы не хотите иметь точку с запятой в первую очередь). Кроме того, вам всегда нужно проверять свои данные после прочтения! Поток не знает, что вы собираетесь делать дальше, и не может предсказать, будет ли он успешным, прежде чем пытаться. То есть ваш код должен выглядеть примерно так:

std::ifstream in(argv[1]);
if (!in) {
    std::cout << "ERROR: failed to open '" << argv[1] << "' for reading\n";
}
else {
    int i, j, k;
    if (std::cin >> i >> j >> k) {
        std::cout << "read i=" << i << " j=" << j << " k=" << k << '\n';
    }
    else {
        std::cout << "ERROR: there was a format error\n";
    }
}

Тем не менее, на основе вашего кода вы должны увидеть ожидаемый результат, предполагая, что вам действительно удалось правильно открыть файл. Я бы предположил, что приведенный выше код укажет, что происходит не так.

  • 0
    Спасибо за объяснение. Вы определенно поставили меня на правильный путь, теперь совершенно очевидно, что я сейчас делаю неправильно. У меня достаточно здесь, с чем я могу работать, так что спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню