Boost Spirit Qi : Is it suitable language/tool to analyse/cut a "multiline" data file? <p>I want to apply various operations to data files : algebra of sets, statistics, reporting, changes. But the format of the files is far from code examples and a bit weird. There are differents sorts of items, items type, and some of them are put together as a collection. There is a simplistic example below.<br> I'm new in boost::spirit and I have tried coding to split the items and get basic informations (name, version, date) required for most of treatments. Eventually it seems tricky for me. <em>Is the problem my lack of skills or boost::spirit is not suitable to this format?</em><br> Studying boost::spirit is not a waste of time, I am sure to use it later. But I didn't find examples of code like mine, I may not go the right way.</p> <pre><code>&gt;&gt;&gt;process_type_A //name(typeA_1) //version(A.1.99) //date(2016.01.01) //property1 "pA11" //property2 "pA12" //etc_A_1 (thousand of lines - a lot are "multiline" and/or mulitline sub-records) &lt;&lt;&lt;process_type_A &gt;&gt;&gt;process_type_A //name(typeA_2) //version(A.2.99) //date(2016.01.02) //property1 "pA21" //property2 "pA22" //etc_A_2 (hundred or thousand of lines) &lt;&lt;&lt;process_type_A &gt;&gt;&gt;process_type_B //name(typeB_1) //version(B.1.99) //date(2016.02.01) //property1 "pB11" //property2 "pB12" //etc_B_1 (hundred or thousand of lines) &lt;&lt;&lt;process_type_B &gt;&gt;&gt;paramset_type_C //&gt;&gt;paramlist ////name(typeC_1) ////version(C.1.99) ////date(2016.03.01) ////property1 "pC11" ////property2 "pC12" ////etc_C_1 (hundred or thousand of lines) //&lt;&lt;paramlist //&gt;&gt;paramlist ////name(typeC_2) ////version(C.2.99) ////date(2016.04.01) ////property1 "pC21" ////property2 "pC22" ////etc_C_2 (hundred or thousand of lines) //&lt;&lt;paramlist &lt;&lt;&lt;paramset_type_C </code></pre> <p>Code::Blocks<br> Boost 1.60.0<br> GCC Compiler on Windows and Linux</p>