我需要使用boost:
从文本文件的每一行获取数字d$+$B$ 0.0 000 000 000 1.0 255 255 255
类似的东西:
0.0 000 000 000 1.0 255 255 255
在Qt中,它是那样的:
QString data = input->readLine();
o_name = data.section('$', 0, 2);
QStringList dataLst = data.section('$', 3, 3).split(' ', QString::SkipEmptyParts);
while(!dataLst.isEmpty() )
//process
提升中的等效算法是什么?
到目前为止,我只有这个:
boost::iostreams::basic_file<float>( filename, std::ios_base::in );
答案 0 :(得分:2)
这是一个使用boost正则表达式的简短代码段。我试图使用c ++ 11进行同样的工作,但似乎gcc 4.8.2尚不支持:GCC GNU
std::ifstream ifStreamObject("test", std::ifstream::in);
if (!ifStreamObject.is_open())
{
// nothing to do
return -1;
}
std::string line;
boost::regex e("\\s+"); // split on whitespaces
boost::sregex_token_iterator j;
while (std::getline(ifStreamObject, line))
{
boost::sregex_token_iterator i(line.begin(), line.end(), e, -1);
while(i!=j)
{
// display the tokens for now.. process the data here
cout << *i++ << endl;
}
}
输出:
d$+$B$
0.0
000
000
000
1.0
255
255
255
答案 1 :(得分:0)
你可以使用提升精神:
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/qi_match.hpp>
#include <fstream>
using namespace boost::spirit::qi;
int main()
{
std::string oname;
std::vector<double> numbers;
if (std::ifstream("input.txt") >> std::noskipws
>> match(*~char_('$') > '$')
>> match(*~char_('$') > '$')
>> match(*~char_('$') > '$', oname)
>> phrase_match(*double_, blank, numbers))
{
std::cout << oname << ": parsed " << numbers.size() << " numbers: ";
for(auto d : numbers)
std::cout << d << " ";
}
}
打印
B: parsed 8 numbers: 0 0 0 0 1 255 255 255
为您的样品系列。见 Live On Coliru
更新我刚注意到您想要将整个“d $ + $ B $”解析为oname:
>> match(raw [ repeat(3) [ *~char_('$') > '$' ] ], oname)
或者只是
>> match(*~char_('$') > char_('$'), oname) >> match(*~char_('$') > char_('$'), oname) >> match(*~char_('$') > char_('$'), oname)
将连接到
oname