मैं बूस्ट स्पिरिट क्यूआई के साथ टीपीसीएच फाइलों को पार्स करने का प्रयास करता हूं। मेरा कार्यान्वयन आत्मा क्यूआई (http://www.boost.org/doc/libs/1_52_0/libs/spirit/example/qi/employee.cpp) के कर्मचारी उदाहरण से प्रेरित है। डेटा सीएसवी प्रारूप में है और टोकन को '|' से सीमित किया गया है चरित्र।बूस्ट स्पिरिट क्यूआई धीमी
यह काम करता है लेकिन यह बहुत धीमा है (1 जीबी के लिए 20 सेकंड)।
struct lineitem {
int l_orderkey;
int l_partkey;
int l_suppkey;
int l_linenumber;
std::string l_quantity;
std::string l_extendedprice;
std::string l_discount;
std::string l_tax;
std::string l_returnflag;
std::string l_linestatus;
std::string l_shipdate;
std::string l_commitdate;
std::string l_recepitdate;
std::string l_shipinstruct;
std::string l_shipmode;
std::string l_comment;
};
BOOST_FUSION_ADAPT_STRUCT(lineitem,
(int, l_orderkey)
(int, l_partkey)
(int, l_suppkey)
(int, l_linenumber)
(std::string, l_quantity)
(std::string, l_extendedprice)
(std::string, l_discount)
(std::string, l_tax)
(std::string, l_returnflag)
(std::string, l_linestatus)
(std::string, l_shipdate)
(std::string, l_commitdate)
(std::string, l_recepitdate)
(std::string, l_shipinstruct)
(std::string, l_shipmode)
(std::string, l_comment))
vector<lineitem>* lineitems=new vector<lineitem>();
phrase_parse(state->dataPointer,
state->dataEndPointer,
(*(int_ >> "|" >>
int_ >> "|" >>
int_ >> "|" >>
int_ >> "|" >>
+(char_ - '|') >> "|" >>
+(char_ - '|') >> "|" >>
+(char_ - '|') >> "|" >>
+(char_ - '|') >> "|" >>
+(char_ - '|') >> '|' >>
+(char_ - '|') >> '|' >>
+(char_ - '|') >> '|' >>
+(char_ - '|') >> '|' >>
+(char_ - '|') >> '|' >>
+(char_ - '|') >> '|' >>
+(char_ - '|') >> '|' >>
+(char_ - '|') >> '|'
)), space, *lineitems
);
समस्या चरित्र पार्स हो रहा है:
यहाँ पंक्ति आइटम फ़ाइल के लिए मेरे क्यूई व्याकरण है। यह अन्य रूपांतरणों की तुलना में बहुत धीमी है। तारों में परिवर्तनीय लंबाई टोकन पार्स करने का कोई बेहतर तरीका है?
मुझे एक बार ऐसा अनुभव हुआ। आत्मा क्यूई परिवर्तनीय लंबाई तारों को कुशलता से संभालने में सक्षम नहीं है। किसी के पास इसका समाधान है? – muehlbau