c++如何读取txt文件内容
一、c++文件流:
fstream //文件流
ifstream //输入文件流
ofstream //输出文件流
二、文件路径的表示
1、绝对路径:inf.open("d://DEV_C++//LogFile//游泳数据//LUYINGYAN1039_SensorLog.txt"); 注意:双斜线"\\"
2、相对路径:对相对路径而言,路径表示中的“\”也要用双斜线"\\"
windows下表示相对路径的规则为:
.\ 或 ./ 表示当前目录,或同级目录; 2、..\ 或 ../ 表示父目录,或上级目录。
三、文件打开方式
1、ios::in //供读,文件不存在则创建(ifstream默认的打开方式)
2、ios::out //供写,文件不存在则创建,文件存在则清空原内容(ofstream默认打开方式)
3、ios::ate //文件打开时,指针指在文件最后,常和in、out联合使用
4、ios::app //供写,文件不存在则创建,在原文件内容后写入新的内容,指针位置总在最后
5、ios::binary //二进制格式文件
四、示例代码
//实现txt文件的读入并重写入另外一个txt文件中~ #include<fstream> //ifstream #include<iostream> #include<string> //包含getline() //#include<cmath> using namespace std; int main(){ string s; string tmp; string result; ofstream outf;//文件写操作 ifstream inf;//文件读操作 //这里路劲是:// 双斜杠 //inf.open("d://DEV_C++//LogFile//快走300//原始log//202308211452_mayanjun_upstair100_6.txt"); //inf.open("d://DEV_C++//LogFile//串口log//MobaXterm_warth_9_301_20230919_161009.txt"); inf.open("d://DEV_C++//LogFile//游泳数据//LUYINGYAN1039_SensorLog.txt"); //创建输出文件 outf.open("d://DEV_C++//out.txt"); cout << "开始提取日志数据:" << endl; int times=0; while (getline(inf, s)) //getline(inf,s)是逐行读取inf中的文件信息 { int idx=s.find(",1,"); //从每行的哪个位置开始截取 //cout << idx << endl; //int num=s.find(";"); int num=s.find(" "); //从每行的开始位置截取到每行的哪个位置结束 ------ 这里表示数据的最后没有符号 如果是 ;符号,用上面注释的那条代码 if(idx != -1 && num != -1) { //int num=s.find(";"); //cout << num << endl; tmp = s.substr(idx+3,num-(idx+3)); //cout << tmp << endl; tmp.insert(0,"{"); tmp.append("},"); times++; if(times%2) cout << endl;//数据太多打印不全,打印两次才换行 cout << tmp; outf << tmp << '\n';//向创建的输出文件里写入数据 } } cout << endl << times << endl; if(times) cout << endl << endl << "提取日志数据已输出到 d://DEV_C++//out.txt" << endl; else cout << endl << "数据提取错误!" << endl; //tmp.erase(tmp.end()-1);//删除字符串末尾一个字符 inf.close(); outf.close(); return 0; }
如上示例代码将如下右边格式提取为如下左边格式,并输出为out.txt文件:
如需在文件后面续写数据,如下:
五、C++下string基本操作
作者: KeepLiang
如下内容摘自链接:C++之string基本操作_stirng只提供尾部弹出-CSDN博客,如有侵权请告知。
来源:CSDN
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1、构造函数:
string有重载了非常多构造函数,这里就只列出比较常用的:
2、增:
string的增非常简单,因为string重载了"+","+="操作符,可以方便地对字符串进行添加,而成员函数:insert(),append(),push_back()
+=:+=操作符是string类之间的添加。
append:
append是把参数添加至字符串的尾部,参数字符串可以是string,也可以是c_str,在参数字符串的后面可以参数字符串的起始位置和结束位置。总结为:append(string,[start,end))。
push_back:
push_back()可以在string的后面添加一个字符
insert:
insert可以指定位置在目标string中插入。
3、删:
erase:
实例:
int dele2=tmp.find("z:");
tmp.erase(dele2,2);//删除从指定位置后的两位
pop_back:
clear:
3、改:
replace:
总结:replace( [ start, end ),"用于替换的字符串",[ start, end ) ),即可以指定被替换的字符串区间和用于替换的字符串区间。
4、查:
at:
find:
string类提供的find成员函数可以查找字符或者字符串位置,凡是没有找到的均返回string::npos,该值定义为-1。
5、切割字符串:
substr:
6、字符串和数字转换:(stoi是在c++ 11才支持,如果使用DEV_C++报错则如下:)