將.ini配置文件轉換爲.xml文件格式


  1 /*
  2  * FILE: p670_convert.c
  3  * DATE: 20180125
  4  * ==============
  5  * DESCRIPTION: 將.ini配置文件轉換爲.xml文件
  6  * fgets, fputs, DEBUG(format, ...)調試, strtok切割字符串, 
  7  */
  8 
  9 #include <stdio.h>
 10 #include <string.h>
 11 
 12 #define DEBUG(format, ...) printf("FILE: "__FILE__", LINE: %d: "format"\n", __LINE__, ##__VA_ARGS__)
 13 #define BUFFSIZE 64
 14 
 15 int main(int argc, char *argv[])
 16 {
 17         FILE *fp_src, *fp_dest;
 18         char buf[BUFFSIZE];
 19         char buf_out[BUFFSIZE];
 20         char head[16];
 21         char filename[16];
 22         int len;
 23 
 24         if(argc != 2)
 25                 DEBUG("Usage: ./buld filename");
 26 
 27         // 校驗文件擴展名是否爲.ini 配置文件    
 28         len = strlen(argv[1]);
 29         if(strcmp(argv[1]+len-3, "ini") != 0)
 30                 DEBUG("source file format error");
 31 
 32         fp_src = fopen(argv[1], "r");   // fopen 配置文件
 33 
 34         // 將.ini配置文件的擴展名改爲.xml
 35         strcpy(filename, argv[1]);
 36         strcpy(&filename[len-3], "xml");
 37 
 38         // fopen .xml文件,若不存在則創建
 39         fp_dest = fopen(filename, "w");
 40         // 順序讀取每一行
 41         while(fgets(buf, BUFFSIZE, fp_src) != NULL)
 42         {
 43                 len = strlen(buf);
 44                 buf[len-1] = '\0';
 45                 // 配置信息頭
 46                 if(buf[0] == '#')
 47                         sprintf(buf_out, "<!-- %s -->\n", buf);
 48                 else if(buf[0] == '!')
 49                 {
 50                         sprintf(buf_out, "<%s>\n", buf+1);
 51                         strcpy(head, buf+1);    // 複製一份用於後面輸出</head>
 52                 }
 53                 else if(buf[0] == '\0')
 54                         sprintf(buf_out, "</%s>\n\n", head);
 55                 else
 56                 {       // strtok 切割字符串並返回首地址
 57                         char *p = strtok(buf, "=");
 58                         // strtok第一次調用時需傳入字符串首地址,此後傳入NULL
 59                         p = strtok(NULL, "=");
 60                         sprintf(buf_out, "\t<%s>%s</%s>\n", buf, p, buf);
 61                 }
 62                 fputs(buf_out, fp_dest);        // fputs 輸出
 63         }
 64         fclose(fp_src); // fclose 關閉文件流
 65         fclose(fp_dest);
 66         return 0;
 67 }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章