当前位置:编程学习 > VB >>

INI 文件读写

INI内容为未知 
[section1] 
keyword1=valuel 
keyword2=value2 
…… 
[section2] 
keyword1=value1 
keyword2=value2 
…… 
我想读取 SECTION1的值 和section1里的KEYWORD值

我已经有可以读取未知SECTION1的代码

可是如何读取未知的section1里的KEYWORD值 --------------------编程问答--------------------
Private Declare Function 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

Function GetProString(段 As String, 标题 As String, 默认值 As String, 文件名 As String) As String
    Const ProStringLen = 8096
    Dim Res As Long, S As String, i As Long
    S = Space(ProStringLen)
    Res = GetPrivateProfileString(段, 标题, 默认值, S, ProStringLen, 文件名)
    S = Trim(Left(S, Res))
    If S <> "" Then
        i = Len(S)
        Do While Mid(S, i, 1) = vbNullChar
            i = i - 1
        Loop
        S = Left(S, i)
    End If
    GetProString = Trim(S)
End Function

Private Sub Form_Load()
    Dim Apps() As String, i As Integer
    Apps = Split(GetProString(vbNullString, vbNullString, "", "c:\xx.ini"), vbNullChar)
    Debug.Print "项目总数=" & UBound(Apps) - LBound(Apps) + 1
    For i = LBound(Apps) To UBound(Apps)
        Debug.Print "第" & i; "项 = " & Apps(i)
    Next i
    End
End Sub


以上是读取INI文件中未知[SECTION1]的代码 --------------------编程问答--------------------

Option Explicit


Private Declare Function 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 pFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "KERNEL32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
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 Long

'*************************************
   '目的:写入数据至Ini文件
   
   '输入: FileName 文件名
   '      AppName  项目名
   '      In_Key   键名
   '      In_Data  键名上的数值
   
   '返回:  写入成功 True
   '       写入失败 False
   
'*************************************

Public Function WriteIniStr(ByVal FileName As String, ByVal AppName As String, ByVal In_Key As String, ByVal In_Data As String) As Boolean
On Error GoTo WriteIniStrErr
WriteIniStr = True
If VBA.Trim(In_Data) = "" Or VBA.Trim(In_Key) = "" Or VBA.Trim(AppName) = "" Then
   GoTo WriteIniStrErr
Else
   WritePrivateProfileString AppName, In_Key, In_Data, FileName
End If
Exit Function
WriteIniStrErr:
   Err.Clear
   WriteIniStr = False
End Function


'*************************************
   '目的:从Ini文件中读取数据
   
   '输入: FileName 文件名
   '      AppName  项目名
   '      In_Key   键名
   
   '返回: 取得给定键名上的数据
   
'*************************************

Public Function GetIniStr(ByVal FileName As String, ByVal AppName As String, ByVal In_Key As String) As String
On Error GoTo GetIniStrErr
If VBA.Trim(In_Key) = "" Then
   GoTo GetIniStrErr
End If
Dim GetStr As String
  GetStr = VBA.String(128, 0)
  GetPrivateProfileString AppName, In_Key, "", GetStr, 256, FileName
  GetStr = VBA.Replace(GetStr, VBA.Chr(0), "")
If GetStr = "" Then
   GoTo GetIniStrErr
Else
   GetIniStr = GetStr
   GetStr = ""
End If
Exit Function
GetIniStrErr:
   Err.Clear
   GetIniStr = ""
   GetStr = ""
End Function



'*************************************
   '目的:编历Ini文件中的某个主键
   
   '输入: FileName 文件名
   '      AppName  项目名

   
   '返回:某个项目下的所有键及值
   
'*************************************


Public Function GetInfoSection(AppName As String, FileName As String) As String()
          Dim strReturn     As String * 32767
          Dim strTmp     As String
          Dim nStart     As Integer
          Dim nEnd       As Integer
          Dim i       As Integer
          Dim sArray()     As String
            
          Call GetPrivateProfileSection(AppName, strReturn, Len(strReturn), FileName)
            
          strTmp = strReturn
          i = 1
          Do While strTmp <> ""
                  nStart = nEnd + 1
                  nEnd = InStr(nStart, strReturn, vbNullChar)
                  strTmp = Mid$(strReturn, nStart, nEnd - nStart)
                  If Len(strTmp) > 0 Then
                          ReDim Preserve sArray(1 To i)
                          sArray(i) = strTmp
                          i = i + 1
                  End If
          Loop
          GetInfoSection = sArray
  End Function
--------------------编程问答-------------------- 太好了,学习学习! --------------------编程问答--------------------
Option Explicit

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, lpKeyName As Any, ByVal lpDefault As String, ByVal lpRetunedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lplFileName As String) As Long


Private XMH As Variant
Function GetFromINI(AppName As String, KeyName As String, FileName As String) As String
   Dim RetStr As String
   RetStr = String(255, Chr(0))
   GetFromINI = Left(RetStr, GetPrivateProfileString(AppName, ByVal KeyName, "", RetStr, Len(RetStr), FileName))
   Dim i As Long
   i = InStr(1, GetFromINI, Chr$(0))
   GetFromINI = Mid(GetFromINI, 1, i - 1)
End Function

Private Sub Command1_Click()

    Dim iniPath As String
    iniPath$ = App.Path + "\GPDXXini32.ini"
    XMH = Split(GetFromINI("MTABLE", "XM1", iniPath), " ")
    'MsgBox UBound(XMH)
    MsgBox LenB(XMH(5))

End Sub
补充:VB ,  API
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,