Chinaunix首页 | 论坛 | 博客
  • 博客访问: 119053
  • 博文数量: 26
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 214
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-24 17:47
个人简介

今天所拥有的一切,都是自己的选择

文章分类

全部博文(26)

文章存档

2013年(26)

我的朋友

分类: LINUX

2013-10-24 20:06:53

 INI文件是很常见的一种配置文件。比如:

点击(此处)折叠或打开

  1. ;Configuration of httphttp
  2. [http]
  3. domain=www.mysite.com 
  4. port=8080
  5. cgihome=/cgi-bin 
  6. ;Configuration of db 
  7. [database]server = mysqlmysql 
  8. user = myname 
  9. password = toopendatabase

方括号括起来的部分是sectionsection名,之后则是各个key = valuevalue键值对。 
等号两边可以有若干个空白字符(空格或Tab ),也可以没有空白字符。 
注释是以分号;开始的行。 
一个section结束时至少有一个空行,也可以有连续几个空行,空行是仅包括0个或若干个空白字符(空格或Tab )的行。 
INI文件的最后一行后面可能有换行符也可能没有。 

现在XML兴起了,INI显得有点土。 
现在要求编程把INI文件转化为XML文件。

点击(此处)折叠或打开

  1. <!--Configuration of http-->
  2. <http>
  3. <domain>www.mysite.com</domain>
  4. <port>8080</port>
  5. <cgihome>/cgi-bin</cgihome>
  6. </http>
  7. <!--Configuration of db-->
  8. <database>
  9. <server>mysql</server>
  10. <user>myname</user>
  11. <password>toopendatabase</password>
  12. </database>
程序实现如下:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <string.h>

  3. #define N 1024

  4. int main(int argc, char **argv)
  5. {
  6.     FILE *fpr = fopen(argv[1], "r");                
  7.     FILE *fpw = fopen(argv[2], "w");                
  8.     char buf[N];
  9.     char sectionname[N];
  10.     int sectionflag = 0;
  11.     int i, j;
  12.     char *p, *q;

  13.     while(fgets(buf, N, fpr) != NULL)
  14.     {
  15.         switch(buf[0])
  16.         {
  17.             case '\n':
  18.             case ' ':
  19.             case '\t':
  20.                 if(sectionflag == 1)
  21.                 {
  22.                     fprintf(fpw, "\n", sectionname);
  23.                 }
  24.                 sectionflag = 0;
  25.                 break;
  26.             case ';':
  27.                 buf[strlen(buf)-1] = '\0';
  28.                 fprintf(fpw, "\n", buf+1);
  29.                 break;
  30.             case '[':
  31.                 buf[strlen(buf)-2] = '\0';
  32.                 fprintf(fpw, "<%s>\n", buf+1);
  33.                 strcpy(sectionname, buf+1);
  34.                 sectionflag = 1;
  35.                 break;
  36.             default:
  37.                 buf[strlen(buf)-1] = '\0';

  38.                 j = 0;

  39.                 for(i=0; i<strlen(buf); i++)
  40.                 {
  41.                     if(buf[i]!=' ' && buf[i]!='\t')
  42.                     {
  43.                         buf[j++] = buf[i];
  44.                     }
  45.                 }
  46.                 
  47.                 buf[j] = '\0';

  48.                 p = strtok(buf, "=");
  49.                 q = strtok(NULL, "=");

  50.                 fprintf(fpw, "<%s>%s\n", p, q, p);
  51.         }
  52.     }

  53.     if(sectionflag == 1)
  54.     {
  55.         fprintf(fpw, "\n", sectionname);
  56.     }

  57.     fclose(fpr);
  58.     fclose(fpw);

  59.     return 0;
  60. }







阅读(1567) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:标准IO函数操作大全

给主人留下些什么吧!~~