Прочитайте весь раздел ini и поместите в массив - PullRequest
0 голосов
/ 28 марта 2011

Хорошо, у меня есть эти функции, которые я пытаюсь использовать через мой код VBA. Это, вероятно, так же, как было бы с VBS.

Вот функция (ы)

'declarations for working with Ini files
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

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

'// INI CONTROLLING PROCEDURES
'reads an Ini string
Public Function ReadIni(Filename As String, Section As String, Key As String) As String
Dim RetVal As String * 255, v As Long
v = GetPrivateProfileString(Section, Key, "", RetVal, 255, Filename)
ReadIni = Left(RetVal, v + 0)
End Function

'reads an Ini section
Public Function ReadIniSection(Filename As String, Section As String) As String
Dim RetVal As String * 255, v As Long
v = GetPrivateProfileSection(Section, RetVal, 255, Filename)
ReadIniSection = Left(RetVal, v + 0)
End Function

Как я могу использовать это, чтобы создать функцию, которая в основном позволяет мне указать только раздел, в котором я хочу просмотреть, а затем найти каждую строку ini в этом разделе, поместить ее в массив и вернуть этот массив, чтобы я мог сделать петля с этим?

Edit: я вижу, что ReadIniSection возвращает все ключи в огромной строке. Значит, мне нужно разделить это.

ReadIniSection возвращает что-то похожее на это: "Fornavn = FORNAVN [] Etternavn = ETTERNAVN" и т. Д. И т. Д. В середине [] нет скобок, это квадрат. Возможно, какой-то персонаж не узнает. Так что, думаю, мне нужно выполнить команду split, которая принимает значение между a = и квадратом.

1 Ответ

2 голосов
/ 28 марта 2011

Посмотрите, поможет ли это - разделение на nullchar \ 0:

Private Sub ListIniSectionLines()
    Dim S As String: S = ReadIniSection("c:\windows\win.ini", "MAIL")
    Dim vLines As Variant: vLines = Split(S, Chr$(0))
    Dim vLine As Variant
    For Each vLine In vLines
       Debug.Print vLine
    Next vLine
End Sub
...