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
: 可以读写文件数据。
操作 | |
| 创建一个文件输入流 |
| 以mode方式打开文件s |
| 打开文件s |
| 关闭文件 |
| 判断文件是否是打开状态 |
mode | 操作 |
| 以读的方式打开 |
| 以写的方式打开 |
| 每次写操作前均定位到文件末尾 |
| 打开文件后立即定位到文件末尾 |
| 截断文件 |
| 以二进制的形式进行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;
}