1昨天花了一些时间写了一个WINCE下的INI文件读取,功能很简单啦。。就是去注释, 找出索引和关键字 放在一个3维的字符串数组里。。
2char mmap[1][2][3]。。研究好半天最后一个[3]是字符的个数。[1]是行,[2]是列。。
3WINCE是支持UNICODE。。暂时只写了ANSI的。。
4
5格式就是 VGA = 640X480 ;视频设置
6
7VGA会保存在列[0], 640X480保存在列[1]里;
8
9暂时未发现什么BUG。。
10mmap[1][2][3]用的是全局
11。。代码嘛如下。。。
12
13#include <stdio.h>
14#include <string.h>
15#include <stdlib.h>
16
17#define FILEPATH "DVRconfig.ini"
18
19extern void CompareText(char *dst, const char *buff);
20extern void GetValue(int *row, const char *src);
21
22static char gMap[50][2][100] = {'\0'}; //用于保存 索引 和 值
23
24int main(int argc, char** argv)
25{
26 FILE *fp;
27 int iZise, i, row;
28
29
30 char buff[1000], dst[1000] = {'\0'};
31
32
33 fp = fopen(FILEPATH, "a+");
34
35 if(fp < 0)
36 {
37 printf("文件打开失败\n");
38 }
39 memset(buff, '\0', 1000);
40 iZise = fread(buff, sizeof(char), 1000, fp);
41 CompareText(dst, buff);
42 GetValue(&row, dst);
43
44
45
46 for(i = 0; i <=row; i++)
47 {
48 printf("%s=%s", gMap[i][0], gMap[i][1]);
49 }
50
51
52
53 return 0;
54}
55
56//---------------------------------------------
57//用于删除INI文件中的注释和空格
58//---------------------------------------------
59void CompareText(char *dst, const char *buff)
60{
61 char *tmp = (char *)buff;
62 char *eof = (char *)buff;
63 int i = 0, count = 0;
64
65 while(*tmp++)
66 count++;
67
68 while(i < count)
69 {
70 if(eof[i] == 0x3b) //把行注释;号以后的删掉,填充空格
71 {
72 while(1)
73 {
74 eof[i++] = 0x20;
75 if(count == i)
76 {
77 //eof[i] = 0x0a;
78 break;
79 }
80 if(eof[i] == 0x0a) break;
81 }
82
83 }
84
85 i++;
86 }
87
88 tmp = dst;
89 i = 0;
90
91 while(i < count)
92 {
93 if(eof[i] != 0x20) //删除空格
94 *tmp++ = eof[i];
95
96 i++;
97 }
98}
99
100//-------------------------------------------------
101//获取缓冲中的键和值,分辨保存到mMap[10][10][10]中
102// 行 列 字符串
103//---------------------------------------------
104void GetValue(int *row, const char *src)
105{
106
107 int i = 0, count = 0;
108 *row = 0;
109 char *tmp = (char *)src;
110
111
112
113 while(*tmp++)
114 ++count;
115
116 tmp = (char *)src;
117
118 int no = 0, no1 = 0;
119 while(i < count)
120 {
121end:
122 if(tmp[i] != 0x3d)
123 {
124 gMap[*row][0][no] = tmp[i]; //保存索引
125 }
126 else if(tmp[i] == 0x3d)
127 {
128 while(1)
129 {
130 if(count == i) break;
131 if(tmp[i] == 0x0a)
132 {
133 gMap[*row][1][no1 - 1] = '\0';
134 (*row)++;
135 no = 0;
136 no1 = 0;
137 goto end;
138 }
139
140 gMap[*row][1][no1] = tmp[i + 1]; //保存值
141 i++;
142 no1++;
143 }
144
145 }
146
147 i++;
148 no++;
149 }
150
151}
152