C ++ Чтение некоторых (не всех) только данных из входного файла для добавления в запись - PullRequest
0 голосов
/ 04 октября 2019

В настоящее время у меня есть CSV-файл с такими данными:

Имя ... Волосы ... Яйца ... Высокие ... Вода ... Земля ... Внутренние

Appl ....... 1 ......... ........ 0 1 0 ........ .......... 0. ............ 1

Дамбы ..... 1 ......... 1 ........ 0 ..... ... 0 .......... 1 ............. 1

Эон ...... 0 ....... ..1 ........ 0 ........ 1 .......... 1 ............. 0

Где 0 - ложь, а 1 - истина. Меня интересует только чтение объектов Name, Tall и Domestic, которые я добавлю в запись. Пока у меня есть

    ifstream inFile("file_name.csv");

    if (inFile.fail())
    {
        std::cout << "File cannot be opened due to an error." << endl;
        exit(1);
    }

  string junk;
  getline(inFile,junk);

Я рисую пробел о том, как настроить цикл while, чтобы пропустить ненужные данные. Это просто не имеет смысла делать, пока (inFile >> имя >> волосы >> яйца >> высокий >> вода >> земля >> домашняя) я думаю о цикле for внутри цикла while, но я просто могуу меня это не получится. Любая помощь / руководство будет высоко ценится.

Рисунок выше таблицы прилагается

1 Ответ

0 голосов
/ 04 октября 2019

Я рекомендую в этих случаях моделировать каждую строку с помощью класса или структуры:

struct Record
{
    std::string name;
    int hair;
    int eggs;
    int tall;
    int water;
    int land;
    int domestic;
    friend std::istream& operator>>(std::istream& input, Record& r);
};

std::istream& operator>>(std::istream& input, Record& r)
{
    input >> name;
    input >> hair;
    /...
    input >> domestic;
    return input;
}

Перегрузив operator>>, вы можете упростить ввод:

std::vector<Record>  database;
Record r;
while (data_file >> r)
{
    database.push_back(r);
}

Для доступаполе Name:

std::cout << database[3].name << "\n";
...