在C语言中使用外部文件里的参数

来源:互联网 发布:mac book air截图 编辑:程序博客网 时间:2024/05/21 10:37

有时候,我们的程序需要一些在可以由用户修改的参数。

这些参数,通常放在一个外部文件里,典型的就是.ini格式的初始化类型文件。

 

要使用外部文件里定义的参数,只需要我们使用文件读写的方法,把这些文件里的参数读给程序里的变量就行了。

 

但外部文件,为了方便用户修改,总要加入一些描述信息,如何跳过这些描述信息,只将有用的信息读入我们的程序中呢?

 

这时就需要用到几个很有用的字符串处理函数:

strnicmp   strncpy   strncpy  

(点击上面的函数名,可以查看使用帮助)

 

下面是一个例程:(注意是按行读取外部参数文件的)

外参文件: parameter.ini

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

;1号同学的信息

name1 = zhang

age1 = 23

No1 = 10001

 

 

;2号同学的信息

name2 = Li

age2 = 25

No2  = 10002

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

 

 

 

处理"parameter.ini"的C程序如下:

 

 

 

 

char    * comment,

           * buf;


 while( (ch = fgetc(fp)) != EOF ) {
  if(ch == ';'  ||  ch == ':'  ||  ch == '/n') fgets(comment, 256, fp) ;  //忽略空行或有注释符的一行,对读取的一行不做任何操作
  else {
   fseek(fp, -1L, SEEK_CUR) ;  //  回到给ch赋值的那个字符  

   strncpy(comment, "", 256) ;  strncpy(buf, "", 32) ;  //  初始化为空
   fgets(comment, 256, fp) ;  //  读取外参文件的一行数据

   if(strnicmp(comment, "name", 3) == 0) {  //  如果该行是name开头

    pos = strcspn(comment, "=") ;  //  找name后的等号的位置
    strncpy(buf, comment+3, pos-3) ;  //  找到name后的序号 赋给buf

    k = atoi(buf) ;      // 将字符串处理成整型
    strncpy(name[k] comment+pos+1, 32) ; //  把=后面的值读到name参数中
   }else if(strnicmp(comment, "age", 3) == 0) {  //  "age"から始まる行を探す(バンディング対策時の上限
    pos = strcspn(comment, "=") ;  //  "="の位置を探す
    strncpy(buf, comment+3, pos-3) ; //  "+3/-3"は"age"の分
    ak = atoi(buf) ;      //  

    strncpy(buf, comment+pos+1, 32) ; //  "+1"はbuf内に含まれる"="の分
    age[ak] = atol(buf) ;
   }else if(strnicmp(comment, "No", 2) == 0) {  

    pos = strcspn(comment, "=") ;  //  "="の位置を探す
    strncpy(buf, comment+2, pos-2) ; //  "+2/-2"は"max"の分
    k = atoi(buf) ;      //  k番目のドット出現率上限値の読み込み
    strncpy(buf, comment+pos+1, 32) ; //  "+1"はbuf内に含まれる"="の分
    no[k] = atol(buf) ;
   }
  }
 }

原创粉丝点击