1
昨天花了一些时间写了一个WINCE下的INI文件读取,功能很简单啦。。就是去注释, 找出索引和关键字 放在一个3维的字符串数组里。。
2
char mmap[1][2][3]。。研究好半天最后一个[3]是字符的个数。[1]是行,[2]是列。。
3
WINCE是支持UNICODE。。暂时只写了ANSI的。。
4
5
格式就是 VGA = 640X480 ;视频设置
6
7
VGA会保存在列[0], 640X480保存在列[1]里;
8
9
暂时未发现什么BUG。。
10
mmap[1][2][3]用的是全局
11
。。代码嘛如下。。。
12
13
#include <stdio.h>
14
#include <string.h>
15
#include <stdlib.h>
16
17
#define FILEPATH "DVRconfig.ini"
18
19
extern void CompareText(char *dst, const char *buff);
20
extern void GetValue(int *row, const char *src);
21
22
static char gMap[50][2][100] =
{'\0'}; //用于保存 索引 和 值
23
24
int 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
//---------------------------------------------
59
void 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
//---------------------------------------------
104
void 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
{
121
end:
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