C++实现对每行数据的分段截取

来源:互联网 发布:php程序域名授权系统 编辑:程序博客网 时间:2024/05/16 11:39

      这个是最开始想要读取文本文档中数据,数据是每行每行存的,每行的数据性质都一样,是一个非常简单的操作,只是对我这样一个小白来说当时完全没有概念,被二姨夫忽悠了用数据截取的方法去做,后来发现,数据截取的方法固然不错,但是对于那些有规律的存储的数据,c的库函数中有一个现成的可以解析有规律的文件的函数,一行代码就可以解决啦。下面是这两种截取数据并进行存储的方法:

 

1.     fscanf方法

用 法:int fscanf(FILE *stream, char *format,[argument...]);

 

我的代码:

FILE *fp =fopen(path, "r");

fscanf(fp,"%s      %lf  %lf", dd, xx, yy);

fclose(fp);

 

这样就解决啦。

 

2.     数据截取的方法

       数据截取的适用性更大一些,可以根据需要截取任意字符串,但是对于我要处理的类似的有规律的大数据量的数据来说就显得有些笨重了,但是可以在别的地方进行应用,这里也总结一下:

 方法一:

       数据截取功能是string类提供的一个功能,它提供了大量的字符串操作函数,我用的是方法之一:

 

ifstreamin(filePath);//读入txt文档中的路径

charstr[1024]; 

 

if ( in.fail() )

{

MessageBox(_T("读取POS文件失败!"));

}

while(in.getline(str,sizeof(str),'\n' ) )//读取每行字符串

{

string x =string(str);

int pos =x.find_first_of(' ');

CString sx;

sx = x.c_str();

CString x1 =sx.Left(pos);//这里获取了第一个值

double xx =(float)atof((char *)(LPTSTR)(LPCTSTR)x1);

int length =sx.GetLength();

CString y =sx.Mid(length); //对y变量重新赋值为剩下的字符串,后面以便继续截取

CString y1 =y.Left(pos);

double yy =(float)atof((char *)(LPTSTR)(LPCTSTR)y1);

length =y1.GetLength();

CString z =y1.Mid(length);

 

CString z1 =z.Left(pos);

double zz =(float)atof((char *)(LPTSTR)(LPCTSTR)z1);

length =z1.GetLength();

CString o =z1.Mid(length);

in.close();

 

方法二:

网络上另一位童鞋整理的另外一种方法,非常有条理,也一起整理到这里:

   

头文件:

    #include <string> //注意没有.h string.h是C的标准字符串函数数,c++中一般起名为ctring.  而string头文件是C++的字符串头文件。

函数原型:

     string substr(int pos = 0,int n )const;

函数说明:

    参数1:pos是必填参数

    参数2:n是可参数,表示取多少个字符,不填表示截取到末尾

    该函数功能为:返回从pos开始的n个字符组成的字符串,原字符串不被改变

 

参考代码:

    #include <iostream> 

    #include <string> 

    using namespace std ; 

    void main() 

    { 

        string s="ABCD"; 

        cout << s.substr(2) <<endl; //从字符串下标为2的地方开始截取,截取到末尾,输出CD 

        cout << s.substr(0,2)<<endl ; //从字符串下标为2的地方开始截取,截取长度为2,输出AB 

        cout << s.substr(1,2)<<endl ; //输出BC 

 

原文链接:http://blog.csdn.net/liuweiyuxiang/article/details/50838349

阅读全文
0 0
原创粉丝点击