文本解析

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

  • 自己写的函数
by: ZeFan Yu
vector split(string str, string pattern)
{
    string::size_type pos;
    vector result;
    str += pattern;//扩展字符串以方便操作
    int size = str.size();

    for (int i = 0; i result = split(TxtLine, " ");
}
  • fscanf()函数
    fscanf能正确操作的txt文件编码方式为ANSI,以下编码方式均不能使函数正常执行:UTF-8,Unicode,Unicode big endian
    fscanf()函数(有点像正则表达式)
    int fscanf(FILE *stream, char *format,[argument...]);
    int fscanf(文件指针,格式字符串,输入列表);

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
#include


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;
}

你可能感兴趣的:(文本解析)