.ini 文件的读写出了点问题

hh1 2000-04-10 11:53:00
各位:
我现在有个关于系统文件读写问题请教各位的高见:
系统文件内容大致如下:
[Agboard]
Board 0
Boardno=0
Boardstatus=1
End Board

Board 1
Boardno=1
Boardstatus=2
End Board

?问题:

1;怎样根据Board 0...End Board来识别中间的参数属于第一块板卡的参数,而位于Board 1...End Board中间的参数属于第二块板卡的参数;是否可以不用字符串处理的方法解决。

...全文
363 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Un1 2000-04-12
  • 打赏
  • 举报
回复
试一下,(程序未经调试,仅供参考!)

’读取文件:
Dim lc As Long
lc = FileLen(sFile)

Dim l As Long
l = FreeFile
Open sFile For Binary Access Read As #l
Dim lf As Long
lf = l

Dim bt() As Byte
ReDim bt(lc - 1)

Get #lf, , bt
Close #lf
lf = 0

'2:分割“[xxxx]”
Dim ss As String
For Each ss In Split(StrConv(bt, vbUnicode), "[")

'现在每一个ss里应类似:
'Agboard]
' Board 0
' Boardno=0
' Boardstatus=1
' End Board
'
' Board 1
' Boardno=1
' Boardstatus=2
' End Board

Dim l As Long
l = Instr(ss, "]")
If l > 0 Then
'分离出段 Agboard

Dim sSection As String
sSection = Trim$(Left$(ss, l-1))

Dim sb As String
For each sb In Split(Mid$(ss, l+1), "End Board")
'现在每个sb 应为:
' Board 0
' Boardno=0
' Boardstatus=1

Dim sl As String
For Each sl In Split(sb, vbCrLf)
'现在每个sl里应是一行
'Board 0
If Len(sBoard)> 0 Then
'已得到段信息
l = Instr(sl, "=")
If l > 0 Then
'唉,老兄这以下的你自己搞定吧!
End If
Else

l = Instr(sl, "Board ", vbTextCompare)
If l > 0 Then

’分离出块
Dim sBoard As String
sBoard = Trim$(Mid$(sl, l + 7))
End If

End If

Next

Next
End If
Next
hh1 2000-04-12
  • 打赏
  • 举报
回复
是不是真的没有其他的办法了?

RE: qinghou "你们那个所谓的ini文件格式是谁定的???"

---听说是个老外,真TMD.
dengdun 2000-04-12
  • 打赏
  • 举报
回复
to qinghou:
FileSystemObject当然也是VB中的对象
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.OpenTextFile("c:\1.ini", ForReading,TristateFalse)
str=f.ReadLine
f.Close
这个str中就是文件中一行的内容。
hh1 2000-04-11
  • 打赏
  • 举报
回复
xie xie , dengdun ----trust me! *_*
dengdun 2000-04-11
  • 打赏
  • 举报
回复
我觉得你只能用FileSystemObject对象的ReadLine的方法来逐行读取文件内容,然后判断当前行的内容是否[Board 0],如果是,说明以下属于第一块板卡的参数,然后降下面几行的内容都读进来,一直读到[End Board],最后再在刚才读出来的内容中用InStr函数来进行查找,找到"Boardno="即可读出其内容,找到"Boardstatus="即读出其内容。
如果你的所有文件都是这样的话,我建议你把这个部分写成一个单独的模块,换句话说,就是你自己写一个读写你自己定义格式的INI文件。实际上GetPrivateProfileString这个API函数也是通过这种查找字符串的方式来实现的,只不过他用到了一些快速查找的算法。相信你也会写出一个好的函数来。
lutf 2000-04-11
  • 打赏
  • 举报
回复
INI文件应如下:
[Board 0]
Boardno=0
Boardstatus=1
[Board 1]
Boardno=1
Boardstatus=2
调用API:GetPivateProfileString 或 GetPrivateProfileInt 即可
hh1 2000-04-11
  • 打赏
  • 举报
回复
Thanks for all !
请大家注意一个前提条件就是:这个ini文件的格式不能够改动,因为它是别人定义的而不是由我来定义的。是不是太恶心了,不过我也没辙。
是否存在更可行的方法?
另外问一句:jamwang--可以用程序一个一个匹配例如B0匹配B END."怎样实现?"
@_@





qinghou 2000-04-11
  • 打赏
  • 举报
回复
GetPrivateProfileString只能读标准格式的ini文件,象929说的那种
如果ini文件不能改动,只能一行行读取再自己分析了
你们那个所谓的ini文件格式是谁定的???
dengdun:你说的FileSystemObject对象好象是ASP里面的吧!
zzh 2000-04-11
  • 打赏
  • 举报
回复
用API函数GetPrivateProfileStringg来读写吧!又快又省事,只要把字符串格式化好就行了。
jamwang 2000-04-10
  • 打赏
  • 举报
回复
可以用程序一个一个匹配例如B0匹配B END
929 2000-04-10
  • 打赏
  • 举报
回复
如果一定要在INI中记录参数的话,把INI中记录的格式改一下吧。
比如:

[Board 0]
Boardno=0
Boardstatus=1
[Board 1]
Boardno=1
Boardstatus=2
这样就可以用INI函数来完成了。如果以你这种格式写,我想需要用字符串函数进行分析。
dengdun 2000-04-10
  • 打赏
  • 举报
回复
按你所写的文件格式只能采用查找字符串的方法来解决,建议你采用如下格式来写INI文件:
[Board 0]
Boardno=0
Boardstatus=1

[Board 1]
Boardno=1
Boardstatus=2

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