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++报错则如下:)

       

 

posted @ 2023-10-08 13:03  耿通宇  阅读(6227)  评论(0编辑  收藏  举报