INI文件操作,如何实现SQL方式的排序或检索?

金蝶高级实施顾问 2008-03-19 09:24:57
INI格式如下:
[AAAAA]
0=TEXT0;0;XXX;YYY;ZZZ……
1=TEXT1;0;XXX;YYY;ZZZ……
2=TEXT2;1;XXX;YYY;ZZZ……
3=TEXT3;1;XXX;YYY;ZZZ……
4=TEXT4;2;XXX;YYY;ZZZ……
5=TEXT5;2;XXX;YYY;ZZZ……
6=TEXT6;3;XXX;YYY;ZZZ……
7=TEXT7;3;XXX;YYY;ZZZ……
…………………………


如果这是数据库格式

字段0 字段1 字段2 字段3 字段4 字段5 …………
0 TEXT0 0 XXX YYY ZZZ …………
1 TEXT1 0 XXX YYY ZZZ …………
2 TEXT2 1 XXX YYY ZZZ …………
3 TEXT2 1 XXX YYY ZZZ …………
4 TEXT2 2 XXX YYY ZZZ …………
5 TEXT2 2 XXX YYY ZZZ …………


就可以使用SQL语句:select 字段名1,字段3,字段4,字段5 from AAAAA where 字段2=0 order by 字段0 asc
出现结果就是
TEXT0,XXX,YYY,ZZZ
TEXT1,XXX,YYY,ZZZ

但INI读取不熟。。请高手指教,如何实现SQL的结果??

不打算用数据库。只用INI操作,因为比较小。而且,用户修改也比较方便。

如果很难。可以在追200分。
...全文
51 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
of123 2008-03-19
Jet 引擎只认识文件。

简单一点的方法,就是转成 .txt 文件来处理:

Dim strTmp As String
Dim blnOpen As Boolean

If Dir(App.Path & "\mydata", vbDirectory) = "" Then
'创建一个目录,这将来相当于一个数据库
MkDir App.Path & "\mydata"
End If

Open App.Path & "\penguin.ini" For Input As #1

Do Until EOF(1)
Line Input #1, strTmp
If Left(strTmp, 1) = "[" Then
If blnOpen Then Close #2
strTmp = Trim(Replace(Replace(strTmp, "[", ""), "]", ""))
Open App.Path & "\mydata\" & strTmp & ".txt" For Output As #2
blnOpen = True
Else
strTmp = Replace(strTmp, "=", vbTab)
strTmp = Replace(strTmp, ";", vbTab)
Print #2, strTmp
End If
Loop
If blnOpen Then Close #2
Close #1

以上,将你的 ini 文件中的每个段写入一个 txt 文件。分隔符改成了制表符。理论上分隔符可以是任何字符,但那需要另外建立 Schema.ini 加以说明。

下面将可以访问了:
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\mydata\;Extended Properties=""text;HDR=No;FMT=Delimited"""
rs.Open "select * from AAAAA order by 1 asc"
回复
[Quote=引用 3 楼 of123 的回复:]
不是不可以。例如采用数据库引擎,将你的 Ini 文本当作外部数据库来处理。但数据库引擎对文本的格式有一定要求。

例如,你的[AAAAA]必须去掉(把它作为文件名,因为数据库引擎是以文本文件作为表的),字段分隔符要统一,等等。

或者你自己写一个数据库引擎?

cn.Open "Provider=penguinMII.Jet.OLEDB.100.0;Data Source=penguin.ini"
rs.Open "select 字段名1,字段3,字段4,字段5 from AAAAA where 字段2=0 order …
[/Quote]

那INI格式不是要改变了????这样别的一些系统配置参数也要用这个数据库引擎来实现???

有没有把AAAAA下的所有数据都读到内存里。然后把这些数据做为数据库的方式来操作呢????
如果可以,能不能说具体点呢?
回复
of123 2008-03-19
不是不可以。例如采用数据库引擎,将你的 Ini 文本当作外部数据库来处理。但数据库引擎对文本的格式有一定要求。

例如,你的[AAAAA]必须去掉(把它作为文件名,因为数据库引擎是以文本文件作为表的),字段分隔符要统一,等等。

或者你自己写一个数据库引擎?

cn.Open "Provider=penguinMII.Jet.OLEDB.100.0;Data Source=penguin.ini"
rs.Open "select 字段名1,字段3,字段4,字段5 from AAAAA where 字段2=0 order by 字段0 asc", cn

如何?
回复
如果用ini,就用其他的方法,而不是假sql语句。
回复
饮水需思源 2008-03-19
还是建议用用数据库吧,ACCESS就可以了,一个mdb文件
回复
相关推荐
发帖
VB基础类
创建于2007-09-28

7489

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2008-03-19 09:24
社区公告
暂无公告