Приветствую!
Необходимо сделать текстовый файлик с настройками (*.ini)
привемрно такого формата:
[Группа1]
Параметр1=блаблабла
параметр2=труляля
параметр3=гыгыгы
ну и так далее.
Вопрос - существует ли "нечто", позволяющее работать с такой структурой для быстрого чтение требуемого параметра в указаной группе.
За что "держаться" и "куда смотреть" для решения задачи?
Значения могут быть разные по своему составу, длине и т.д.
Используется VB 2008 EE.
Существует файл, используемый ДАВНО написанной (и не мной) программой.
Она имеет файл указанного формата - формат УЖЕ ВЫБРАН, и необходимо прочитать настройки той самой программы.
Вопрос не содержал "как записать", вопрос был "КАК ПРОЧИТАТЬ".
Спрошено - значит надо, и расчитываю на помощь в вариантах реализации, а не на калькуляцию потребного рабочего времени.
Спасибо всем откликнувшимся, бум ковыряться дальше.
'Private Declare Function GetPrivateProfileStruct Lib "kernel32.dll" Alias "GetPrivateProfileStructA" (ByVal lpszSection As String, ByVal lpszKey As String, lpStruct As Any, ByVal uSizeStruct As Long, ByVal szFile As String) As Long
PrivateDeclareFunction WritePrivateProfileString Lib"kernel32.dll"Alias"WritePrivateProfileStringA" (ByVal lpApplicationName AsString, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName AsString) AsLong
'Private Declare Function WritePrivateProfileStruct Lib "kernel32.dll" Alias "WritePrivateProfileStructA" (ByVal lpszSection As String, ByVal lpszKey As String, lpStruct As Any, ByVal uSizeStruct As Long, ByVal szFile As String) As Long
Dim mc As System.Text.RegularExpressions.MatchCollection = _
New System.Text.RegularExpressions.Regex("(?<key>\w+)\s*=\s*(?<value>.*)((?=\W$)|\z)", System.Text.RegularExpressions.RegexOptions.Multiline).Matches( _
"[Группа1]" & vbCrLf & _
"Параметр1 = блаблабла" & vbCrLf & _
"параметр2 = труляля" & vbCrLf & _
"параметр3 = гыгыгы" & vbCrLf & _
"[Группа2]" & vbCrLf & vbCrLf & _
"Параметр1 = ухтыухтыухты" & vbCrLf & _
"параметр2 = воттаквот" & vbCrLf & _
"параметр3 = простопараметр" & vbCrLf & _
"параметр4=итакоебывает" _
)
ForEach m As System.Text.RegularExpressions.Match In mc : MsgBox(m.Groups("key").Value & " = " & m.Groups("value").Value) : Next
Не, Лех.. так не пойдет, это криво. Я как то давно писал библиотеку для работы с ini.. Поискать надо на винте просто. Там все по взрослому.. со всеми правилами ООП!
Минусы
- теряется название группы
- теряются комменты
- не учел тот факт, что у параметра может не быть значения, а это значит что на строке a(1).Trim получишь исключение
А халявы сегодня не будет
Если найду свою библиотеку, то будет! ))) Она даже записывать умеет,и поддерживает каменты к параметрам и секциям + проверяет уникальность ключа и секции