Лучший способ разобрать текстовый файл ascii, который я знаю, - читать его построчно и использовать strtok. Это функция C, но она разделит ваш ввод на отдельные токены для вас. Затем вы можете использовать функции синтаксического анализа строк atoi и strtod для анализа ваших числовых значений. Для указанного вами формата файла я бы сделал что-то вроде этого:
string line;
ifstream f(argv[1]);
if(!f.is_open()) {
cout << "The file you specified could not be read." << endl;
return 1;
}
while(!f.eof()) {
getline(f, line);
if(line == "" || line[0] == '#') continue;
char *ptr, *buf;
buf = new char[line.size() + 1];
strcpy(buf, line.c_str());
Peptide pep;
pep.mass = strtod(strtok(buf, " "), NULL);
pep.sequence = strtok(NULL, " ");
pep.numK = strtol(strtok(NULL, " "), NULL, 10);
pep.numPTS = strtol(strtok(NULL, " "), NULL, 10);
pep.numM = strtol(strtok(NULL, " "), NULL, 10);
while(ptr = strtok(NULL, " "))
pep.parents.insert(strtol(ptr, NULL, 10));
cout << "mass: " << mass << endl
<< "sequence: " << sequence << endl
<< "numK: " << numK << endl
<< "numPTS: " << numPTS << endl
<< "numM: " << numM << endl
<< "parents:" << endl;
set<int>::iterator it;
for(it = parents.begin(); it != parents.end(); it++)
cout << "\t- " << *it << endl;
}
f.close();