numbermove.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #include "numbermove.h"
  2. NumberMove::NumberMove(QStringList sourceSegments, QList<QStringList> sourceNumbers, NumberMoveType moveType)
  3. {
  4. this->sourceSegments = sourceSegments;
  5. this->sourceNumbers = sourceNumbers;
  6. this->moveType = moveType;
  7. this->stop = false;
  8. }
  9. NumberMove::~NumberMove()
  10. {
  11. qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")\
  12. <<"NumberMove Destroyed.";
  13. }
  14. void NumberMove::setRange(QString range1, QString range2)
  15. {
  16. this->range1 = range1;
  17. this->range2 = range2;
  18. }
  19. void NumberMove::setRegex(QList<QRegExp> regexpList)
  20. {
  21. this->regexpList = regexpList;
  22. }
  23. void NumberMove::abort()
  24. {
  25. this->stop = true;
  26. }
  27. void NumberMove::run()
  28. {
  29. switch(moveType)
  30. {
  31. case MoveByAll:
  32. moveByAll();
  33. break;
  34. case MoveByRange:
  35. moveByRange();
  36. break;
  37. case MoveByRegex:
  38. moveByRegex();
  39. break;
  40. default:
  41. break;
  42. }
  43. }
  44. void NumberMove::moveByRange()
  45. {
  46. QString number;
  47. QString segment;
  48. destSegments = sourceSegments;
  49. destNumbers = sourceNumbers ;
  50. for(int i=0;i<sourceSegments.size();i++)
  51. {
  52. destNumbers[i].clear();
  53. }
  54. for(int i=0;i<this->sourceSegments.size();i++)
  55. {
  56. if(stop)
  57. return ;
  58. msleep(10);
  59. segment = sourceSegments.at(i);
  60. for(int j=0;j<sourceNumbers.at(i).size();j++)
  61. {
  62. number = segment+this->sourceNumbers.at(i).at(j);
  63. if (number>=this->range1 && number<=range2)
  64. {
  65. QString tail = this->sourceNumbers.at(i).at(j);
  66. destNumbers[i]<<tail;
  67. this->sourceNumbers[i].removeAt(j);
  68. j--;
  69. }
  70. }
  71. }
  72. for(int i=0;i<sourceSegments.size();i++)
  73. {
  74. if(sourceNumbers[i].size()==0)
  75. {
  76. sourceSegments.removeAt(i);
  77. sourceNumbers.removeAt(i);
  78. i--;
  79. }
  80. }
  81. for(int i=0;i<destSegments.size();i++)
  82. {
  83. if(destNumbers[i].size()==0)
  84. {
  85. destSegments.removeAt(i);
  86. destNumbers.removeAt(i);
  87. i--;
  88. }
  89. }
  90. emit childTaskFinished(sourceSegments,sourceNumbers,destSegments,destNumbers);
  91. }
  92. void NumberMove::moveByAll()
  93. {
  94. destSegments = sourceSegments;
  95. destNumbers = sourceNumbers ;
  96. sourceSegments.clear();
  97. sourceNumbers.clear();
  98. emit childTaskFinished(sourceSegments,sourceNumbers,destSegments,destNumbers);
  99. }
  100. void NumberMove::moveByRegex()
  101. {
  102. QString number;
  103. QString segment;
  104. destSegments = sourceSegments;
  105. destNumbers = sourceNumbers ;
  106. for(int i=0;i<sourceSegments.size();i++)
  107. {
  108. destNumbers[i].clear();
  109. }
  110. for(int i=0;i<this->sourceSegments.size();i++)
  111. {
  112. if(stop)
  113. return ;
  114. msleep(10);
  115. segment = sourceSegments.at(i);
  116. for(int j=0;j<sourceNumbers.at(i).size();j++)
  117. {
  118. number = segment+this->sourceNumbers.at(i).at(j);
  119. bool allmatch = true ;
  120. for(int k=0;k<this->regexpList.size();k++)
  121. {
  122. //qDebug()<<regexpList.at(k).pattern();
  123. QRegExp regexp = this->regexpList.at(k);
  124. if(regexp.exactMatch(number))
  125. {
  126. continue;
  127. }
  128. else
  129. {
  130. allmatch = false ;
  131. break;
  132. }
  133. }
  134. if (allmatch)
  135. {
  136. QString tail = this->sourceNumbers.at(i).at(j);
  137. destNumbers[i]<<tail;
  138. this->sourceNumbers[i].removeAt(j);
  139. j--;
  140. }
  141. }
  142. }
  143. for(int i=0;i<sourceSegments.size();i++)
  144. {
  145. if(sourceNumbers[i].size()==0)
  146. {
  147. sourceSegments.removeAt(i);
  148. sourceNumbers.removeAt(i);
  149. i--;
  150. }
  151. }
  152. for(int i=0;i<destSegments.size();i++)
  153. {
  154. if(destNumbers[i].size()==0)
  155. {
  156. destSegments.removeAt(i);
  157. destNumbers.removeAt(i);
  158. i--;
  159. }
  160. }
  161. emit childTaskFinished(sourceSegments,sourceNumbers,destSegments,destNumbers);
  162. }