把各种元件做出单独的类。

Signed-off-by: facat@lab.com <facat@lab.com>
This commit is contained in:
facat@lab.com 2014-11-22 22:18:18 +08:00
parent ccc4c1d90c
commit 407fe62995
25 changed files with 526 additions and 18 deletions

View File

@ -1,10 +1,25 @@
#include "BasicElementInfo.h"
//#include <iostream>
BasicElementInfo::BasicElementInfo()
{
}
bool BasicElementInfo::derivedParse(QXmlStreamReader& reader)
{
return true;
}
bool BasicElementInfo::parse(QXmlStreamReader &reader)
{
return true;
}
bool BasicElementInfo::parseBasicInfo(QXmlStreamReader &reader)
{
// std::cout<<"father"<<"\n";
// std::cout<<"father"<<"\n";
QStringRef elementName;
QStringRef id;
elementName=reader.name();
@ -14,14 +29,17 @@ bool BasicElementInfo::parseBasicInfo(QXmlStreamReader &reader)
qDebug()<<reader.attributes().value("rdf:ID")<<"\n";
id=reader.attributes().value("rdf:ID");
}
while(!reader.atEnd() && !reader.hasError())
{
reader.readNext();
this->derivedParse(reader);
if(reader.isEndElement() && reader.name()==elementName)
{
break;
}
}
this->name=elementName;
this->id=id;
return true;

View File

@ -5,13 +5,21 @@
#include <QStringRef>
#include <QXmlStreamReader>
#include <QDebug>
class BasicElementInfo;
//typedef bool (BasicElementInfo::*derivedParseHandle)(QXmlStreamReader &reader);
class BasicElementInfo{
public:
BasicElementInfo();
virtual bool parse(QXmlStreamReader &reader);
protected:
bool parseBasicInfo(QXmlStreamReader &reader);
QStringRef name;
QStringRef id;
QString nextLinkString;
QString prevousLinkString;
// derivedParseHandle derivedParse;
virtual bool derivedParse(QXmlStreamReader &reader);
// QString nextLinkString;
// QString prevousLinkString;
};

View File

