C/C++:调用IO库,读写CSV/txt等文件

  • 读写csv或者txt文件


读写csv或者txt文件

C++不直接处理输入输出,而是通过一族定义在标准库中的类型来处理IO(Input,Output)。
支持从设备读取数据、向设备写入数据的IO操作,设备可以是文件,控制台窗口等,比如我们敲得第一行代码:

#include <iostream>

std::cout << "Hello,C++!" << std::endl;

就是我们IO操作中的O,同样对于文件的操作也是如此。

csv文件其实就是文本文件,只是每行字段用逗号分隔。

头文件fstream中定义了三种类型来支持文件的IO:
ifstream: 从一个给定文件中读取数据。
ofstream: 向一个给定文件中写入数据。
fstream: 可以读写文件数据。

操作

fstream fstrm;

创建一个文件输入流

fstream fstrm(s, mode);

以mode方式打开文件s

fstrm.open(s)

打开文件s

fstrm.close()

关闭文件

fstream.is_open()

判断文件是否是打开状态

mode

操作

in

以读的方式打开

out

以写的方式打开

app

每次写操作前均定位到文件末尾

ate

打开文件后立即定位到文件末尾

trunc

截断文件

binary

以二进制的形式进行IO

#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <sstream>
 
using namespace std;
 
 
int main()
{
	// 写文件
	ofstream outFile;
	outFile.open("data.csv", ofstream::out|std::ofstream:); // 打开模式可省略,若需要append 加参数ofstream::out(c++ primer)
	outFile << "name" << ',' << "age" << ',' << "hobby" << endl;
	outFile << "Mike" << ',' << 18 << ',' << "paiting" << endl;
	outFile << "Tom" << ',' << 25 << ',' << "football" << endl;
	outFile << "Jack" << ',' << 21 << ',' << "music" << endl;
	outFile.close();
 
	// 读文件
	ifstream inFile("data.csv", ios::in);
	string lineStr;
	vector<vector<string>> strArray;
	while (getline(inFile, lineStr))
	{
		// 打印整行字符串
		cout << lineStr << endl;
		// 存成二维表结构
		stringstream ss(lineStr);
		string str;
		vector<string> lineArray;
		// 按照逗号分隔
		while (getline(ss, str, ','))
			lineArray.push_back(str);
		strArray.push_back(lineArray);
	}
	
	getchar();
	return 0;
}