| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 945 人关注过本帖
标题:一个ini文件转换xml文件的源码
只看楼主 加入收藏
深渊叹息
Rank: 2
等 级:论坛游民
帖 子:5
专家分:10
注 册:2012-3-19
结帖率:0
收藏
已结贴  问题点数:10 回复次数:2 
一个ini文件转换xml文件的源码
应该有更好的算法。有什么需要改进的地方 求指教
程序代码:
#include<stdio.h>

int main(void)
{
    FILE *ini_f,*xml_f;
    int n, note_flag, sec_flag, key_flag, val_flag, first_key, first_sec, sec, i, j;
    note_flag = sec_flag = key_flag = val_flag = first_key = first_sec = sec = i = n  =0;
    long read_adr, now_adr;
    int sec_str[20], str[20];
    int tmp[20];
   

    if((ini_f = fopen("001.txt","r")) == NULL){
        printf("error open 001.txt file\n");
    }
    if((xml_f = fopen("xml.txt","w")) == NULL){
        printf("error open xml.txt file\n");
    }
    while((n = fgetc(ini_f)) != EOF){
    //------------------------------------------
                if(';' == n){
                        note_flag = 1;
                        fprintf(xml_f,"<!-- ");
            key_flag = 0;
            continue;
                }
                if('[' == n){
            if(first_sec){
                now_adr = ftell(xml_f);
                fseek(xml_f, read_adr,SEEK_SET );
                fprintf(xml_f, "\n</");
                for(j=0; j<sec; j++)
                    fputc(sec_str[j], xml_f);
                fprintf(xml_f, ">\n");
                fseek(xml_f, now_adr, SEEK_SET);
                sec = 0;
            }
            sec_flag =1;
            fprintf(xml_f, "<");
            first_sec =1;
            continue;
                }
        if(note_flag){
            if('\n' == n){
                fprintf(xml_f, " -->");
                note_flag = 0;
            }
        }
//---------------------------------------------------------
        if(sec_flag){
            if(']' != n){
                if((n >= 'a' && n <= 'z') ||( n <= 'Z' && n >= 'A')){
                    sec_str[sec] = n;
                    sec++;
                }
            }
            if(']' == n){
                fprintf(xml_f, ">\n");
                sec_flag = 0;
                key_flag = 1;
                first_key = 1;
                continue;
            }
        }
        if(key_flag){
            if(val_flag){
                if('\n' == n){
                    fprintf(xml_f, "</");
                    for(j=0; j<i; j++)
                        fputc(str[j], xml_f);
                    fprintf(xml_f, ">");
                    val_flag = 0;
                    read_adr = ftell(xml_f);
                    fprintf(xml_f,"                \n");
                    i = 0;
                    first_key = 1;
                    continue;
                }
                fputc(n, xml_f);
            }
            if('=' == n){
                first_key =0;
                fprintf(xml_f, "\t<");
                for(j=0; j<i; j++){
                    fputc(str[j], xml_f);
                }
                fprintf(xml_f, ">");
                val_flag = 1;
            }
            if(first_key){
                if((n >= 'a' && n <= 'z') ||( n <= 'Z' && n >= 'A')){
                    str[i] = n;
                    i++;
                }
            }
            continue;
        }
        fputc(n, xml_f);
    }
    fprintf(xml_f, "</");
    for(j=0; j<sec; j++)
        fputc(sec_str[j], xml_f);
    fprintf(xml_f, ">\n");
    fclose(xml_f);
    fclose(ini_f);
}
以下是一个ini文件
程序代码:
;Configuration of http
[http]
domain=www.8080
cgihome=/cgi-bin

;Configuration of db
[database]
server =mysql
user = myname
password = toopendatabase
转换之后的xml文件
程序代码:
<!-- Configuration of http -->
<http>
    <domain>www. <port>8080</port>               

    <cgihome>/cgi-bin</cgihome>
</http>
      

<!-- Configuration of db -->
<database>
    <server>mysql</server>               

    <user> myname</user>               

    <password> toopendatabase</password>               

</database>



[ 本帖最后由 深渊叹息 于 2012-5-16 22:03 编辑 ]
搜索更多相关主题的帖子: 源码 算法 color 
2012-05-16 22:00
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
收藏
得分:5 
实现不错。
如果能提高代码利用率,会更好。
如根据功能内聚性,做成一些通用函数。
如:ini文件解码函数,xml文件打包函数,应用数据结构设定。
2012-05-17 09:12
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:5 
偶觉得你的代码可能还有bug.....

这里空两行,

;Configuration of http
[http]
domain=www.
port=8080
cgihome=/cgi-bin ;这里加个注释
cgihome=/cgi-bin-other ;再来个同名段

[_http];这里再来个空段


[System]
_system = "new line";空两行,再来个带引号的。。。

;Configuration of db
[database]
server =mysql
user = myname
password = toopendatabase

能处理否?

我们都在路上。。。。。
2012-05-17 15:20
快速回复:一个ini文件转换xml文件的源码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040321 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved