You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include "zcsv.hpp"
using namespace std; using namespace iflytop;
ZCSV::ZCSV() {}
bool ZCSV::parseCSV(string filename) { csvData.clear(); ifstream file(filename); string line;
if (!file.is_open()) { return false; }
int rowNum = 0; while (getline(file, line)) { rowNum = rowNum + 1; stringstream linestream(line); string cell; ZCSVCell csvCell; csvCell.rowNum = rowNum; int colNum = 0;
while (getline(linestream, cell, ',')) { colNum = colNum + 1; csvCell.colNum = colNum; csvCell.data = cell; csvData.push_back(csvCell); }
csvData.push_back(csvCell); }
// 找到最大行数
int maxRowNum = 0; for (list<ZCSVCell>::iterator it = csvData.begin(); it != csvData.end(); it++) { if (it->rowNum > maxRowNum) { maxRowNum = it->rowNum; } }
// 找到最大列数
int maxColNum = 0; for (list<ZCSVCell>::iterator it = csvData.begin(); it != csvData.end(); it++) { if (it->colNum > maxColNum) { maxColNum = it->colNum; } }
m_maxRowNum = maxRowNum; m_maxColNum = maxColNum; return true; }
ZCSVCell* ZCSV::findCell(int rowNum, int colNum) { for (list<ZCSVCell>::iterator it = csvData.begin(); it != csvData.end(); it++) { if (it->rowNum == rowNum && it->colNum == colNum) { return &(*it); } } return NULL; }
void ZCSV::setdata(int rowNum, int colNum, string data) { ZCSVCell* cell = findCell(rowNum, colNum); if (cell != NULL) { cell->data = data; } else { ZCSVCell newCell; newCell.rowNum = rowNum; newCell.colNum = colNum; newCell.data = data;
if (rowNum > m_maxRowNum) { m_maxRowNum = rowNum; }
if (colNum > m_maxColNum) { m_maxColNum = colNum; }
csvData.push_back(newCell); } } string ZCSV::getdata(int rowNum, int colNum) { ZCSVCell* cell = findCell(rowNum, colNum); if (cell != NULL) { return cell->data; } else { return ""; } }
void ZCSV::dumpCSV(string filename) { ofstream file; file.open(filename, ios::out | ios::trunc);
// 找到最大行数
int maxRowNum = 0; for (list<ZCSVCell>::iterator it = csvData.begin(); it != csvData.end(); it++) { if (it->rowNum > maxRowNum) { maxRowNum = it->rowNum; } }
// 找到最大列数
int maxColNum = 0; for (list<ZCSVCell>::iterator it = csvData.begin(); it != csvData.end(); it++) { if (it->colNum > maxColNum) { maxColNum = it->colNum; } }
// 足个点插入数据
for (int i = 1; i <= maxRowNum; i++) { for (int j = 1; j <= maxColNum; j++) { ZCSVCell* cell = findCell(i, j); if (cell != NULL) { file << cell->data; } file << ","; } file << endl; } }
|