numberbuilder.cpp 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. #include "numberbuilder.h"
  2. NumberBuilder::NumberBuilder(QStringList list,NumberBuildType buildType)
  3. {
  4. this->stop = false;
  5. this->buildType = buildType;
  6. this->list = list;
  7. }
  8. void NumberBuilder::setRegList(QStringList regList)
  9. {
  10. this->regexp_list = regList;
  11. }
  12. NumberBuilder::~NumberBuilder()
  13. {
  14. qDebug()<<"NumberBuilder dead";
  15. }
  16. void NumberBuilder::abort()
  17. {
  18. this->stop = true;
  19. }
  20. void NumberBuilder::run()
  21. {
  22. switch(buildType)
  23. {
  24. case NumberFromSegments:
  25. buildFromSegments();
  26. break;
  27. case NumberFromFileImport:
  28. importFromFiles();
  29. break;
  30. case NumberFromFileExtract:
  31. extractFromFiles();
  32. break;
  33. case NumberFromContent:
  34. extractFromContents();
  35. break;
  36. case NumberFromSolution:
  37. buildFromSolution();
  38. break;
  39. default:
  40. break;
  41. }
  42. deleteLater();
  43. }
  44. void NumberBuilder::buildFromSegments()
  45. {
  46. segments = list;
  47. int howmany = segments.size();
  48. for(int i=0;i < howmany ; i++)
  49. {
  50. if(!stop)
  51. {
  52. QStringList numberList;
  53. for(int j=0; j<10000; j++)
  54. {
  55. QString tail = "000"+QString::number(j);
  56. numberList << tail.right(4);
  57. }
  58. this->numbers.append(numberList);
  59. numberList.clear();
  60. }
  61. else
  62. {
  63. return ;
  64. }
  65. }
  66. emit childTaskFinished(segments,numbers);
  67. }
  68. void NumberBuilder::buildFromSolution()
  69. {
  70. segments = list;
  71. int howmany = segments.size();
  72. for(int i=0;i < howmany ; i++)
  73. {
  74. if(!stop)
  75. {
  76. QStringList numberList;
  77. for(int j=0; j<10000; j++)
  78. {
  79. QString tail = "000"+QString::number(j);
  80. for(int k=0;k<this->regexp_list.size();k++)
  81. {
  82. QRegExp rx(regexp_list.at(k));
  83. if(rx.exactMatch(segments.at(i)+tail.right(4)))
  84. {
  85. numberList << tail.right(4);
  86. break;
  87. }
  88. else
  89. continue;
  90. }
  91. }
  92. this->numbers.append(numberList);
  93. numberList.clear();
  94. }
  95. else
  96. {
  97. return ;
  98. }
  99. }
  100. emit childTaskFinished(segments,numbers);
  101. }
  102. void NumberBuilder::importFromList()
  103. {
  104. for(int j=0;j<list.size();j++)
  105. {
  106. if(stop)
  107. return ;
  108. QString line=list.at(j);
  109. QString segment = line.left(7);
  110. QString tail = line.mid(7,4);
  111. bool match;
  112. match = false;
  113. for(int i=0;i<segments.size();i++)
  114. {
  115. if(segments.at(i)==segment)
  116. {
  117. numbers[i].append(tail);
  118. match = true;
  119. break;
  120. }
  121. }
  122. if(!match)
  123. {
  124. segments<<segment;
  125. QStringList tmp;
  126. tmp<<tail;
  127. numbers.append(tmp);
  128. }
  129. }
  130. emit childTaskFinished(segments,numbers);
  131. }
  132. void NumberBuilder::importFromFiles()
  133. {
  134. for(int j=0;j<list.size();j++)
  135. {
  136. if(stop)
  137. return ;
  138. QString fileName = list.at(j);
  139. QFile file(fileName);
  140. if(!file.open(QIODevice::ReadOnly))
  141. {
  142. break;
  143. }
  144. QTextStream in(&file);
  145. //QString content = in.readAll();
  146. //file.close();
  147. //QStringList lines= content.split("\r\n");
  148. //for(int k=0;k<lines.size();k++)
  149. while(!in.atEnd())
  150. {
  151. QString line=in.readLine();
  152. QString segment = line.left(7);
  153. QString tail = line.mid(7,4);
  154. bool match;
  155. match = false;
  156. for(int i=0;i<segments.size();i++)
  157. {
  158. if(segments.at(i)==segment)
  159. {
  160. numbers[i].append(tail);
  161. match = true;
  162. break;
  163. }
  164. }
  165. if(!match)
  166. {
  167. segments<<segment;
  168. QStringList tmp;
  169. tmp<<tail;
  170. numbers.append(tmp);
  171. }
  172. }
  173. file.close();
  174. }
  175. emit childTaskFinished(segments,numbers);
  176. }
  177. void NumberBuilder::extractFromFiles()
  178. {
  179. for(int i=0;i<list.size();i++)
  180. {
  181. if(stop)
  182. return ;
  183. QString fileName = list.at(i);
  184. QFile file(fileName);
  185. if(!file.open(QIODevice::ReadOnly))
  186. {
  187. break;
  188. }
  189. QTextStream in(&file);
  190. QString content;
  191. content = in.readAll();
  192. file.close();
  193. extractFromContent(content);
  194. }
  195. emit childTaskFinished(segments,numbers);
  196. }
  197. void NumberBuilder::extractFromContents()
  198. {
  199. for(int i=0;i<list.size();i++)
  200. {
  201. if(stop)
  202. return ;
  203. extractFromContent(list.at(i));
  204. }
  205. emit childTaskFinished(segments,numbers);
  206. }
  207. QStringList NumberBuilder::extractFromLine(QString line)
  208. {
  209. QStringList numbers;
  210. int count = 0;
  211. int pos = 0;
  212. QRegExp rx = NumberReg::getCellPhoneReg();
  213. while ((pos = rx.indexIn(line, pos)) != -1)
  214. {
  215. ++count;
  216. pos += rx.matchedLength();
  217. numbers.append(rx.capturedTexts().at(0));
  218. }
  219. return numbers;
  220. }
  221. void NumberBuilder::extractFromContent(QString content)
  222. {
  223. QString number;
  224. int count = 0;
  225. int pos = 0;
  226. QRegExp rx = NumberReg::getCellPhoneReg();
  227. while ((pos = rx.indexIn(content, pos)) != -1)
  228. {
  229. if(stop)
  230. return ;
  231. ++count;
  232. pos += rx.matchedLength();
  233. number=rx.capturedTexts().at(0);
  234. QString segment = number.left(7);
  235. QString tail = number.right(4);
  236. bool match;
  237. match = false;
  238. for(int i=0;i<segments.size();i++)
  239. {
  240. if(segments.at(i)==segment)
  241. {
  242. numbers[i].append(tail);
  243. match = true;
  244. break;
  245. }
  246. }
  247. if(!match)
  248. {
  249. segments<<segment;
  250. QStringList tmp;
  251. tmp<<tail;
  252. numbers.append(tmp);
  253. }
  254. }
  255. }