cimforreduceloss/testHasttable/regexextract.cpp

82 lines
1.8 KiB
C++
Raw Permalink Normal View History

#include "regexextract.h"
#include <iostream>
RegexExtract::RegexExtract()
{
}
bool RegexExtract::endsWith(const QString& line,const QString& eleName)
{
QString t=line.trimmed();
return t.startsWith(QString("</cim:")+eleName+QString(">"));
}
void RegexExtract::exportBlocks(const QString& path)
{
QFile file(path);
std::cout<<"writing..."<<std::endl;
if(file.open(QFile::WriteOnly))
{
QTextStream writer(&file);
for(QStringList::iterator ite=this->blocks.begin();
ite!=this->blocks.end();
ite++)
{
writer<<*ite;
}
file.close();
}
}
bool RegexExtract::extract(const QString& xmlPath)
{
QFile file(xmlPath);
QString line;
QString block;
bool isInner=false;
int lineNum=0;
if(file.open(QFile::ReadOnly))
{
QTextStream reader(&file);
while(!reader.atEnd())
{
line=reader.readLine();
lineNum++;
if(lineNum%100000==0)
{
std::cout<<lineNum<<std::endl;
}
// std::cout<<line.toStdString()<<std::endl;
if(!isInner && this->startsWith(line,"SynchronousMachine"))
{
block="";
isInner=true;
}
if(isInner)
{
block=block+line+QString("\n");
}
if(isInner && this->endsWith(line,"SynchronousMachine"))
{
isInner=false;
this->blocks.push_back(block);
// std::cout<<block.toStdString()<<std::endl;
}
}
file.close();
}
return true;
}
bool RegexExtract::startsWith(const QString& line,const QString& eleName)
{
QString t=line.trimmed();
return t.startsWith(QString("<cim:")+eleName+QString(" "));
}