Możesz oczywiście dane parsować "na piechotę". Myślę jednak że następne pytanie padnie o np. parsowanie umieszczonej daty lub oddzielenia centymetrów od jednej z miar. Stąd proponuję rozwiązanie z gramatyką regularną.
Przy danych (dodałem 1 rekord do testów):
Adam Nowak, 1990.09.10, 180cm, zawód - inżynier budownictwa
Marian Kargul, 1970.09.11, 165cm, zawód - rolnik
#include <iostream>
#include <fstream>
#include <regex>
using namespace std;
ifstream getFile(const string& fileName) {
ifstream file(fileName);
// TODO: Tu ew. sprawdzenie czy otwarty prawidłowo..
return file;
}
static void bar() {
cout << string(70, '=') << '\n';
}
static void showMatchStatus(const smatch& matched) {
cout << "W linii: " << matched[0] << "\n"
<< "Znaleziono " << matched.size() << " pól danych.\n"
<< "Są to: \n" << string(70, '=') << '\n';
}
static void showMatchedFields(const smatch& matched) {
for(size_t i = 0; i < matched.size(); ++i) {
cout << "Pole " << i << ": |"
<< matched[i].str() << "|\n";
}
}
int main() {
auto file = getFile("dane.txt");
string line;
regex re(
"^(.*)," // Ddopasowanie pierwszego pola Imie Nazwisko z ,
" *(.*)," // Dla pola daty
" *(.*)cm," // Pole wzrost
" *zawód - (.*)$" // Ostatnie pole zawód..
);
smatch matched;
while(getline(file, line)) {
regex_match(line, matched, re);
bar();
showMatchStatus(matched);
showMatchedFields(matched);
bar();
}
}
Przy okazji masz przykład jak można zapisać RegExp aby był czytelny w przyszłości :-)