| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- #include "numberbuilder.h"
- NumberBuilder::NumberBuilder(QStringList list,NumberBuildType buildType)
- {
- this->stop = false;
- this->buildType = buildType;
- this->list = list;
- }
- void NumberBuilder::setRegList(QStringList regList)
- {
- this->regexp_list = regList;
- }
- NumberBuilder::~NumberBuilder()
- {
- qDebug()<<"NumberBuilder dead";
- }
- void NumberBuilder::abort()
- {
- this->stop = true;
- }
- void NumberBuilder::run()
- {
- switch(buildType)
- {
- case NumberFromSegments:
- buildFromSegments();
- break;
- case NumberFromFileImport:
- importFromFiles();
- break;
- case NumberFromFileExtract:
- extractFromFiles();
- break;
- case NumberFromContent:
- extractFromContents();
- break;
- case NumberFromSolution:
- buildFromSolution();
- break;
- default:
- break;
- }
- deleteLater();
- }
- void NumberBuilder::buildFromSegments()
- {
- segments = list;
- int howmany = segments.size();
- for(int i=0;i < howmany ; i++)
- {
- if(!stop)
- {
- QStringList numberList;
- for(int j=0; j<10000; j++)
- {
- QString tail = "000"+QString::number(j);
- numberList << tail.right(4);
- }
- this->numbers.append(numberList);
- numberList.clear();
- }
- else
- {
- return ;
- }
- }
- emit childTaskFinished(segments,numbers);
- }
- void NumberBuilder::buildFromSolution()
- {
- segments = list;
- int howmany = segments.size();
- for(int i=0;i < howmany ; i++)
- {
- if(!stop)
- {
- QStringList numberList;
- for(int j=0; j<10000; j++)
- {
- QString tail = "000"+QString::number(j);
- for(int k=0;k<this->regexp_list.size();k++)
- {
- QRegExp rx(regexp_list.at(k));
- if(rx.exactMatch(segments.at(i)+tail.right(4)))
- {
- numberList << tail.right(4);
- break;
- }
- else
- continue;
- }
- }
- this->numbers.append(numberList);
- numberList.clear();
- }
- else
- {
- return ;
- }
- }
- emit childTaskFinished(segments,numbers);
- }
- void NumberBuilder::importFromList()
- {
- for(int j=0;j<list.size();j++)
- {
- if(stop)
- return ;
- QString line=list.at(j);
- QString segment = line.left(7);
- QString tail = line.mid(7,4);
- bool match;
- match = false;
- for(int i=0;i<segments.size();i++)
- {
- if(segments.at(i)==segment)
- {
- numbers[i].append(tail);
- match = true;
- break;
- }
- }
- if(!match)
- {
- segments<<segment;
- QStringList tmp;
- tmp<<tail;
- numbers.append(tmp);
- }
- }
- emit childTaskFinished(segments,numbers);
- }
- void NumberBuilder::importFromFiles()
- {
- for(int j=0;j<list.size();j++)
- {
- if(stop)
- return ;
- QString fileName = list.at(j);
- QFile file(fileName);
- if(!file.open(QIODevice::ReadOnly))
- {
- break;
- }
- QTextStream in(&file);
- //QString content = in.readAll();
- //file.close();
- //QStringList lines= content.split("\r\n");
- //for(int k=0;k<lines.size();k++)
- while(!in.atEnd())
- {
- QString line=in.readLine();
- QString segment = line.left(7);
- QString tail = line.mid(7,4);
- bool match;
- match = false;
- for(int i=0;i<segments.size();i++)
- {
- if(segments.at(i)==segment)
- {
- numbers[i].append(tail);
- match = true;
- break;
- }
- }
- if(!match)
- {
- segments<<segment;
- QStringList tmp;
- tmp<<tail;
- numbers.append(tmp);
- }
- }
- file.close();
- }
- emit childTaskFinished(segments,numbers);
- }
- void NumberBuilder::extractFromFiles()
- {
- for(int i=0;i<list.size();i++)
- {
- if(stop)
- return ;
- QString fileName = list.at(i);
- QFile file(fileName);
- if(!file.open(QIODevice::ReadOnly))
- {
- break;
- }
- QTextStream in(&file);
- QString content;
- content = in.readAll();
- file.close();
- extractFromContent(content);
- }
- emit childTaskFinished(segments,numbers);
- }
- void NumberBuilder::extractFromContents()
- {
- for(int i=0;i<list.size();i++)
- {
- if(stop)
- return ;
- extractFromContent(list.at(i));
- }
- emit childTaskFinished(segments,numbers);
- }
- QStringList NumberBuilder::extractFromLine(QString line)
- {
- QStringList numbers;
- int count = 0;
- int pos = 0;
- QRegExp rx = NumberReg::getCellPhoneReg();
- while ((pos = rx.indexIn(line, pos)) != -1)
- {
- ++count;
- pos += rx.matchedLength();
- numbers.append(rx.capturedTexts().at(0));
- }
- return numbers;
- }
- void NumberBuilder::extractFromContent(QString content)
- {
- QString number;
- int count = 0;
- int pos = 0;
- QRegExp rx = NumberReg::getCellPhoneReg();
- while ((pos = rx.indexIn(content, pos)) != -1)
- {
- if(stop)
- return ;
- ++count;
- pos += rx.matchedLength();
- number=rx.capturedTexts().at(0);
- QString segment = number.left(7);
- QString tail = number.right(4);
- bool match;
- match = false;
- for(int i=0;i<segments.size();i++)
- {
- if(segments.at(i)==segment)
- {
- numbers[i].append(tail);
- match = true;
- break;
- }
- }
- if(!match)
- {
- segments<<segment;
- QStringList tmp;
- tmp<<tail;
- numbers.append(tmp);
- }
- }
- }
|