@ -0,0 +1,38 @@
#include "aclinesegment.h"
ACLineSegment::ACLineSegment():isTerminalA(true)
{
}
bool ACLineSegment::derivedParse(QXmlStreamReader &reader)
{
if(this->isTerminalA && "ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminalA=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->terminalA<<"\n";
this->isTerminalA=false;
}
if(!this->isTerminalA && "ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminalB=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->terminalB<<"\n";
}
if("ConductingEquipment.Substation"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
{
QString ss;
ss=reader.attributes().value("rdf:resource").toString();
this->containsOfSubstation=ss.replace("#","").leftRef(-1);//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Substation "<<this->containsOfSubstation<<"\n";
}
return true;
}
bool ACLineSegment::parse(QXmlStreamReader &reader)
{
return this->parseBasicInfo(reader);
}

View File

@ -0,0 +1,18 @@
#ifndef ACLINESEGMENT_H
#define ACLINESEGMENT_H
#include "BasicElementInfo.h"
class ACLineSegment:public BasicElementInfo
{
public:
ACLineSegment();
virtual bool parse(QXmlStreamReader &reader);
protected:
QStringRef terminalA;
QStringRef terminalB;
QStringRef containsOfSubstation;
virtual bool derivedParse(QXmlStreamReader &reader);
private:
bool isTerminalA;
};
#endif // ACLINESEGMENT_H

37
testHasttable/breaker.cpp Normal file
View File

@ -0,0 +1,37 @@
#include "breaker.h"
Breaker::Breaker()
{
}
bool Breaker::derivedParse(QXmlStreamReader &reader)
{
if(this->isTerminalA && "ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminalA=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->terminalA<<"\n";
this->isTerminalA=false;
}
if(!this->isTerminalA && "ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminalB=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->terminalB<<"\n";
}
if("Equipment.MemberOf_EquipmentContainer"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
{
QString ss;
ss=reader.attributes().value("rdf:resource").toString();
this->equipmentContainer=ss.replace("#","").leftRef(-1);//返回整个字符串的Ref
qDebug()<<"got "<<"Equipment.MemberOf_EquipmentContainer "<<this->equipmentContainer<<"\n";
}
return true;
}
bool Breaker::parse(QXmlStreamReader &reader)
{
return this->parseBasicInfo(reader);
}

19
testHasttable/breaker.h Normal file
View File

@ -0,0 +1,19 @@
#ifndef BREAKER_H
#define BREAKER_H
#include <QXmlStreamReader>
#include "BasicElementInfo.h"
class Breaker:public BasicElementInfo
{
public:
Breaker();
virtual bool parse(QXmlStreamReader& reader);
protected:
QStringRef terminalA;
QStringRef terminalB;
QStringRef equipmentContainer;
virtual bool derivedParse(QXmlStreamReader& reader);
private:
bool isTerminalA;
};
#endif // BREAKER_H

View File

@ -0,0 +1,23 @@
#include "busbarsection.h"
BusbarSection::BusbarSection()
{
}
bool BusbarSection::derivedParse(QXmlStreamReader& reader)
{
if("ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminal=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->terminal<<"\n";
}
return true;
}
bool BusbarSection::parse(QXmlStreamReader& reader)
{
return this->parseBasicInfo(reader);
}

View File

@ -0,0 +1,15 @@
#ifndef BUSBARSECTION_H
#define BUSBARSECTION_H
#include <QXmlStreamReader>
#include "BasicElementInfo.h"
class BusbarSection:public BasicElementInfo
{
public:
BusbarSection();
virtual bool parse(QXmlStreamReader& reader);
protected:
QStringRef terminal;
virtual bool derivedParse(QXmlStreamReader& reader);
};
#endif // BUSBARSECTION_H

View File

@ -0,0 +1,23 @@
#include "compensator.h"
Compensator::Compensator()
{
}
bool Compensator::derivedParse(QXmlStreamReader &reader)
{
if("ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminal=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->terminal<<"\n";
}
return true;
}
bool Compensator::parse(QXmlStreamReader &reader)
{
return this->parseBasicInfo(reader);
}

View File

@ -0,0 +1,16 @@
#ifndef COMPENSATOR_H
#define COMPENSATOR_H
#include <QXmlStreamReader>
#include "BasicElementInfo.h"
class Compensator:public BasicElementInfo
{
public:
Compensator();
virtual bool parse(QXmlStreamReader& reader);
protected:
virtual bool derivedParse(QXmlStreamReader& reader);
private:
QStringRef terminal;
};
#endif // COMPENSATOR_H

View File

@ -0,0 +1,38 @@
#include "disconnector.h"
Disconnector::Disconnector()
{
}
bool Disconnector::derivedParse(QXmlStreamReader &reader)
{
if(this->isTerminalA && "ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminalA=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->terminalA<<"\n";
this->isTerminalA=false;
}
if(!this->isTerminalA && "ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminalB=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->terminalB<<"\n";
}
if("Equipment.MemberOf_EquipmentContainer"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
{
QString ss;
ss=reader.attributes().value("rdf:resource").toString();
this->equipmentContainer=ss.replace("#","").leftRef(-1);//返回整个字符串的Ref
qDebug()<<"got "<<"Equipment.MemberOf_EquipmentContainer "<<this->equipmentContainer<<"\n";
}
return true;
}
bool Disconnector::parse(QXmlStreamReader &reader)
{
return this->parseBasicInfo(reader);
}

View File

@ -0,0 +1,19 @@
#ifndef DISCONNECTOR_H
#define DISCONNECTOR_H
#include "BasicElementInfo.h"
#include <QXmlStreamReader>
class Disconnector:public BasicElementInfo
{
public:
Disconnector();
virtual bool parse(QXmlStreamReader& reader);
protected:
QStringRef terminalA;
QStringRef terminalB;
QStringRef equipmentContainer;
virtual bool derivedParse(QXmlStreamReader& reader);
private:
bool isTerminalA;
};
#endif // DISCONNECTOR_H

View File

@ -12,12 +12,47 @@ bool ElementHashtable::child(QXmlStreamReader &reader)
QStringRef elementName;
elementName=reader.name();
BasicElementInfo *pointer=NULL;
// if(elementName.toString()=="SubControlArea")
// {
// SubControlArea sa;
// pointer=&sa;
// sa.parse(reader);
// }
if(elementName=="BusbarSection")
{
pointer=new BusbarSection;
pointer->parse(reader);
}
if(elementName=="Terminal")
{
pointer=new Terminal;
pointer->parse(reader);
}
if(elementName=="ACLineSegment")
{
pointer=new ACLineSegment;
pointer->parse(reader);
}
if(elementName=="Breaker")
{
pointer=new Breaker;
pointer->parse(reader);
}
if(elementName=="Compensator")
{
pointer=new Compensator;
pointer->parse(reader);
}
if(elementName=="Disconnector")
{
pointer=new Disconnector;
pointer->parse(reader);
}
if(elementName=="PowerTransformer")
{
pointer=new PowerTransformer;
pointer->parse(reader);
}
if(elementName=="SynchronousMachine")
{
pointer=new SynchronousMachine;
pointer->parse(reader);
}
if(pointer)
{
@ -45,7 +80,6 @@ bool ElementHashtable::parse(const QString& xmlPath)
}
this->child(reader);//处理根元素下的第一级子元素也就是Substation这一类。
}
loop++;
if(loop>20){

View File

@ -9,6 +9,14 @@
#include <QHash>
#include "BasicElementInfo.h"
#include "subcontrolarea.h"
#include "busbarsection.h"
#include "terminal.h"
#include "aclinesegment.h"
#include "breaker.h"
#include "compensator.h"
#include "disconnector.h"
#include "powertransformer.h"
#include "synchronousmachine.h"
class ElementHashtable : public QObject
{
Q_OBJECT

View File

@ -6,10 +6,10 @@ int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
ElementHashtable eleReader;
// eleReader.parse("D:/Project/佛山项目/佛山收资/exportmodel_pw/df8003/df8600/exportfiles/exportmodel_pw.xml");
RegexExtract regexExt;
regexExt.extract("D:/Project/佛山项目/佛山收资/exportmodel_pw/df8003/df8600/exportfiles/exportmodel_pw.xml");
regexExt.exportBlocks("ConnectivityNode.xml");
eleReader.parse("D:/Project/佛山项目/佛山收资/exportmodel_pw/df8003/df8600/exportfiles/exportmodel_pw.xml");
// RegexExtract regexExt;
// regexExt.extract("D:/Project/佛山项目/佛山收资/exportmodel_pw/df8003/df8600/exportfiles/exportmodel_pw.xml");
// regexExt.exportBlocks("ThermalGeneratingUnit.xml");
std::cout<<"Finished."<<std::endl;
return a.exec();
}

View File

@ -0,0 +1,16 @@
INPUT(
./debug/main.o
./debug/elementhashtable.o
./debug/subcontrolarea.o
./debug/BasicElementInfo.o
./debug/regexextract.o
./debug/busbarsection.o
./debug/terminal.o
./debug/aclinesegment.o
./debug/breaker.o
./debug/compensator.o
./debug/disconnector.o
./debug/powertransformer.o
./debug/synchronousmachine.o
./debug/moc_elementhashtable.o
);

View File

@ -0,0 +1,16 @@
INPUT(
./release/main.o
./release/elementhashtable.o
./release/subcontrolarea.o
./release/BasicElementInfo.o
./release/regexextract.o
./release/busbarsection.o
./release/terminal.o
./release/aclinesegment.o
./release/breaker.o
./release/compensator.o
./release/disconnector.o
./release/powertransformer.o
./release/synchronousmachine.o
./release/moc_elementhashtable.o
);

View File

@ -0,0 +1,38 @@
#include "powertransformer.h"
PowerTransformer::PowerTransformer()
{
}
bool PowerTransformer::derivedParse(QXmlStreamReader &reader)
{
if(this->isTerminalA && "ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminalA=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->terminalA<<"\n";
this->isTerminalA=false;
}
if(!this->isTerminalA && "ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminalB=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->terminalB<<"\n";
}
if("Equipment.MemberOf_EquipmentContainer"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
{
QString ss;
ss=reader.attributes().value("rdf:resource").toString();
this->equipmentContainer=ss.replace("#","").leftRef(-1);//返回整个字符串的Ref
qDebug()<<"got "<<"Equipment.MemberOf_EquipmentContainer "<<this->equipmentContainer<<"\n";
}
return true;
}
bool PowerTransformer::parse(QXmlStreamReader &reader)
{
return this->parseBasicInfo(reader);
}

View File

@ -0,0 +1,19 @@
#ifndef POWERTRANSFORMER_H
#define POWERTRANSFORMER_H
#include "BasicElementInfo.h"
#include <QXmlStreamReader>
class PowerTransformer:public BasicElementInfo
{
public:
PowerTransformer();
virtual bool parse(QXmlStreamReader& reader);
protected:
QStringRef terminalA;
QStringRef terminalB;
QStringRef equipmentContainer;
virtual bool derivedParse(QXmlStreamReader& reader);
private:
bool isTerminalA;
};
#endif // POWERTRANSFORMER_H

View File

@ -36,14 +36,20 @@ bool RegexExtract::extract(const QString& 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,"ConnectivityNode"))
if(!isInner && this->startsWith(line,"ThermalGeneratingUnit"))
{
block="";
isInner=true;
@ -52,7 +58,7 @@ bool RegexExtract::extract(const QString& xmlPath)
{
block=block+line+QString("\n");
}
if(isInner && this->endsWith(line,"ConnectivityNode"))
if(isInner && this->endsWith(line,"ThermalGeneratingUnit"))
{
isInner=false;
this->blocks.push_back(block);

View File

@ -0,0 +1,22 @@
#include "synchronousmachine.h"
SynchronousMachine::SynchronousMachine()
{
}
bool SynchronousMachine::derivedParse(QXmlStreamReader &reader)
{
if("ConductingEquipment.Terminals"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
{
QString terminal;
terminal=reader.attributes().value("rdf:resource").toString();
this->terminal=terminal.replace("#","").leftRef(-1);//返回整个字符串的Ref
qDebug()<<"got "<<"ConductingEquipment.Terminals "<<this->terminal<<"\n";
}
return true;
}
bool SynchronousMachine::parse(QXmlStreamReader &reader)
{
return this->parseBasicInfo(reader);
}

View File

@ -0,0 +1,15 @@
#ifndef SYNCHRONOUSMACHINE_H
#define SYNCHRONOUSMACHINE_H
#include <QXmlStreamReader>
#include "BasicElementInfo.h"
class SynchronousMachine:public BasicElementInfo
{
public:
SynchronousMachine();
virtual bool parse(QXmlStreamReader& reader);
protected:
QStringRef terminal;
virtual bool derivedParse(QXmlStreamReader& reader);
};
#endif // SYNCHRONOUSMACHINE_H

View File

@ -0,0 +1,30 @@
#include "terminal.h"
Terminal::Terminal()
{
}
bool Terminal::derivedParse(QXmlStreamReader& reader)
{
if("Terminal.ConnectivityNode"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
{
QString cn;
cn=reader.attributes().value("rdf:resource").toString();
this->connectivityNode=cn.replace("#","").leftRef(-1);//返回整个字符串的Ref
qDebug()<<"got "<<"Terminal.ConnectivityNode "<<this->connectivityNode<<"\n";
}
if("Terminal.ConductingEquipment"==reader.name() && reader.attributes().hasAttribute("rdf:resource"))
{
QString ce;
ce=reader.attributes().value("rdf:resource").toString();
this->conductingEquipment=ce.replace("#","").leftRef(-1);//返回整个字符串的Ref
qDebug()<<"got "<<"Terminal.ConductingEquipment "<<this->conductingEquipment<<"\n";
}
return true;
}
bool Terminal::parse(QXmlStreamReader& reader)
{
return this->parseBasicInfo(reader);
}

16
testHasttable/terminal.h Normal file
View File

@ -0,0 +1,16 @@
#ifndef TERMINAL_H
#define TERMINAL_H
#include <QXmlStreamReader>
#include "BasicElementInfo.h"
class Terminal:public BasicElementInfo
{
public:
Terminal();
virtual bool parse(QXmlStreamReader& reader);
protected:
virtual bool derivedParse(QXmlStreamReader& reader);
QStringRef conductingEquipment;
QStringRef connectivityNode;
};
#endif // TERMINAL_H

View File

@ -20,13 +20,29 @@ SOURCES += main.cpp \
elementhashtable.cpp \
subcontrolarea.cpp \
BasicElementInfo.cpp \
regexextract.cpp
regexextract.cpp \
busbarsection.cpp \
terminal.cpp \
aclinesegment.cpp \
breaker.cpp \
compensator.cpp \
disconnector.cpp \
powertransformer.cpp \
synchronousmachine.cpp
HEADERS += \
elementhashtable.h \
BasicElementInfo.h \
subcontrolarea.h \
regexextract.h
regexextract.h \
busbarsection.h \
terminal.h \
aclinesegment.h \
breaker.h \
compensator.h \
disconnector.h \
powertransformer.h \
synchronousmachine.h
#release{
#DEFINES += QT_NO_DEBUG_OUTPUT