直接上图
原始数据
这是20行数据
下面是解析出来的数据
读取第9个数据
程序源码,有详细注释
csv.cpp
#include "csv.h"
int main()
{
CSV csv;
csv.open_csv();//--打开文件
csv.creat_new_csv();//--创建一个输出文件
while(csv.infile.peek()!=EOF){//--判断文件结束//--此处必须用peek进行预判文件是否结尾,使用别的会重复读取最后一行
//--.csv文件用“,”作为分隔符
csv.vector_clear();//--清空字符串向量
csv.read_csv();//--读取一行文件
csv.write_csv();//--讲数据写入新csv文件
}
csv.file_close();//--关闭所有打开的文件
return 0;
}
csv.h
#ifndef __CSV_H__
#define __CSV_H__
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include<sstream>//istringstream 必须包含这个头文件
using namespace std;
class CSV{
public:
char filename[256];//--打开的文件名
vector<string> fields;//--声明一个字符串向量
string oneline;//--保存一行数据
ifstream infile;//--输入文件流
ofstream outfile;//--输出文件流
public:
void open_csv(void);//--打开原始数据文件
void creat_new_csv(void);//--创建一个新的csv文件
void read_csv(void);//--读取一行原始数据
void write_csv(void);//--将需要的数据写入新csv文件中
void vector_clear(void);//--清空字符串向量
void file_close(void);//--关闭所有打开的文件
};
void CSV::open_csv(void)
{
cout<<"请输入文件名"<<endl;
cin>>this->filename;//--写入文件名
this->infile.open(this->filename); //--打开文件
}
void CSV::creat_new_csv(void)
{
this->outfile.open("out.csv",ios::out|ios::trunc);
}
void CSV::vector_clear(void)
{
this->fields.clear();//--清空字符串向量
}
void CSV::read_csv(void)
{
getline(this->infile,this->oneline);//--读取一行
istringstream tempstream(this->oneline);//将整行字符串line读入到字符串流istringstream中
string field;
while(getline(tempstream, field, ','))//将字符串流sin中的字符读入到field字符串中,以逗号为分隔符
{
this->fields.push_back(field); //将刚刚读取的字符串添加到向量fields中
}
}
void CSV::write_csv(void)
{
this->outfile<<this->fields[8]<<","<<this->fields[10]<<endl;
}
void CSV::file_close(void)
{
this->infile.close();
this->outfile.close();
}
#endif