c ++ чтение из файла пропустить определенные строки

0

У меня есть текстовый файл в этом формате

 wins = 2
 Player
 10,45,23
 90,2,23

я должен хранить 10 45 23 в вектор и передать его функции, проблема заключается в том, что она прерывается после первой строки

    string csvLine;
int userInput;
ifstream  data("CWoutput.txt");
string line;
string str;
vector<string> listOfScores;
while(getline(data,line))
{
    stringstream  lineStream(line);
    string        cell;
    while(getline(lineStream,cell,'\n'))
    {
        if (cell.at(0) != 'w'  || cell.at(0) != 'P')
        { 
            while(getline(lineStream,cell,','))
            {
                cout<<line<<endl;

                listOfScores.push_back(cell);
            }
        }
    }
    vector<transaction> vectorScores= this->winner(listOfCells);
    bool hasWon= false;
    hasWon= this->validateRule2(vectorScores);
    if(hasWon== true)
    {
        return true;
    }
    else
    {
        return false;
    }
}
  • 2
    Помимо всего прочего, пожалуйста, замените if (hasWon== true) { return true; } else { return false; } с return hasWon; ,
  • 2
    да или напрямую return this->validateRule2(vectorScores)
Показать ещё 1 комментарий
Теги:
csv
file

2 ответа

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

Почему вы используете linestaream в цикле? Вы получаете целую строку, вызывая getline(data,line).

так что вы можете сделать

while(getline(data,line))
{


        if (line.at(0) != 'w'  || line.at(0) != 'P')
        { 
            std::vector<std::string> x = split(line, ',');
            listOfScores.insert(listOfScores.end(),x.begin(),x.end());
        }
}

и вы можете использовать функции split:

std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
    std::stringstream ss(s);
    std::string item;
    while (std::getline(ss, item, delim)) {
        elems.push_back(item);
    }
    return elems;
}


std::vector<std::string> split(const std::string &s, char delim) {
    std::vector<std::string> elems;
    split(s, delim, elems);
    return elems;
}
0

В этом выражении while(getline(lineStream,cell,'\n'))

Ваш lineStream не содержит символ '\n' поскольку он отбрасывается предыдущей функцией getline( data, line).

Ваш цикл while может быть упрощен до следующего:

while(getline(data,line))
{
    data.clear();
    if (line[0] != 'w'  && line[0] != 'P') {
      stringstream  lineStream(line);
      string        cell;
      while(getline(lineStream,cell,','))
      {
        cout<<line<<endl;

        listOfScores.push_back(cell);
      }
      vector<transaction> vectorScores= this->winner(listOfCells);
      bool hasWon= false;
      hasWon= this->validateRule2(vectorScores);
      return hasWon;
   }
}
  • 0
    это не событие перейти к следующей строке
  • 0
    Попробуйте очистить ошибочные флаги. Я обновил свой код.

Ещё вопросы

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