本文主要总结了C++中对文本文件的基本操作以及使用心得,第一部分中总结了C++对文本文件的基本操作,第二部分中会以csv文件为例,进行读取存储由逗号分隔的字符串的操作。
1. 文本读取写入基础
要使用文件输入输出流,首先需要include相关库 : iostream 以及fstream。istream类和ostream类分别是输入输出流类,用于键盘与程序的输入,以及程序向显示器的输出。其中,istream和ostream分别有子类,ifstream和ofstream。ifstream类用于文件对程序的输入(读取文件),而ofstream类用于程序对文件的输出(写入文件)。下面列举一个基本的文本读取写入的例子。
#include <iostream>
#include <fstream>
# include <string>
using namespace std;void test_fstream() {//ifstream if_file;//if_file.open("file1.txt", ios::in);ifstream if_file("file1.txt", ios::in);ofstream of_file("file2.txt", ios::app); // 使用append模式打开,写入的字符会添加在文件的末尾string str_in;if (!if_file.is_open()) {cerr << "An error occurred when opening the file" << endl; return;}while (if_file.peek()!=EOF){getline(if_file, str_in); //读取每一行字符串of_file << str_in << endl; //将字符串流入file2中cout << str_in << endl; }}int main()
{test_fstream();return 0;
}
上述代码实现了,将file1中的文字拷贝到file2中的操作。由于我们使用的append模式打开file2.txt,因此会将新的字符添加到文件的末尾。
初始的file1.txt 和 file2.txt如下 :
程序运行一次后结果如下 :
2. csv文件的读取以及对读取数据的分类存储
在第一部分中,我们主要列举了对txt文本文件的读取写入方法。那么针对csv文件,或者类似的使用逗号分割字符串的文件,在第二部分中我会分享一个常用的分类存储方式。
下面用一个简单的csv文件为例子 :
下面的C++代码主要实现了,分别读取由逗号分割的几部分的数据并存储在对应的变量中。
void test_csv()
{ifstream if_csv("test_csv.csv", ios::in);if (!if_csv.is_open()) {cerr << "An error occurred when opening the file" << endl;return;}string linestring;getline(if_csv, linestring); //第一行存储了每一列的类别,我们跳过这一行while (if_csv.peek() != EOF){getline(if_csv, linestring);uint64_t index_first_virgule = linestring.find(',' , 0); //找到第一个逗号的索引string country = linestring.substr(0, index_first_virgule); //使用substr方法分割出需要的字符串uint64_t index_second_virgule = linestring.find(',', index_first_virgule + 1);string capital = linestring.substr(index_first_virgule+1, index_second_virgule- index_first_virgule-1);uint64_t index_third_virgule = linestring.find(',', index_second_virgule + 1);string population = linestring.substr(index_second_virgule + 1, index_third_virgule - index_second_virgule - 1);cout << " country : " << country << " capital :" << capital << " population : " << population << endl;}
}
代码运行结果如下 :
这个模式可以适用于所有标准的文本文件,csv文件。分隔符号不一定必须是逗号,可以是任何一致的符号,使用这个模板可以快速地读取文件中每一行由逗号分隔的字符串,对于处理excel表格等数据非常实用。