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 }
将.ini配置文件转换为.xml文件格式
猜你喜欢
转载自blog.csdn.net/trb331617/article/details/79165633
今日推荐
周排行