把大文件拆成小文件

Signed-off-by: facat@lab.com <facat@lab.com>
This commit is contained in:
facat@lab.com
2014-11-22 16:27:22 +08:00
parent f502f0dc62
commit ccc4c1d90c
6 changed files with 112 additions and 13 deletions

View File

@@ -0,0 +1,75 @@
#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;
if(file.open(QFile::ReadOnly))
{
QTextStream reader(&file);
while(!reader.atEnd())
{
line=reader.readLine();
// std::cout<<line.toStdString()<<std::endl;
if(!isInner && this->startsWith(line,"ConnectivityNode"))
{
block="";
isInner=true;
}
if(isInner)
{
block=block+line+QString("\n");
}
if(isInner && this->endsWith(line,"ConnectivityNode"))
{
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(" "));
}