为了增加读取的灵活性,所以separator和filename都设置为在主函数中获取输入或者在函数中传参的视线方法
举个例子,txt文件如下:
household;2;true;
首先声明一个读取数据的文件?
void read_data_file(const string& filename,char separator)
seperate指的是间隔符,filename是文件名
读取文件代码固定的第一步就是(基本所有读取都可以加这段代码,增加了检查文件内容读取的错误。
别忘记加头文件
#include <fstream>
#include <sstream>
ifstream file(filename);
if(!file.isopen){
cout << "Error: Unable to open file for writing."
}
下一步就是if(file.isopen)的内容?
固定的定义一个string 为行
string line;
当文件内所在行有内容时候
while (getline(file, line)) {
stringstream ss(line);
string token;
getline(ss, token, separator);
//token是读取的信息,比如我举例txt中的household,separator是分隔符,指读到;就停止
?注意:token默认为字符串类型
getline(ss, token, separator);
index = stoi(token);
再写一个getline,读取下一个sepator的内容。
我举例的文件下一个是2,类型为数字,所以要用到stoi(token)?,stoi是int\float都可以使用(我的代码是前边定义了index,可以改为其他想把他赋值的东西。
接下来是true,bool类型 我的上一篇博客有讲到
所以字符串、数字、布尔类型的读取都有了就可以任意读取想要的信息了!
另外 小数的个数可以用
setprecision(2)
包含在头文件中
#include <iomanip>
效果如图?