
//
// To jest przykładowy kod z podrozdziału 23.9 „Dopasowywanie przy użyciu wyrażeń regularnych” książki
// "Programowanie. Teoria i praktyka z wykorzystaniem C++" Bjarne'a Stroustrupa.
//

#include "std_lib_facilities.h"

//------------------------------------------------------------------------------

int main()
try
{
    ifstream in("table.txt");    // plik wejściowy
    if (!in) error("Brak pliku wejściowego.\n");

    string line;    // bufor wejściowy
    int lineno = 0;

    regex header( "^[\\w ]+(	[\\w ]+)*$"); // wiersz nagłówkowy
    regex row( "^[\\w ]+(	\\d+)(	\\d+)(	\\d+)$"); // wiersz danych

    if (getline(in,line)) {       // sprawdza wiersz nagłówkowy
        smatch matches;
        if (!regex_search(line, matches, header))
            error("brak nagłówka");
    }
    while (getline(in,line)) {    // sprawdza wiersz danych
        ++lineno;
        smatch matches;
        if (!regex_search(line, matches, row)) 
            error("Niepoprawny wiersz.", lineno);
    }
}
catch (std::exception& e) {
    cerr << "Błąd: " << e.what() << '\n'; 
    return 1;
}
catch (...) {
    cerr << "Nieznany wyjątek!\n"; 
    return 2;
}

//------------------------------------------------------------------------------
