Как использовать getline () с несколькими переменными в одной строке? - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь прочитать каждую строку из файла и сохранить данные в каждой строке. Скажите, что линия "x y z". Какие аргументы должна использовать функция getline для индивидуального чтения и хранения x, y и z?

void readData(Gene *data, int num)
{
    int codeNum;
    int i = 0;
    int k = num;
    ifstream inputFile;
    inputFile.open("example.data");

    inputFile >> codeNum;
    while(i < k){
     getline(inputFile, data[i].geneCode, data[i].MutCode[0],
            data[i].MutCost[0], data[i].MutCode[1],
            data[i].MutCost[1]);

     i++;

    }

Это то, что у меня есть. Обратите внимание, что все переменные, которые я пытаюсь прочитать, являются строками, а k - общее количество строк. при попытке компиляции я получаю сообщение об ошибке «нет подходящей функции для вызова getline ()» и что-то о «шаблоне функции-кандидата не жизнеспособен». Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 11 апреля 2019

Я настоятельно рекомендую вам использовать вектор структур (или классов), а не несколько параллельных массивов.

struct Mutation_Code_Cost
{
    Mutation_Code_Type MutCode;
    Mutation_Cost_Type MutCost;
};

struct Gene
{
    Gene_Code_Type geneCode;
    Mutation_Code_Cost mutation_info[2];
};

Затем вы можете перегрузить operator>> для чтения в структурах из текстового потока:

struct Mutation_Code_Cost
{
    Mutation_Code_Type MutCode;
    Mutation_Cost_Type MutCost;
    friend std::istream& operator>>(std::istream& input, Mutation_Code_Cost& mcc);
};

std::istream& operator>>(std::istream& input, Mutation_Code_Cost& mcc)
{
  input >> mcc.MutCode;
  input >> mcc.MutCost;
  return input;
}

struct Gene
{
    Gene_Code_Type geneCode;
    Mutation_Code_Cost mutation_info[2];
    friend std::istream& operator>>(std::istream& input, Gene& g);
};

std::istream& operator>>(std::istream& input, Gene& g)
{
    input >> g.geneCode;
    input >> g.mutation_info[0];
    input >> g.mutation_info[1];
    return input;
}

Вы можете прочитать из файла так:

std::vector<Gene> database;
Gene g;
std::string record;
while (std::getline(input_file, record))
{
    std::istringstream record_stream(record);
    if (record >> g)
    {
        database.push_back(g);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...