Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Parsing.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <iostream>
- #include <string>
- #include <fstream>
- using namespace std;
- class Parser {
- public:
- virtual void Parse(string path) = 0;
- virtual void SaveTo(string path) = 0;
- };
- class CSVParser : public Parser {
- private:
- string line;
- string** cells;
- int row;
- int column;
- public:
- CSVParser() {
- column = 0;
- row = 0;
- }
- ~CSVParser() {
- for (int i = 0; i < row; i++) {
- delete[] cells[i];
- }
- delete[] cells;
- }
- void Parse(string path) override {
- ifstream in(path);
- if (in.is_open())
- {
- cout << "open" << endl;
- }
- while (getline(in, line))
- {
- row++;
- for (size_t i = 0; i < line.length(); i++)
- {
- if (line[i] == ';')
- {
- column++;
- }
- }
- }
- in.close();
- column /= row;
- ++column;
- cells = new string*[row];
- for (size_t i = 0; i < row; i++)
- {
- cells[i] = new string[column];
- }
- for (size_t i = 0; i < row; i++)
- {
- for (size_t j = 0; j < column; j++)
- {
- cells[i][j] = "";
- }
- }
- int rowIndex = 0;
- in.open(path);
- while (getline(in, line))
- {
- int colIndex = 0;
- for (size_t i = 0; i < line.length(); i++)
- {
- if (line[i] != ';') {
- cells[rowIndex][colIndex] += line[i];
- }
- else
- {
- colIndex++;
- }
- }
- rowIndex++;
- }
- for (size_t i = 0; i < row; i++)
- {
- for (size_t j = 0; j < column; j++)
- {
- cout << cells[i][j] << " ";
- }
- cout << endl;
- }
- in.close();
- }
- void SetCellValue(int row, int column, string value) {
- cells[row][column] = value;
- }
- void AddRow() {
- row++;
- string **temp = new string*[row];
- for (size_t i = 0; i < row; i++)
- {
- temp[i] = new string[column];
- }
- for (size_t i = 0; i < row - 1; i++)
- {
- for (size_t j = 0; j < column; j++)
- {
- temp[i][j] = cells[i][j];
- }
- }
- for (size_t i = 0; i < column; i++)
- {
- temp[row - 1][i] = "?";
- }
- cells = temp;
- }
- void AddColumn() {
- column++;
- string **temp = new string*[row];
- for (size_t i = 0; i < row; i++)
- {
- temp[i] = new string[column];
- }
- for (size_t i = 0; i < row; i++)
- {
- for (size_t j = 0; j < column - 1; j++)
- {
- temp[i][j] = cells[i][j];
- }
- }
- for (size_t i = 0; i < row; i++)
- {
- temp[i][column - 1] = "?";
- }
- cells = temp;
- }
- void RemoveColumn(int index) {
- column--;
- bool flag = false;
- string **temp = new string*[row];
- for (size_t i = 0; i < row; i++)
- {
- temp[i] = new string[column];
- }
- for (size_t i = 0; i < row; i++)
- {
- for (size_t j = 0; j < column; j++)
- {
- if (j == index)
- {
- flag = true;
- }
- if (flag)
- {
- temp[i][j] = cells[i][j + 1];
- }
- else
- {
- temp[i][j] = cells[i][j];
- }
- }
- flag = false;
- }
- cells = temp;
- }
- void RemoveRow(int index) {
- row--;
- int newI = 0;
- string **temp = new string*[row];
- for (size_t i = 0; i < row; i++)
- {
- temp[i] = new string[column];
- }
- for (size_t i = 0; i < row; i++, newI++)
- {
- for (size_t j = 0; j < column; j++)
- {
- if (newI == index)
- {
- ++newI;
- }
- temp[i][j] = cells[newI][j];
- }
- }
- cells = temp;
- }
- void SaveTo(string path) {
- ofstream out(path);
- for (size_t i = 0; i < row; i++)
- {
- for (size_t j = 0; j < column - 1; j++)
- {
- out << cells[i][j] << ";";
- }
- out << cells[i][column - 1] << "\n";
- }
- out.close();
- }
- string* GetColumnData(int index){
- string* value = new string[row];
- for (size_t i = 0; i < row; i++)
- {
- value[i] = cells[i][index];
- }
- return value;
- }
- string* GetRowData(int index) {
- string* value = new string[column];
- for (size_t i = 0; i < column; i++)
- {
- value[i] = cells[index][i];
- }
- return value;
- }
- friend class OneLineData;
- };
- class OneLineData {
- public:
- string* array;
- string **pointer;
- public:
- OneLineData(CSVParser& parser) {
- pointer = parser.cells;
- }
- OneLineData() {};
- string operator[] (int index)
- {
- return array[index];
- }
- OneLineData& operator=(string* value) {
- this->array = value;
- return *this;
- }
- void ToCSVParser(string dimension, int index) {
- if (dimension == "row")
- {
- for (size_t i = 0; i < array->length(); i++)
- {
- pointer[index][i] = array[i];
- }
- }
- else if (dimension == "column")
- {
- for (size_t i = 0; i < array->length(); i++)
- {
- pointer[i][index] = array[i];
- }
- }
- }
- };
- int main()
- {
- setlocale(LC_ALL, "rus");
- CSVParser parser;
- parser.Parse("C:\\Users\\aifsbei\\Desktop\\VAZ.csv");
- //parser.SetCellValue(0, 0, "ВАЗ-21061");
- //parser.AddColumn();
- //parser.AddRow();
- //parser.RemoveRow(0);
- OneLineData line(parser);
- line = parser.GetColumnData(1);
- line.array[0] = "Автомобиль";
- line.ToCSVParser("column", 1);
- parser.SaveTo("C:\\Users\\aifsbei\\Desktop\\VAZ.csv");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement