文本解析

2018-02-26  本文已影响0人  Zz鱼丸

常使用文本来保存配置文件,因此需要按一定规则来解析
分享两种方法

by: ZeFan Yu
vector<string> split(string str, string pattern)
{
    string::size_type pos;
    vector<string> result;
    str += pattern;//扩展字符串以方便操作
    int size = str.size();

    for (int i = 0; i<size; i++)
    {
        pos = str.find(pattern, i);
        if (pos<size)
        {
            string s = str.substr(i, pos - i);
            result.push_back(s);
            i = pos + pattern.size() - 1;
        }
    }
    return result;
}
Sample:
ifstream Txt(".\\zh_list.txt");
string TxtLine;
while (getline(Txt, TxtLine))// line中不包括每行的换行符
{
    vector<string> result = split(TxtLine, " ");
}

for example:
  FILE *fp;
  char a[10];
  int b;
  double c;
  fscanf(fp,"%s%d%lf",a,&b,&c)
  返回值:整型,数值等于[argument...]的个数

用法:
首先我有一个data。txt的文件里面的数据格式如下:

2,50,41,w,20.585828

4,52,51,r,52.012547

.........................

许多条类似的记录,都是以“,”来分隔的

我实现的功能就是把上面文件中的数据的五个字段赋值给相应的五个变量,并且输出这些变量的值。实现的程序如下:

#include<stdio.h>
#include<stdlib.h>


int main()
{
  int fd;
  long dev;
  long offset;
  long length;
  char ch;
  double ts=0.000000;
  if((fd=fopen("/home/haixian/ceshi/data.txt","r"))<0)
   {
     printf("open the file is error!\n");
     exit(0);
   }
  lseek(fd,0,SEEK_SET);
  
  
  while(5==fscanf(fd,"%ld,%ld,%ld,%c,%lf\n",&dev,&offset,&length,&ch,&ts))
  {在这里就是第二个参数指定分隔参数的格式,在这里使用的是,来分隔。这样就很容易的获取了记录的各个字段的值并不需要自己编写函数来进行解析什么的。
     printf("%ld,%ld,%ld,%c,%lf\n",dev,offset,length,ch,ts);
  }
close(fd);
return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读