天马行空工作室

 找回密码
 加入天马
搜索
查看: 3014|回复: 0

文件转换 ini转化成xml

[复制链接]
发表于 2012-5-16 17:50:16 | 显示全部楼层 |阅读模式
       我觉得还有更简单的算法。
    以下是源码
  1. #include<stdio.h>

  2. int main(void)
  3. {
  4.             FILE *ini_f,*xml_f;
  5.             int n, note_flag, sec_flag, key_flag, val_flag, first_key, first_sec, sec, i, j;
  6.             note_flag = sec_flag = key_flag = val_flag = first_key = first_sec = sec = i = n  =0;
  7.             long read_adr, now_adr;
  8.             int sec_str[20], str[20];
  9.             int tmp[20];
  10.        
  11.         if((ini_f = fopen("001.txt","r")) == NULL){
  12.                     printf("error open 001.txt file\n");
  13.         }
  14.         if((xml_f = fopen("xml.txt","w")) == NULL){
  15.                     printf("error open xml.txt file\n");
  16.         }
  17.         while((n = fgetc(ini_f)) != EOF){
  18.         //------------------------------------------
  19.                     if(';' == n){
  20.                                 note_flag = 1;
  21.                                 fprintf(xml_f,"<!-- ");
  22.                                 key_flag = 0;
  23.                                 continue;
  24.                      }
  25.                    if('[' == n){
  26.                         if(first_sec){
  27.                                 now_adr = ftell(xml_f);
  28.                                 fseek(xml_f, read_adr,SEEK_SET );
  29.                                 fprintf(xml_f, "\n</");
  30.                                 for(j=0; j<sec; j++)
  31.                                         fputc(sec_str[j], xml_f);
  32.                                 fprintf(xml_f, ">\n");
  33.                                 fseek(xml_f, now_adr, SEEK_SET);
  34.                                 sec = 0;
  35.                         }
  36.                         sec_flag =1;
  37.                         fprintf(xml_f, "<");
  38.                         first_sec =1;
  39.                         continue;
  40.                 }
  41.                 if(note_flag){
  42.                         if('\n' == n){
  43.                                 fprintf(xml_f, " -->");
  44.                                 note_flag = 0;
  45.                         }
  46.                 }
  47. //---------------------------------------------------------
  48.                 if(sec_flag){
  49.                         if(']' != n){
  50.                                 if((n >= 'a' && n <= 'z') ||( n <= 'Z' && n >= 'A')){
  51.                                         sec_str[sec] = n;
  52.                                         sec++;
  53.                                 }
  54.                         }
  55.                         if(']' == n){
  56.                                 fprintf(xml_f, ">\n");
  57.                                 sec_flag = 0;
  58.                                 key_flag = 1;
  59.                                 first_key = 1;
  60.                                 continue;
  61.                         }
  62.                 }
  63.                 if(key_flag){
  64.                         if(val_flag){
  65.                                 if('\n' == n){
  66.                                         fprintf(xml_f, "</");
  67.                                         for(j=0; j<i; j++)
  68.                                                 fputc(str[j], xml_f);
  69.                                         fprintf(xml_f, ">");
  70.                                         val_flag = 0;
  71.                                         read_adr = ftell(xml_f);
  72.                                         fprintf(xml_f,"                \n");
  73.                                         i = 0;
  74.                                         first_key = 1;
  75.                                         continue;
  76.                                 }
  77.                                 fputc(n, xml_f);
  78.                         }
  79.                         if('=' == n){
  80.                                 first_key =0;
  81.                                 fprintf(xml_f, "\t<");
  82.                                 for(j=0; j<i; j++){
  83.                                         fputc(str[j], xml_f);
  84.                                 }
  85.                                 fprintf(xml_f, ">");
  86.                                 val_flag = 1;
  87.                         }
  88.                         if(first_key){
  89.                                 if((n >= 'a' && n <= 'z') ||( n <= 'Z' && n >= 'A')){
  90.                                         str[i] = n;
  91.                                         i++;
  92.                                 }
  93.                         }
  94.                         continue;
  95.                 }
  96.                 fputc(n, xml_f);
  97.         }
  98.         fprintf(xml_f, "</");
  99.         for(j=0; j<sec; j++)
  100.                 fputc(sec_str[j], xml_f);
  101.         fprintf(xml_f, ">\n");
  102.         fclose(xml_f);
  103.         fclose(ini_f);
  104. }
复制代码
下面是一个ini文件
  1. ;Configuration of http
  2. [http]
  3. domain=www.masite.com
  4. port=8080
  5. cgihome=/cgi-bin

  6. ;Configuration of db
  7. [database]
  8. server =mysql
  9. user = myname
  10. password = toopendatabase

复制代码
转换后的结果
  1. <!-- Configuration of http -->
  2. <http>
  3.         <domain>www.masite.com</domain>               
  4.         <port>8080</port>               
  5.         <cgihome>/cgi-bin</cgihome>
  6. </http>
  7.       
  8. <!-- Configuration of db -->
  9. <database>
  10.         <server>mysql</server>               
  11.         <user> myname</user>               
  12.         <password> toopendatabase</password>               
  13. </database>
复制代码

评分

参与人数 1给力 +2 酱油 +4 收起 理由
黑暗天使 + 2 + 4 厉害,精通ini和html的语法……

查看全部评分

您需要登录后才可以回帖 登录 | 加入天马

本版积分规则

Archiver|手机版|小黑屋|天马行空工作室 ( 京ICP备12003429号  

GMT+8, 2019-10-21 11:32 , Processed in 1.232345 second(s), 19 queries .

Powered by Discuz! v8

© 2010-2014 文件转换 ini转化成xml - C\C++ 天马行空工作室

快速回复 返回顶部 返回列表