Я использую вложенный while l oop для синтаксического анализа текстового файла с несколькими строками, но по какой-то причине он проходит только через первую строку, и я не знаю, почему - PullRequest
0 голосов
/ 14 июля 2020


Я использую вложенное while l oop для синтаксического анализа текстового файла с несколькими строками, но по какой-то причине он проходит только через первую строку, и я не знаю почему.

              string file;
              string line;
              cout << "Whats the file name?" << endl;
              cin >> file;
            
              string inputStr;
              string buf; // Have a buffer string
              stringstream s; // create the string stream
              int field = 0;
              string input; //string for the input (i.e. name, ID, etc.)
            
              ifstream InFile(file.c_str());
              if (InFile.is_open()) {
                cout << "File found" << endl;
            
                while (getline(InFile, line)) {
                  cout << line << endl;
                  inputStr = line;
                  s << inputStr; //put the line into the stream
                  while (getline(s, input, ' ')) { //gets a string from the stream up the next comma 
                    field++;
                    cout << " field" << field << " is " << input << endl;
                  }
                  cout << "DONE" << endl;
            
                }

1 Ответ

1 голос
/ 14 июля 2020
  1. Объявите свои переменные, когда вам нужно их использовать.
  2. Вы говорите while (getline(s, input, ' ')) { //gets a string from the stream up the next comma, но затем вы даете третий аргумент ' ' (пробел). Я полагаю, это должна быть запятая?

Фиксированный код:

        cout << "File found" << endl;

        while (getline(InFile, line)) {
            cout << line << endl;

            stringstream s(line); // create the string stream and init with line
            while (getline(s, input, ',')) { //gets a string from the stream up the next comma 
                field++;
                cout << " field" << field << " is " << input << endl;
            }
            cout << "DONE" << endl;
        }
    }
...