Reading & Parsing an .ini input file using BOOST... ..!!

All, Need small help. I have an "input.ini" input file which contains sample values like – --- App=| 5000 | 5001 | 0 | | | | 1BYTE | --- Starting with word (viz. App), followed by equal sign, than data within pipes (|) and blank space between two pipes ( | | ). Anything only between two pipes is to be read. I am looking to parse this input file. After parsing, assign each data to struct member type and than send this complete struct as socket. I am looking to use Boost property tree (or the needed one) and finally the ASIO to send the complete filled struct as stream. I tried below code to read complete data and it worked but - --- #include <iostream> #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/ini_parser.hpp> #include <boost/filesystem/fstream.hpp> int main() { boost::property_tree::ptree pt; boost::property_tree::ini_parser::read_ini("input.ini", pt); std::cout << pt.get<std::string>("App") << std::endl; } --- But, how to read between pipes? Any clue?

On 10/22/2013 7:52 PM, Rahul Mathur wrote:
All,
Need small help. I have an "input.ini" input file which contains sample values like –
---
App=| 5000 | 5001 | 0 | | | | 1BYTE |
---
Starting with word (viz. App), followed by equal sign, than data within pipes (|) and blank space between two pipes ( | | ). Anything only between two pipes is to be read.
I am looking to parse this input file. After parsing, assign each data to struct member type and than send this complete struct as socket.
I am looking to use Boost property tree (or the needed one) and finally the ASIO to send the complete filled struct as stream.
I tried below code to read complete data and it worked but -
--- #include <iostream> #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/ini_parser.hpp> #include <boost/filesystem/fstream.hpp>
int main() {
boost::property_tree::ptree pt; boost::property_tree::ini_parser::read_ini("input.ini", pt); std::cout << pt.get<std::string>("App") << std::endl; } ---
But, how to read between pipes?
Look at Boost tokenizer library. Or use standard regex or Boost regex depending on what your compiler supports.

Let me tell you, w/o knowing characteristics about .ini file I manually created a input.ini file like an oridinary .txt or .log file and thought to try if it can be parsed entirely like normal file. Let me know, if I can manually write in .ini file as one of my READ file where I try READING entire LINE until end rather in "key, value" of .ini format. Also, what could be the best and fastest way to large (~ 5KB) files on Linux with GNU compilers and Boost-v1.54. Is memory-mapped files the fastest way or iostream or boost.spirit? On Wed, Oct 23, 2013 at 6:12 AM, Edward Diener <eldiener@tropicsoft.com>wrote:
On 10/22/2013 7:52 PM, Rahul Mathur wrote:
All,
Need small help. I have an "input.ini" input file which contains sample values like –
---
App=| 5000 | 5001 | 0 | | | | 1BYTE |
---
Starting with word (viz. App), followed by equal sign, than data within pipes (|) and blank space between two pipes ( | | ). Anything only between two pipes is to be read.
I am looking to parse this input file. After parsing, assign each data to struct member type and than send this complete struct as socket.
I am looking to use Boost property tree (or the needed one) and finally the ASIO to send the complete filled struct as stream.
I tried below code to read complete data and it worked but -
--- #include <iostream> #include <boost/property_tree/ptree.**hpp> #include <boost/property_tree/ini_**parser.hpp> #include <boost/filesystem/fstream.hpp>
int main() {
boost::property_tree::ptree pt; boost::property_tree::ini_**parser::read_ini("input.ini", pt); std::cout << pt.get<std::string>("App") << std::endl; } ---
But, how to read between pipes?
Look at Boost tokenizer library. Or use standard regex or Boost regex depending on what your compiler supports.
______________________________**_________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/**mailman/listinfo.cgi/boost-**users<http://lists.boost.org/mailman/listinfo.cgi/boost-users>

On Tue, Oct 22, 2013 at 9:01 PM, Rahul Mathur <srivmuk@gmail.com> wrote: Also, what could be the best and fastest way to large (~ 5KB) files on
Linux with GNU compilers and Boost-v1.54. Is memory-mapped files the fastest way or iostream or boost.spirit?
You must have intended to write different units. 5KB isn't large.

Thanks all. I was able to make out. Sometimes exploring C (strtok) also works well. On Wed, Oct 23, 2013 at 8:32 PM, Nat Goodspeed <nat@lindenlab.com> wrote:
On Tue, Oct 22, 2013 at 9:01 PM, Rahul Mathur <srivmuk@gmail.com> wrote:
Also, what could be the best and fastest way to large (~ 5KB) files on
Linux with GNU compilers and Boost-v1.54. Is memory-mapped files the fastest way or iostream or boost.spirit?
You must have intended to write different units. 5KB isn't large.
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users

On Oct 22, 2013, at 8:42 PM, Edward Diener <eldiener@tropicsoft.com> wrote:
On 10/22/2013 7:52 PM, Rahul Mathur wrote: All,
Need small help. I have an "input.ini" input file which contains sample values like –
---
App=| 5000 | 5001 | 0 | | | | 1BYTE |
---
Starting with word (viz. App), followed by equal sign, than data within pipes (|) and blank space between two pipes ( | | ). Anything only between two pipes is to be read.
I am looking to parse this input file. After parsing, assign each data to struct member type and than send this complete struct as socket.
I am looking to use Boost property tree (or the needed one) and finally the ASIO to send the complete filled struct as stream.
I tried below code to read complete data and it worked but -
--- #include <iostream> #include <boost/property_tree/ptree.hpp> #include <boost/property_tree/ini_parser.hpp> #include <boost/filesystem/fstream.hpp>
int main() {
boost::property_tree::ptree pt; boost::property_tree::ini_parser::read_ini("input.ini", pt); std::cout << pt.get<std::string>("App") << std::endl; } ---
But, how to read between pipes?
Look at Boost tokenizer library. Or use standard regex or Boost regex depending on what your compiler supports.
Or algorithm::split http://www.boost.org/doc/libs/1_54_0/doc/html/boost/algorithm/split_idp54600...
participants (4)
-
Edward Diener
-
Gordon Woodhull
-
Nat Goodspeed
-
Rahul Mathur