读取ini文件请教,谢谢!!!
有a.ini:
[JCHTCS]
HX=19.26
HX0=370.755
HX1=385.2
HX2=529.65
HX3=674.1
HX4=818.55
HX5=57.36
HX6=1338.4
我是用下面代码读取的 Function GetFromINI(AppName As String, KeyName As String, FileName As String) As String
   Dim RetStr As String
   Dim i As Long
   RetStr = String(255, Chr(0))
   GetFromINI = Left(RetStr, GetPrivateProfileString(AppName, ByVal KeyName, "", RetStr, Len(RetStr), FileName))
   i = InStr(1, GetFromINI, Chr$(0))
   If i <> 0 Then
   GetFromINI = Mid(GetFromINI, 1, i - 1)
   End If
End FunctionPrivate Sub Command1_Click()
   HTFS(0)  = Val(GetFromINI("JCHTCS", "HX", App.Path & "\datini\A.INI"))
   HTFS(1) = Val(GetFromINI("JCHTCS", "HX0", App.Path & "\datini\A.INI"))
   HTFS(2) = Val(GetFromINI("JCHTCS", "HX1", App.Path & "\datini\A.INI"))
   HTFS(3) = Val(GetFromINI("JCHTCS", "HX2", App.Path & "\DATINI\A.INI"))
   HTFS(4) = Val(GetFromINI("JCHTCS", "HX3", App.Path & "\DATINI\A.INI"))
   HTFS(5) = Val(GetFromINI("JCHTCS", "HX4", App.Path & "\DATINI\A.INI"))
   HTFS(6) = Val(GetFromINI("JCHTCS", "HX5", App.Path & "\DATINI\A.INI"))
   HTFS(7) = Val(GetFromINI("JCHTCS", "HX6", App.Path & "\DATINI\A.INI"))
End Sub求教在不知道有几项的情况下,如何读取到数组,谢谢!!!

解决方案 »

  1.   

    用Redim preserve 对数组进行重分配,每次大小增加1,preserve会保留原有的内容,这样做效率不高,不过.ini文件一般不大,应该没有问题的。
      

  2.   

    参考一下吧
    Private Sub Command1_Click()
        '通过动态数组读取
        Dim HTFS() As String
        ReDim HTFS(1000)
        Dim i As Long, s As String
        i = 1
        HTFS(0) = Val(GetFromINI("JCHTCS", "HX", App.Path & "\datini\A.INI"))
        Do
            s = Trim$(Val(GetFromINI("JCHTCS", "HX" & Trim$(CStr(i)), App.Path & "\datini\A.INI")))
            If (Len(s) = 0) Then
                ReDim Preserve HTFS(i - 1)  '改变数组上界
                Exit Do
            End If
            HTFS(i) = s
            i = i + 1
        Loop
        
    End Sub
      

  3.   

    GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long  lpApplicationName -  String,欲在其中查找条目的小节名称。这个字串不区分大小写。如设为vbNullString,就在lpReturnedString缓冲区内装载这个ini文件所有小节的列表  lpKeyName ------  String,欲获取的项名或条目名。这个字串不区分大小写。如设为vbNullString,就在lpReturnedString缓冲区内装载指定小节所有项的列表
      

  4.   


    Private Sub Form_Load()
    Dim myKey As String, mykeyG() As String
    myKey = String(512, Chr(32))
    GetPrivateProfileString "显示统计线", vbNullString, "", myKey, Len(myKey), "c:\setup.ini"
    myKey = Trim(myKey)
    mykeyG = Split(myKey, Chr(0))
    ReDim Preserve mykeyG(UBound(mykeyG) - 2) '所有key名在这个mykeyG数组里
    stop
    End Sub
      

  5.   

    谢谢:chinaboyzyq:
    我想取得"="后面的,该如何做,谢谢!!!
    另:myKey = Trim(myKey)是不是取得"显示统计线"下的所有子项,谢谢!!!
      

  6.   

    下面的只能取得子项名称吗,我想取得子项的全部,该如何做,谢谢!!!!
    Private Sub Form_Load()
    Dim myKey As String, mykeyG() As String
    myKey = String(512, Chr(32))
    GetPrivateProfileString "显示统计线", vbNullString, "", myKey, Len(myKey), "c:\setup.ini"
    myKey = Trim(myKey)
    mykeyG = Split(myKey, Chr(0))
    ReDim Preserve mykeyG(UBound(mykeyG) - 2) '所有key名在这个mykeyG数组里
    stop
    End Sub
      

  7.   


    Public Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long这个函数可取回一个段(例如[JCHTCS]下)所有的Key及其值。lpReturnedString 将返回用 Null (CHR(0)) 分隔的键名和值项,最后一个用双 Null 结束。每一项的格式为:
    key=string
      

  8.   

    1、有了键值,可以再用键值去调用你的GetFromINI获得值。
    2、是取得"显示统计线"下的所有键名(不含值)。GetPrivateProfileString不能得到=后面的值off123提供的GetPrivateProfileSection可以获得小节下的每一项的全部内容,即 keyname=value
    ,然后再去处理等号前后的值;Option Explicit
    Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As LongPrivate Sub Form_Load()
        Dim myKey As String, mykeyG() As String
        myKey = String(1024, Chr(32))
        GetPrivateProfileSection "显示统计线", myKey, 1024, "c:\setup.ini"
        myKey = Trim(myKey)
        mykeyG = Split(myKey, Chr(0)) '显示统计线小节下的所有内容
        ReDim Preserve mykeyG(UBound(mykeyG) - 2) '所有key名=值在这个mykeyG数组里
        Stop
    End Sub
      

  9.   

    更正一下:
    1、有了键名,可以再用键名去调用你的GetFromINI获得键值(=后面的值)。
      

  10.   

    基本上猴哥的意思就是使用VbNullString把所有的子项读取出来,然后用处理文本的方法去处理这些子项,思路很清晰了.