Advertisement
Guest User

Untitled

a guest
Dec 10th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.00 KB | None | 0 0
  1. // Parsing.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <string>
  7. #include <fstream>
  8. using namespace std;
  9.  
  10. class Parser {
  11. public:
  12. virtual void Parse(string path) = 0;
  13. virtual void SaveTo(string path) = 0;
  14. };
  15.  
  16. class CSVParser : public Parser {
  17. private:
  18. string line;
  19. string** cells;
  20. int row;
  21. int column;
  22. public:
  23.  
  24. CSVParser() {
  25. column = 0;
  26. row = 0;
  27. }
  28.  
  29. ~CSVParser() {
  30. for (int i = 0; i < row; i++) {
  31. delete[] cells[i];
  32. }
  33. delete[] cells;
  34. }
  35.  
  36. void Parse(string path) override {
  37.  
  38. ifstream in(path);
  39. if (in.is_open())
  40. {
  41. cout << "open" << endl;
  42. }
  43. while (getline(in, line))
  44. {
  45. row++;
  46. for (size_t i = 0; i < line.length(); i++)
  47. {
  48. if (line[i] == ';')
  49. {
  50. column++;
  51. }
  52. }
  53. }
  54. in.close();
  55. column /= row;
  56. ++column;
  57. cells = new string*[row];
  58. for (size_t i = 0; i < row; i++)
  59. {
  60. cells[i] = new string[column];
  61. }
  62. for (size_t i = 0; i < row; i++)
  63. {
  64. for (size_t j = 0; j < column; j++)
  65. {
  66. cells[i][j] = "";
  67. }
  68. }
  69. int rowIndex = 0;
  70.  
  71. in.open(path);
  72. while (getline(in, line))
  73. {
  74. int colIndex = 0;
  75. for (size_t i = 0; i < line.length(); i++)
  76. {
  77. if (line[i] != ';') {
  78. cells[rowIndex][colIndex] += line[i];
  79. }
  80. else
  81. {
  82. colIndex++;
  83. }
  84.  
  85. }
  86. rowIndex++;
  87. }
  88. for (size_t i = 0; i < row; i++)
  89. {
  90. for (size_t j = 0; j < column; j++)
  91. {
  92. cout << cells[i][j] << " ";
  93. }
  94. cout << endl;
  95. }
  96. in.close();
  97. }
  98.  
  99. void SetCellValue(int row, int column, string value) {
  100. cells[row][column] = value;
  101. }
  102.  
  103. void AddRow() {
  104. row++;
  105. string **temp = new string*[row];
  106. for (size_t i = 0; i < row; i++)
  107. {
  108. temp[i] = new string[column];
  109. }
  110. for (size_t i = 0; i < row - 1; i++)
  111. {
  112. for (size_t j = 0; j < column; j++)
  113. {
  114. temp[i][j] = cells[i][j];
  115. }
  116. }
  117. for (size_t i = 0; i < column; i++)
  118. {
  119. temp[row - 1][i] = "?";
  120. }
  121. cells = temp;
  122. }
  123.  
  124. void AddColumn() {
  125. column++;
  126. string **temp = new string*[row];
  127. for (size_t i = 0; i < row; i++)
  128. {
  129. temp[i] = new string[column];
  130. }
  131. for (size_t i = 0; i < row; i++)
  132. {
  133. for (size_t j = 0; j < column - 1; j++)
  134. {
  135. temp[i][j] = cells[i][j];
  136. }
  137. }
  138. for (size_t i = 0; i < row; i++)
  139. {
  140. temp[i][column - 1] = "?";
  141. }
  142. cells = temp;
  143. }
  144.  
  145. void RemoveColumn(int index) {
  146. column--;
  147. bool flag = false;
  148. string **temp = new string*[row];
  149. for (size_t i = 0; i < row; i++)
  150. {
  151. temp[i] = new string[column];
  152. }
  153. for (size_t i = 0; i < row; i++)
  154. {
  155. for (size_t j = 0; j < column; j++)
  156. {
  157. if (j == index)
  158. {
  159. flag = true;
  160. }
  161. if (flag)
  162. {
  163. temp[i][j] = cells[i][j + 1];
  164. }
  165. else
  166. {
  167. temp[i][j] = cells[i][j];
  168. }
  169. }
  170. flag = false;
  171. }
  172. cells = temp;
  173. }
  174.  
  175. void RemoveRow(int index) {
  176. row--;
  177. int newI = 0;
  178. string **temp = new string*[row];
  179. for (size_t i = 0; i < row; i++)
  180. {
  181. temp[i] = new string[column];
  182. }
  183. for (size_t i = 0; i < row; i++, newI++)
  184. {
  185. for (size_t j = 0; j < column; j++)
  186. {
  187. if (newI == index)
  188. {
  189. ++newI;
  190. }
  191.  
  192. temp[i][j] = cells[newI][j];
  193.  
  194. }
  195. }
  196. cells = temp;
  197. }
  198.  
  199. void SaveTo(string path) {
  200. ofstream out(path);
  201. for (size_t i = 0; i < row; i++)
  202. {
  203. for (size_t j = 0; j < column - 1; j++)
  204. {
  205. out << cells[i][j] << ";";
  206. }
  207. out << cells[i][column - 1] << "\n";
  208. }
  209. out.close();
  210. }
  211.  
  212. string* GetColumnData(int index){
  213. string* value = new string[row];
  214. for (size_t i = 0; i < row; i++)
  215. {
  216. value[i] = cells[i][index];
  217. }
  218. return value;
  219. }
  220. string* GetRowData(int index) {
  221. string* value = new string[column];
  222. for (size_t i = 0; i < column; i++)
  223. {
  224. value[i] = cells[index][i];
  225. }
  226. return value;
  227. }
  228. friend class OneLineData;
  229. };
  230.  
  231. class OneLineData {
  232. public:
  233.  
  234. string* array;
  235. string **pointer;
  236. public:
  237. OneLineData(CSVParser& parser) {
  238. pointer = parser.cells;
  239. }
  240. OneLineData() {};
  241. string operator[] (int index)
  242. {
  243. return array[index];
  244. }
  245. OneLineData& operator=(string* value) {
  246. this->array = value;
  247. return *this;
  248. }
  249.  
  250. void ToCSVParser(string dimension, int index) {
  251.  
  252. if (dimension == "row")
  253. {
  254. for (size_t i = 0; i < array->length(); i++)
  255. {
  256. pointer[index][i] = array[i];
  257. }
  258. }
  259. else if (dimension == "column")
  260. {
  261. for (size_t i = 0; i < array->length(); i++)
  262. {
  263. pointer[i][index] = array[i];
  264. }
  265. }
  266. }
  267. };
  268.  
  269.  
  270.  
  271. int main()
  272. {
  273. setlocale(LC_ALL, "rus");
  274. CSVParser parser;
  275. parser.Parse("C:\\Users\\aifsbei\\Desktop\\VAZ.csv");
  276. //parser.SetCellValue(0, 0, "ВАЗ-21061");
  277. //parser.AddColumn();
  278. //parser.AddRow();
  279. //parser.RemoveRow(0);
  280. OneLineData line(parser);
  281. line = parser.GetColumnData(1);
  282. line.array[0] = "Автомобиль";
  283. line.ToCSVParser("column", 1);
  284. parser.SaveTo("C:\\Users\\aifsbei\\Desktop\\VAZ.csv");
  285. return 0;
  286. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement