You can use the following code to load a text file like:
Code:
Key1 "Value1"
Key2 "Value2"
Key3
{
    Key4 "Value3"
    Key5
    {
        Key6 "Value4"
        Key7 "Value5"
    }
}
Key8 "Value6"
into a collection like
Code:
c(Key1) = Value1
c(Key2) = Value2
c(Key3)(Key4) = Value3
c(Key3)(Key5)(Key6) = Value4
c(Key3)(Key5)(Key7) = Value5
c(Key8) = Value6
Here is the sub:
VB Code:
  1. Sub LoadConfig(ByVal Config As String, ByRef PassedCollection As Collection)
  2.     Dim i As Integer
  3.     Dim Binary As String
  4.     Dim c() As Collection
  5.     Dim BufferingKey() As Boolean
  6.     Dim BufferingVal() As Boolean
  7.     Dim Key() As String
  8.     Dim Val() As String
  9.     i = FreeFile
  10.     Open Config For Binary As i
  11.         Binary = Space(LOF(i))
  12.         Get i, , Binary
  13.     Close i
  14.     Binary = Replace(Binary, vbCrLf, "")
  15.     Binary = Replace(Binary, " ", "")
  16.     i = 0
  17.     ReDim c(i)
  18.     ReDim BufferingKey(i)
  19.     ReDim BufferingVal(i)
  20.     ReDim Key(i)
  21.     ReDim Val(i)
  22.     Set c(i) = New Collection
  23.     BufferingKey(i) = True
  24.     Do While Len(Binary) > 0
  25.         Select Case Mid(Binary, 1, 1)
  26.             Case "{"
  27.                 i = i + 1
  28.                 ReDim Preserve c(i)
  29.                 ReDim Preserve BufferingKey(i)
  30.                 ReDim Preserve BufferingVal(i)
  31.                 ReDim Preserve Key(i)
  32.                 ReDim Preserve Val(i)
  33.                 Set c(i) = New Collection
  34.                 BufferingKey(i) = True
  35.             Case "}"
  36.                 i = i - 1
  37.                 c(i).Add c(i + 1), Key(i)
  38.                 Key(i) = ""
  39.                 Val(i) = ""
  40.             Case """"
  41.                 If BufferingVal(i) Then
  42.                     c(i).Add Val(i), Key(i)
  43.                     Key(i) = ""
  44.                     Val(i) = ""
  45.                 End If
  46.                 BufferingKey(i) = IIf(BufferingKey(i), False, True)
  47.                 BufferingVal(i) = IIf(BufferingVal(i), False, True)
  48.             Case Else
  49.                 If BufferingKey(i) Then: Key(i) = Key(i) & Mid(Binary, 1, 1)
  50.                 If BufferingVal(i) Then: Val(i) = Val(i) & Mid(Binary, 1, 1)
  51.         End Select
  52.         Binary = Mid(Binary, 2)
  53.     Loop
  54.     Set PassedCollection = c(0)
  55. End Sub
And here is an example
VB Code:
  1. Private Sub Form_Load()
  2.     Dim c As Collection
  3.     LoadConfig App.Path & "\test.txt", c
  4.     Debug.Print "c(Key1) = " & c("Key1")
  5.     Debug.Print "c(Key2) = " & c("Key2")
  6.     Debug.Print "c(Key3)(Key4) = " & c("Key3")("Key4")
  7.     Debug.Print "c(Key3)(Key5)(Key6) = " & c("Key3")("Key5")("Key6")
  8.     Debug.Print "c(Key3)(Key5)(Key7) = " & c("Key3")("Key5")("Key7")
  9.     Debug.Print "c(Key8) = " & c("Key8")
  10. End Sub