#include "filecompare.h" FileCompare::FileCompare(QStringList fileNames, FileCompareType compareType) { this->fileNames = fileNames; this->compareType = compareType; if(this->compareType == Export2File || this->compareType == Export3File) { this->step1Progress = 20; this->step2Progress = 30; this->step3Progress = 50; } else if(this->compareType == IntegrateFile) { this->step1Progress = 100; } } FileCompare::~FileCompare() { qDebug()< modelList) { this->modelList = modelList; } void FileCompare::setExportDir(QString dir) { this->exportDir = dir; } void FileCompare::run() { switch(compareType) { case Export2File: export2File(); break; case Export3File: export3File(); break; case IntegrateFile: integrateFile(); break; default: break; } //deleteLater(); } void FileCompare::export2File() { emit progressMaxUpdated(100); QTime time; time.start(); NumberListModel *modell; NumberListModel *model2; modell=modelList.at(0);//加载数据到内存 model2=modelList.at(1);//加载数据到内存 modell->mergeSegment(); model2->mergeSegment(); QStringList segments1,segments2; QList numbers1,numbers2; segments1 = modell->getSegments(); segments2 = model2->getSegments(); numbers1 = modell->getNumbers(); numbers2 = model2->getNumbers(); QString fileName1 = fileNames.at(0); QString fileName2 = fileNames.at(1); QFileInfo fileinfo1(fileName1); QFileInfo fileinfo2(fileName2); QStringList resultList; QString intersection = this->exportDir+"/"+fileinfo1.baseName()+"_"+fileinfo2.baseName()+"_交集_.txt"; QFile fileIntersection(intersection); if(!fileIntersection.open(QIODevice::WriteOnly)) return ; QTextStream outIntersection(&fileIntersection); for(int i=0;istep1Progress*s1/s2); for(int j=0;jexportDir+"/"+fileinfo1.baseName()+"_"+fileinfo2.baseName()+"_去除交集_.txt"; QFile fileRemoveIntersection(removeIntersection); if(!fileRemoveIntersection.open(QIODevice::WriteOnly)) return ; QTextStream outFileRemoveIntersection(&fileRemoveIntersection); for(int i=0;istep1Progress+this->step2Progress*s1/s2); for(int j=0;jstep1Progress+this->step2Progress+this->step3Progress*s1/s2); for(int j=0;jstep1Progress+step2Progress+step3Progress); emit fileCompared(resultList); } void FileCompare::export3File() { emit progressMaxUpdated(100); QTime time; time.start(); NumberListModel *modell; NumberListModel *model2; modell=modelList.at(0);//加载数据到内存 model2=modelList.at(1);//加载数据到内存 modell->mergeSegment(); model2->mergeSegment(); QStringList segments1,segments2; QList numbers1,numbers2; segments1 = modell->getSegments(); segments2 = model2->getSegments(); numbers1 = modell->getNumbers(); numbers2 = model2->getNumbers(); QString fileName1 = fileNames.at(0); QString fileName2 = fileNames.at(1); QFileInfo fileinfo1(fileName1); QFileInfo fileinfo2(fileName2); QStringList resultList; QString intersection = this->exportDir+"/"+fileinfo1.baseName()+"_"+fileinfo2.baseName()+"_交集_.txt"; QFile fileIntersection(intersection); if(!fileIntersection.open(QIODevice::WriteOnly)) return ; QTextStream outIntersection(&fileIntersection); for(int i=0;istep1Progress*s1/s2); for(int j=0;jexportDir+"/"+fileinfo1.baseName()+"_去除交集_.txt"; QFile fileRemoveIntersection1(removeIntersection1); if(!fileRemoveIntersection1.open(QIODevice::WriteOnly)) return ; QTextStream outRemoveIntersection1(&fileRemoveIntersection1); for(int i=0;istep1Progress+step2Progress*s1/s2); for(int j=0;jexportDir+"/"+fileinfo2.baseName()+"_去除交集_.txt"; QFile fileRemoveIntersection2(removeIntersection2); if(!fileRemoveIntersection2.open(QIODevice::WriteOnly)) return ; QTextStream outRemoveIntersection2(&fileRemoveIntersection2); for(int i=0;istep1Progress+step2Progress+step3Progress*s1/s2); for(int j=0;jstep1Progress+step2Progress+step3Progress); fileRemoveIntersection2.close(); resultList<exportDir+"/"+"整合后文件.txt"); resultList<exportDir+"/"+"整合后文件.txt"; if(!file.open(QIODevice::WriteOnly)) return ; int counter = 0; for(int i=0;igetCount(); } int progress = 0; QTextStream out(&file); for(int i=0;igetSegments().size();j++) { QString segment = model->getSegments().at(j); for(int k=0;kgetNumbers().at(j).size();k++ ) { QString number = model->getNumbers().at(j).at(k); out<0)||progress>=counter) { double s1 = progress; double s2 = counter; emit progressUpdated(this->step1Progress*s1/s2); } } } } file.close(); emit progressUpdated(this->step1Progress); emit fileIntegrated(resultList); }