| 1 | // Copyright (c) 2001-2011 Hartmut Kaiser |
| 2 | // Copyright (c) 2011 Michael Caisse |
| 3 | // |
| 4 | // Distributed under the Boost Software License, Version 1.0. (See accompanying |
| 5 | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
| 6 | |
| 7 | #include <boost/spirit/include/qi.hpp> |
| 8 | |
| 9 | namespace qi = boost::spirit::qi; |
| 10 | |
| 11 | template <typename T> |
| 12 | struct german_real_policies : qi::real_policies<T> |
| 13 | { |
| 14 | template <typename Iterator> |
| 15 | static bool parse_dot(Iterator& first, Iterator const& last) |
| 16 | { |
| 17 | if (first == last || *first != ',') |
| 18 | return false; |
| 19 | ++first; |
| 20 | return true; |
| 21 | } |
| 22 | }; |
| 23 | |
| 24 | qi::real_parser<double, german_real_policies<double> > const german_double; |
| 25 | |
| 26 | /////////////////////////////////////////////////////////////////////////////// |
| 27 | int main() |
| 28 | { |
| 29 | std::string input("123,456" ); |
| 30 | std::string::iterator begin = input.begin(); |
| 31 | std::string::iterator end = input.end(); |
| 32 | |
| 33 | double value = 0; |
| 34 | if (!qi::parse(first&: begin, last: end, expr: german_double, attr&: value)) |
| 35 | { |
| 36 | std::cout << "-------------------------------- \n" ; |
| 37 | std::cout << "Parsing failed\n" ; |
| 38 | std::cout << "-------------------------------- \n" ; |
| 39 | } |
| 40 | else |
| 41 | { |
| 42 | std::cout << "-------------------------------- \n" ; |
| 43 | std::cout << "Parsing succeeded, got: " << value << "\n" ; |
| 44 | std::cout << "---------------------------------\n" ; |
| 45 | } |
| 46 | return 0; |
| 47 | } |
| 48 | |
| 49 | |