re
ファイル全体を文字列(またはメモリ)にロードせずに、(モジュールを使用して)正規表現で大きなファイルを解析する方法は? メモリ マップされたファイルは、コンテンツをある種の遅延文字列に変換できないため、役に立ちません。モジュールはre
コンテンツ引数として文字列のみをサポートします。
#include <boost/format.hpp>
#include <boost/iostreams/device/mapped_file.hpp>
#include <boost/regex.hpp>
#include <iostream>
int main(int argc, char* argv[])
{
boost::iostreams::mapped_file fl("BigFile.log");
//boost::regex expr("\\w+>Time Elapsed .*?$", boost::regex::perl);
boost::regex expr("something usefull");
boost::match_flag_type flags = boost::match_default;
boost::iostreams::mapped_file::iterator start, end;
start = fl.begin();
end = fl.end();
boost::match_results<boost::iostreams::mapped_file::iterator> what;
while(boost::regex_search(start, end, what, expr))
{
std::cout<<what[0].str()<<std::endl;
start = what[0].second;
}
return 0;
}
私の要件を実証するため。Python で使用したいのと同じように、C++ (およびブースト) を使用して短いサンプルを作成しました。