#include #include #include #include #include struct format_error : std::runtime_error { format_error() : std::runtime_error("Invalid Format") {} }; int main(int argc, char** argv) { { // close file when printer goes out of scope std::ofstream printer("test.txt"); if (!printer.is_open()) { std::cerr << "Error opening file for writing\n"; exit(2); } printer << " 123 456.2 789 \n"; printer << "987 865.2 \t 432\n"; printer << "garbage 1234 567\n"; printer << "666 7777.4 888\n"; } std::ifstream reader("test.txt"); if (!reader.is_open()) { std::cerr << "Error opening file for reading\n"; exit(3); } int i1; int i2; double d1; std::string raw_text; while( std::getline(reader, raw_text)) { std::cout << "READ: " << raw_text << std::endl; std::istringstream parser(raw_text); try { if (!(parser >> i1)) { throw format_error(); } if (!(parser >> d1)) { throw format_error(); } if (!(parser >> i2)) { throw format_error(); } } catch(format_error e) { std::cerr << "Invalid format for line: " << raw_text << "\n\n"; continue; } std::cout << "PARSED: " << i1 << "|" << d1 << "|" << i2 << "\n\n"; } return 0; }