Advertisement
Guest User

Untitled

a guest
Dec 17th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.32 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <stdlib.h>
  3. #include <iostream>
  4. #include <fstream>
  5. #include "stdio.h"
  6. #include <vector>
  7. #include <string>
  8.  
  9. struct File
  10. {
  11. std::string name;
  12. std::string extension;
  13. int bytes;
  14. int pos;
  15. File *next;
  16. friend void operator -(File & lfl);
  17. friend void operator +(File &, File const& );
  18. File()
  19. {
  20. std::string name = "";
  21. std::string extension = "";
  22. int bytes = 0;
  23. int pos=this-next;
  24. File *next=NULL;
  25. }
  26. ~File()
  27. {next=NULL;}
  28. File(File const& fl)
  29. {
  30. this->name=fl.name;
  31. this->extension=fl.extension;
  32. this->bytes=fl.bytes;
  33. this->pos=fl.pos;
  34. this->next=fl.next;
  35. }
  36. File operator =(File const& frm)
  37. {
  38. this->name = frm.name;
  39. this->extension = frm.extension;
  40. this->bytes = frm.bytes;
  41. this->pos = frm.pos;
  42. this->next = frm.next;
  43. return *this;
  44. }
  45. void AddElement(int n,File & rfl)
  46.  
  47. //File *previous = this;
  48. //while (previous->pos != ((File*)previous->pos)->pos)
  49. // previous = (File*)((File*)previous->pos)->pos;
  50. //previous = (File*)((File*)previous->pos)->pos;
  51. // //уходим в начало
  52.  
  53. //if (previous->next != NULL) //если текущий элемент не последний
  54. //if (previous->next->next != NULL) //и следующий за ним не последний
  55. //{
  56. // File *to_del = previous->next;
  57. // previous->next = previous->next->next;
  58. // to_del->~File();
  59. //}
  60. {
  61. //File temp;
  62. //bool flag = false;
  63. //temp = this->next == NULL ? temp = *this: *(this->next); //сохраняем адрес следующего элемента (в случае, если вставляем в середину)
  64. //flag = this->pos != (int)NULL ? true : false;
  65.  
  66. File *previous = this;
  67. //while (previous->pos != (int)NULL)
  68. while(previous->pos!=((File*)previous->pos)->pos)
  69. previous = (File*)(previous->pos);
  70.  
  71. for(int i = 0; i < n; i++)
  72. {
  73. previous = previous->next;
  74. if(previous == NULL)
  75. return;
  76. }
  77. previous = (File*)(previous->pos);
  78. File *temp = previous->next;
  79. /*if(previous->next != NULL)
  80. temp = previous->next;
  81. else return;*/
  82.  
  83. previous->next = new File;
  84. previous->next->name = rfl.name;
  85. previous->next->extension = rfl.extension;
  86. previous->next->bytes = rfl.bytes;
  87. previous->next->next = temp;
  88.  
  89.  
  90. }
  91. };
  92. File FileAdd()
  93. {
  94. File temp;
  95. bool right = false;
  96. std::cout<<"Enter file name"<<std::endl;
  97. std::cin >> temp.name;
  98. std::cout<<"Enter file extension"<<std::endl;
  99. std::cin >> temp.extension ;
  100. while (!right){
  101. std::cout<<"Enter file byte"<<std::endl;
  102. try{
  103. std::string str;
  104. std::cin >> str;
  105. temp.bytes = std::stoi(str);
  106. break;
  107. }
  108. catch (...)
  109. {
  110. continue;
  111. }
  112. }
  113. return temp;
  114.  
  115. }
  116. void operator -(File & lfl)
  117. {
  118. File *previous = &lfl;
  119. while (previous->next->next != NULL)
  120. previous = previous->next;
  121. delete previous->next;
  122. previous->next = NULL;
  123. }
  124. void operator +(File &lfl, File const& rfl)
  125. {
  126. File temp;
  127. bool flag = false;
  128. // temp = lfl.next == NULL ? temp = lfl : *lfl.next; //сохраняем адрес следующего элемента (в случае, если вставляем в середину)
  129. File *templfl = &lfl;
  130. flag = templfl != NULL ? true : false;
  131. if (flag){
  132. //lfl.next = new File; //выделяем новую память
  133. //lfl.next->name = rfl.name; //пишем туда название
  134. //lfl.next->extension = rfl.extension; //
  135. //lfl.next->bytes = rfl.bytes; //
  136. //lfl.next->next = NULL; // адрес следующего элемента (в случае, если вставляем в середину)
  137. //lfl.pos = rfl.pos;
  138. //выделяем новую память
  139. templfl->name = rfl.name; //пишем туда название
  140. templfl->extension = rfl.extension; //
  141. templfl->bytes = rfl.bytes; //
  142. templfl->next = new File; // адрес следующего элемента (в случае, если вставляем в середину)
  143. templfl->pos = rfl.pos;
  144. }
  145. else
  146. {
  147. templfl = new File;
  148. templfl->name = rfl.name; //пишем туда название
  149. templfl->extension = rfl.extension; //
  150. templfl->bytes = rfl.bytes; //
  151. templfl->next = NULL; // адрес следующего элемента (в случае, если вставляем в середину)
  152. templfl->pos = rfl.pos;
  153. //File* temp_ptr;
  154. //temp_ptr = lfl.next;
  155. //lfl.next = new File;
  156. //lfl = *lfl.next;
  157.  
  158. //lfl.name = rfl.name; //пишем туда название
  159. //lfl.extension = rfl.extension; // адрес
  160. //lfl.bytes = rfl.bytes; // количество сотрудников
  161. //lfl.next = temp_ptr; // адрес следующего элемента (в случае, если вставляем в середину)
  162. //lfl.pos = rfl.pos;
  163.  
  164. //
  165. // //выделяем новую память
  166. //lfl.name = rfl.name; //пишем туда название
  167. //lfl.extension = rfl.extension; // адрес
  168. //lfl.bytes = rfl.bytes; // количество сотрудников
  169. //lfl.next = new File; // адрес следующего элемента (в случае, если вставляем в середину)
  170. //lfl.pos = rfl.pos;
  171. /**/
  172. /*File* l_ptr = &lfl;
  173. while(l_ptr->next !=NULL)
  174. l_ptr=l_ptr->next;
  175. l_ptr->next=new File;
  176. l_ptr=l_ptr->next;
  177. l_ptr->name=rfl.name;
  178. l_ptr->extension=rfl.extension;
  179. l_ptr->bytes=rfl.bytes;
  180. l_ptr->next=NULL;
  181. l_ptr->pos=rfl.pos;*/
  182.  
  183. }
  184. }
  185. class ReadingBase
  186. {
  187. public: int length;
  188. /*protected:*/ char* content;
  189. std::fstream basefile;
  190. public:
  191. friend File* Parse(ReadingBase &);
  192. ReadingBase()
  193. {
  194. try
  195. {
  196. basefile.open("basefile.txt", std::ios::out | std::ios::in);
  197. }
  198. catch(...)
  199. {
  200. std::cout<<"Ошибка открытия файла"<<std::endl;
  201. }
  202. basefile.seekg(0, basefile.end);
  203. length = basefile.tellg();
  204. basefile.seekg(0, basefile.beg);
  205.  
  206. content = new char[++length];
  207. basefile.getline(content, length - 1);
  208. content[length - 1] = '\0';
  209. }
  210.  
  211.  
  212. ~ReadingBase()
  213. {
  214. try
  215. {
  216. delete[] content;
  217. }
  218. catch (int){}
  219. }
  220. };
  221. class sorting: public ReadingBase
  222. {
  223. protected:
  224. std::vector<char> file1;
  225. std::vector<char> file2;
  226. std::vector<char> file3;
  227. public:
  228. #pragma region
  229. #pragma endregion
  230. /*std::string names[4];
  231. std::string extensions[4];
  232. int numberbytes[4];*/
  233.  
  234. public:
  235. /*sorting()
  236. {
  237. int tp=0;
  238. #pragma region sorting by files
  239. for(int i=0;i<length;i++)
  240. {
  241. if(content[i]!=';')
  242. {file1.push_back(content[i]);}
  243. else
  244. {tp=i+1;break;}
  245. }
  246. for(int i=tp;i<length;i++)
  247. {
  248. if(content[i]!=';')
  249. {file2.push_back(content[i]);}
  250. else
  251. {tp=i+1;break;}
  252. }
  253. for(int i=tp;i<length;i++)
  254. {
  255. if(content[i]!=';')
  256. {file3.push_back(content[i]);}
  257. else
  258. {tp=i+1;break;}
  259. }
  260. #pragma endregion
  261. /*#pragma region sorting by characteristics
  262. #pragma region file1
  263. std::string name1="";
  264. std::string extension1="";
  265. std::string numberbytes_1="";
  266. for (int i=0;i<file1.size();i++)
  267. {
  268. if(file1[i]!=',')
  269. {name1+=file1[i];}
  270. else{tp=i+1;break;}
  271. }
  272. for (int i=tp;i<file1.size();i++)
  273. {
  274. if(file1[i]!=',')
  275. {extension1+=file1[i];}
  276. else{tp=i+1;break;}
  277. }
  278. for (int i=tp;i<file1.size();i++)
  279. {
  280. if(file1[i]!=',')
  281. {numberbytes_1=file1[i];}
  282. else{tp=i+1;break;}
  283. }
  284. int numberbytes1=atoi(numberbytes_1.c_str());
  285. #pragma endregion
  286. #pragma region file2
  287. std::string name2="";
  288. std::string extension2="";
  289. std::string numberbytes_2="";
  290. for (int i=0;i<file2.size();i++)
  291. {
  292. if(file2[i]!=',')
  293. {name2+=file2[i];}
  294. else{tp=i+1;break;}
  295. }
  296. for (int i=tp;i<file2.size();i++)
  297. {
  298. if(file2[i]!=',')
  299. {extension2+=file2[i];}
  300. else{tp=i+1;break;}
  301. }
  302. for (int i=tp;i<file2.size();i++)
  303. {
  304. if(file2[i]!=',')
  305. {numberbytes_2=file2[i];}
  306. else{tp=i+1;break;}
  307. }
  308. int numberbytes2=atoi(numberbytes_2.c_str());
  309. #pragma endregion
  310. #pragma region file3
  311. std::string name3="";
  312. std::string extension3="";
  313. std::string numberbytes_3="";
  314. for (int i=0;i<file3.size();i++)
  315. {
  316. if(file3[i]!=',')
  317. {name3+=file3[i];}
  318. else{tp=i+1;break;}
  319. }
  320. for (int i=tp;i<file3.size();i++)
  321. {
  322. if(file3[i]!=',')
  323. {extension3+=file3[i];}
  324. else{tp=i+1;break;}
  325. }
  326. for (int i=tp;i<file3.size();i++)
  327. {
  328. if(file3[i]!=',')
  329. {numberbytes_3=file3[i];}
  330. else{tp=i+1;break;}
  331. }
  332. int numberbytes3=atoi(numberbytes_3.c_str());
  333. #pragma endregion
  334. #pragma endregion
  335. names[0]=name1;names[1]=name2;names[2]=name3;
  336. extensions[0]=extension1;extensions[1]=extension2;extensions[2]=extension3;
  337. numberbytes[0]=numberbytes1;numberbytes[1]=numberbytes2;numberbytes[2]=numberbytes3;
  338. }
  339. */
  340.  
  341. static File* Parse(ReadingBase &rw)
  342. {
  343. //name
  344. //extension
  345. //employee
  346. File temp_file;
  347. File *prev, *Files;
  348. char t_strToParse[3][20];
  349.  
  350. for (int i = 0, row = 0, column = 0;;)
  351. {
  352. Files = i == 0 ? prev = new File : Files; //если первый проход, то получаем адрес выделенной памяти под первый элемент
  353. //иначе оставляем все как есть
  354. temp_file.pos = (int)prev;
  355. prev = i != 0 ? prev->next : prev;
  356.  
  357. while (row < 3)
  358. {
  359. while (rw.content[i] != ';' && rw.content[i] != '\t' && rw.content[i] != '\0')
  360. try
  361. {
  362. t_strToParse[row][column++] = rw.content[i++];
  363. }
  364. catch (...)
  365. {
  366. printf("Кол-во символов между ; ; превысило 20 знаков"); return NULL;
  367. }
  368. t_strToParse[row][column] = '\0'; //eof char
  369. column = 0; // start of string
  370. i++; //skip ;
  371. row++;
  372. }
  373. if (i > rw.length)
  374. {
  375. ((File*)temp_file.pos)->next = NULL;
  376. break;
  377. }
  378. row = 0;
  379. #pragma region Инициализируем структуру
  380. temp_file.name = t_strToParse[0];
  381. temp_file.extension = t_strToParse[1];
  382. temp_file.bytes = std::stoi(t_strToParse[2]);
  383.  
  384.  
  385. *prev + temp_file;
  386. #pragma endregion
  387. }
  388. return Files;
  389. };
  390. public: void show(File* list,int size)
  391. {
  392. if(size==2)
  393. {
  394. std::cout<<"name: "<<list->name<<std::endl;
  395. std::cout<<"extension:"<<list->extension<<std::endl;
  396. std::cout<<"bytes: "<<list->bytes<<std::endl;
  397. std::cout<<"================================"<<std::endl;
  398. std::cout<<"name: "<<list->next->name<<std::endl;
  399. std::cout<<"extension:"<<list->next->extension<<std::endl;
  400. std::cout<<"bytes: "<<list->next->bytes<<std::endl;
  401. std::cout<<"================================"<<std::endl;
  402. }
  403. #pragma region
  404. if(size==3)
  405. {
  406. std::cout<<"name: "<<list->name<<std::endl;
  407. std::cout<<"extension:"<<list->extension<<std::endl;
  408. std::cout<<"bytes: "<<list->bytes<<std::endl;
  409. std::cout<<"================================"<<std::endl;
  410. std::cout<<"name: "<<list->next->name<<std::endl;
  411. std::cout<<"extension:"<<list->next->extension<<std::endl;
  412. std::cout<<"bytes: "<<list->next->bytes<<std::endl;
  413. std::cout<<"================================"<<std::endl;
  414. std::cout<<"name: "<<list->next->next->name<<std::endl;
  415. std::cout<<"extension:"<<list->next->next->extension<<std::endl;
  416. std::cout<<"bytes: "<<list->next->next->bytes<<std::endl;
  417. std::cout<<"================================"<<std::endl;
  418. }
  419. if (size==4)
  420. {
  421.  
  422. }
  423. #pragma endregion
  424. }
  425. public: void output (File* list)
  426. {
  427. File* work_ptr=list;
  428. //while(work_ptr!=NULL)
  429. std::cout<<"=============New Base============"<<std::endl;
  430. std::cout<<"name: "<<list->name<<std::endl;
  431. std::cout<<"extension:"<<list->extension<<std::endl;
  432. std::cout<<"bytes: "<<list->bytes<<std::endl;
  433. std::cout<<"================================"<<std::endl;
  434. std::cout<<"name: "<<list->next->name<<std::endl;
  435. std::cout<<"extension:"<<list->next->extension<<std::endl;
  436. std::cout<<"bytes: "<<list->next->bytes<<std::endl;
  437. std::cout<<"================================"<<std::endl;
  438. std::cout<<"name: "<<list->next->next->name<<std::endl;
  439. std::cout<<"extension:"<<list->next->next->extension<<std::endl;
  440. std::cout<<"bytes: "<<list->next->next->bytes<<std::endl;
  441. std::cout<<"================================"<<std::endl;
  442. std::cout<<"name: "<<list->next->next->next->name<<std::endl;
  443. std::cout<<"extension:"<<list->next->next->next->extension<<std::endl;
  444. std::cout<<"bytes: "<<list->next->next->next->bytes<<std::endl;
  445. work_ptr = work_ptr->next;
  446.  
  447. }
  448. };
  449.  
  450. void main()
  451. {
  452. ReadingBase pepe;
  453. File *list = sorting().Parse(pepe);
  454. int y;
  455. #pragma region
  456. //File temp=FileAdd();
  457. //list->AddElement(2,temp);
  458. //sorting().show(list,4);
  459. //File()- list;
  460. int n =2;
  461. #pragma endregion
  462. std::cout<<" "<<std::endl;
  463. std::cout<<"MENU"<<std::endl;
  464. std::cout<<"1-show base, 2- delete last element, 3-add new, 0 - exit"<<std::endl;
  465. std::cin>>y;
  466. while(y!=0)
  467. {if(y==1){sorting().show(list,3);}
  468. if(y==2){list-list;
  469. sorting().show(list,n);}
  470. if(y==3){File temp=FileAdd();
  471. int z;
  472. std::cout<<"press number of position"<<std::endl;
  473. std::cin>>z;
  474. z=z-1;
  475. list->AddElement(z,temp);
  476. sorting().output(list);}
  477. std::cout<<"1-show base, 2- delete last element, 3-add new, 0 - exit"<<std::endl;
  478. std::cin>>y;
  479. }
  480. system("PAUSE");
  481. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement