From d53c8a6ce3d868da66d97a9243365e88d0879343 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Fri, 31 Mar 2017 23:29:49 +0300 Subject: Add tab_parser --- tests/tab-parser/driver.cxx | 67 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 tests/tab-parser/driver.cxx (limited to 'tests/tab-parser/driver.cxx') diff --git a/tests/tab-parser/driver.cxx b/tests/tab-parser/driver.cxx new file mode 100644 index 0000000..8b0cc4d --- /dev/null +++ b/tests/tab-parser/driver.cxx @@ -0,0 +1,67 @@ +// file : tests/tab-parser/driver.cxx -*- C++ -*- +// copyright : Copyright (c) 2014-2017 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#include // ios::failbit, ios::badbit +#include +#include + +#include // operator<<(ostream,exception) +#include + +using namespace std; +using namespace butl; + +// Usage: argv[0] [-l] +// +// Read and parse tab-file from STDIN and print fields to STDOUT. +// +// -l output each field on a separate line +// +int +main (int argc, char* argv[]) +try +{ + assert (argc <= 2); + bool fpl (false); // Print field per line. + + if (argc == 2) + { + assert (argv[1] == string ("-l")); + fpl = true; + } + + cin.exceptions (ios::failbit | ios::badbit); + cout.exceptions (ios::failbit | ios::badbit); + + tab_fields tl; + tab_parser parser (cin, "cin"); + + while (!(tl = parser.next ()).empty ()) + { + if (!fpl) + { + for (auto b (tl.cbegin ()), i (b), e (tl.cend ()); i != e; ++i) + { + if (i != b) + cout << ' '; + + cout << i->value; + } + + cout << '\n'; + } + else + { + for (const auto& tf: tl) + cout << tf.value << '\n'; + } + } + + return 0; +} +catch (const tab_parsing& e) +{ + cerr << e << endl; + return 1; +} -- cgit v1.1