1.需求
数据库表数据->本地csv文件->数据库表数据,需要对csv文件进行读写操作,支持中文路径
2.接口用例
-
UniTest.cpp
#include <iostream>
#include "CSVFile.h"
using namespace std;
int main()
{
CSVFile dataFile("data.csv",",");
//Cells生成Line
vector<string> vecCells = {"1","2","3","4","5"};
std::string strLine;
dataFile.MakeLine(vecCells, strLine);
cout << "生成的csv行数据 :" << strLine << endl;
//Line解析成Cells
vector<string> vecNewCells;
dataFile.ParseLine(strLine, vecNewCells);
//向文件写入Line
dataFile.AppendLine(strLine);
dataFile.AppendLine(strLine);
//从文件读取所有Line
vector<string> vecLines;
dataFile.ReadLines(vecLines);
cout << "读取多行数据内容 :" << endl;
for (vector<string>::const_iterator iter = vecLines.begin();iter != vecLines.end();++iter)
{
cout << *iter << endl;
}
//向文件追加多个Line
dataFile.AppendLines(vecLines);
//清除文件内容,再写入多个Line
dataFile.WriteLines(vecLines);
std::string strPause;
cin >> strPause;
return 0;
}
3.接口及实现
-
CSVFile.h
1 #pragma once
2
3 #include <vector>
4 #include <string>
5
6 using std::vector;
7 using std::string;
8
9 class CSVFile
10 {
11 public:
12 CSVFile(std::string strFileName, std::string strDelimeter);
13 ~CSVFile();
14
15 //解析csv行到cells
16 void ParseLine(const std::string &strLine, std::vector<std::string> vecCells);
17 //从cells生成csv行
18 void MakeLine(const std::vector<std::string> &vecCells, std::string &strLine);
19 //追加一行数据
20 void AppendLine(std::string strLine);
21 //清空后写多行数据
22 void WriteLines(const std::vector<std::string> &vecLines);
23 //追加多行数据
24 void AppendLines(const std::vector<std::string> &vecLines);
25 //读取文件数据
26 void ReadLines(std::vector<std::string> &vecLines);
27 private:
28 //文件名
29 std::string m_strFileName;
30 //分隔符
31 std::string m_strDelimeter;
32 };
-
CSVFile.cpp
1 #include <fstream>
2 #include "CSVFile.h"
3
4 using namespace std;
5
6 CSVFile::CSVFile(std::string strFileName, std::string strDelimeter)
7 {
8 m_strFileName = strFileName;
9 m_strDelimeter = m_strDelimeter;
10 }
11
12 CSVFile::~CSVFile()
13 {
14
15 }
16
17 void CSVFile::ParseLine(const std::string &strLine, std::vector<std::string> vecCells)
18 {
19 std::string str = strLine;
20 while (str.find(m_strDelimeter.c_str()) != std::string::npos)
21 {
22 unsigned int nPos = str.find(m_strDelimeter.c_str());
23 std::string strCell = str.substr(0, nPos);
24 str = str.substr(nPos + 1, str.size());
25 vecCells.push_back(strCell);
26 }
27 vecCells.push_back(str);
28 }
29
30 void CSVFile::MakeLine(const std::vector<std::string> &vecCells, std::string &strLine)
31 {
32 for (vector<string>::const_iterator iter = vecCells.begin(); iter != vecCells.end(); ++iter)
33 {
34 std::string strCell = *iter;
35 strLine += strCell;
36 //最后一个不带,
37 if ((iter + 1) != vecCells.end())
38 {
39 strLine += m_strDelimeter;
40 }
41 }
42 }
43
44 void CSVFile::AppendLine(std::string strLine)
45 {
46 ofstream ofs;
47 std::locale loc = std::locale::global(std::locale(""));
48 ofs.open(m_strFileName.c_str(), ios::out | ios::app);
49 std::locale::global(loc);
50 ofs << strLine << endl;
51 ofs.close();
52 }
53
54 void CSVFile::AppendLines(const std::vector<std::string> &vecLines)
55 {
56 ofstream ofs;
57 std::locale loc = std::locale::global(std::locale(""));
58 ofs.open(m_strFileName.c_str(), ios::out | ios::app);
59 std::locale::global(loc);
60 for (std::vector<std::string>::const_iterator iter = vecLines.begin(); iter != vecLines.end(); ++iter)
61 {
62 ofs << *iter << endl;
63 }
64 ofs.close();
65 }
66
67 void CSVFile::WriteLines(const std::vector<std::string> &vecLines)
68 {
69 ofstream ofs;
70 std::locale loc = std::locale::global(std::locale(""));
71 ofs.open(m_strFileName.c_str(), ios::out | ios::trunc);
72 std::locale::global(loc);
73 for (std::vector<std::string>::const_iterator iter = vecLines.begin(); iter != vecLines.end(); ++iter)
74 {
75 ofs << *iter << endl;
76 }
77 ofs.close();
78 }
79
80 void CSVFile::ReadLines(std::vector<std::string> &vecLines)
81 {
82 ifstream ifs;
83 std::locale loc = std::locale::global(std::locale(""));
84 ifs.open(m_strFileName.c_str(), ios::in);
85 std::locale::global(loc);
86
87 std::string strLine;
88 while (getline(ifs, strLine))
89 {
90 vecLines.push_back(strLine);
91 }
92 }
原文链接: https://www.cnblogs.com/SwiftChocolate/p/13460009.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/201232
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!