zoukankan      html  css  js  c++  java
  • fscanf()功能具体解释

    一旦文件被解析常规时间或使用正则表达式,或者是敲自己太傻代码来解析一个普通文件。

    今天突然发现c该图书馆有一个现成的文件可以解析常规功能,这是fscanf()功能。伤心哎 曾经自己做了这么多无用功。在这里具体解析一下fscanf函数:

    fscanf()函数(有点像正則表達式):

    功 能: 从一个流中运行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。

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

    int fscanf(文件指针,格式字符串,输入列表);

      for example:

      FILE*fp;

      chara[10];

      intb;

      doublec;

      fscanf(fp,"%s%d%lf",a,&b,&c)

      返回值:整型,数值等于[argument...]的个数

    当中的format就是相当于正則表達式中的格式,即用什么样的格式来分隔文件里的信息。光说不好理解,一下用一个样例来说明详细怎么用:

    首先我有一个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! ");
         exit(0);
       }
      lseek(fd,0,SEEK_SET);
      
      
      while(5==fscanf(fd,"%ld,%ld,%ld,%c,%lf ",&dev,&offset,&length,&ch,&ts))
      {在这里就是第二个參数指定分隔參数的格式。在这里使用的是,来分隔。这样就非常easy的获取了记录的各个字段的值并不须要自己编写函数来进行解析什么的。
         printf("%ld,%ld,%ld,%c,%lf ",dev,offset,length,ch,ts);
      }
    close(fd);
    return 0;
    }

    通过上面的例子可以很好理解fscanf使用功能。有自己的代码分析敲这个文件,努力不讨好,所得到的结果是不准确。

    哎 我只能感叹太弱。后来,我不得不学习!

    !!


  • 相关阅读:
    递归遍历多维数组(树数据结构)的超级简单方式,并且可以递归超过200层,摘自<<PHP精粹:编写高效PHP代码>>
    http协议传输二进制数据以及对输入流(php://input)和http请求的理解
    一个非常简单的RPC服务
    php://input 打开的数据流只能读取一次,即读取一次之后读取的值为空
    soap的简单实现(PHP)
    使用PHP的curl扩展实现跨域post请求,以及file_get_contents()百度短网址例子
    jquery选取iframe
    算法之棋盘覆盖
    词法分析之实验报告
    简单的词法分析小程序
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4585449.html
Copyright © 2011-2022 走看看