Как пропустить чтение строки в файле в C ++? - PullRequest
4 голосов
/ 23 февраля 2009

Файл содержит следующие данные:

#10000000    AAA 22.145  21.676  21.588
10  TTT 22.145  21.676  21.588
1  ACC 22.145  21.676  21.588

Я попытался пропустить строки, начинающиеся с "#", используя следующий код:

#include <iostream>
#include <sstream>
#include <fstream>
#include <string>

using namespace std;
int main() {
     while( getline("myfile.txt", qlline)) {

           stringstream sq(qlline);
           int tableEntry;

           sq >> tableEntry;

          if (tableEntry.find("#") != tableEntry.npos) {
              continue;
          }

          int data = tableEntry;
   }
}

Но почему-то выдает эту ошибку:

Mycode.cc: 13: ошибка: запрос на член 'найти' в 'tableEntry', который имеет неклассовый тип 'int'

Ответы [ 2 ]

9 голосов
/ 23 февраля 2009

Это больше похоже на то, что вы хотите?

#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <algorithm>

using namespace std;

int main() 
{
    fstream fin("myfile.txt");
    string line;
    while(getline(fin, line)) 
    {
        //the following line trims white space from the beginning of the string
        line.erase(line.begin(), find_if(line.begin(), line.end(), not1(ptr_fun<int, int>(isspace)))); 

        if(line[0] == '#') continue;

        int data;
        stringstream(line) >> data;

        cout << "Data: " << data  << endl;
    }
    return 0;
}
4 голосов
/ 23 февраля 2009

Вы пытаетесь извлечь целое число из строки, а затем пытаетесь найти «#» в целом числе. Это не имеет смысла, и компилятор жалуется, что не существует find метода для целых чисел.

Вы, вероятно, должны проверить "#" непосредственно в строке чтения в начале цикла. Кроме того, вам нужно объявить qlline и фактически открыть файл где-нибудь, а не просто передать строку с ее именем в getline. В основном так:

ifstream myfile("myfile.txt");
string qlline;
while (getline(myfile, qlline)) {
  if (qlline.find("#") == 0) {
    continue;
  }
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...