Что нового

Получение секций ini файла с комментариями

Andrey_A

Продвинутый
Сообщения
325
Репутация
68
Добрый день, есть регулярное выражение:
Код:
(?m)^(?:[\r\n])?\[[^]\r\n]+\].*(?:[\r\n]+[^[\r\n][^\r\n]+)*

которое позволяет получить содержимое секций ini файла в массив.

Код:
#include <Array.au3>
$sText=FileRead('C:\Test\Name.ini')
$aSections=StringRegExp($sText,'(?m)^(?:[\r\n])?\[[^]\r\n]+\].*(?:[\r\n]+[^[\r\n][^\r\n]+)*',3)
_ArrayDisplay($aSections,"Массив $aSections")


Есть ini файлы, где секции имеют комментарии:
Код:
[1]
ключ11=значение11
;комментарий к ключу 12
ключ12=значение12
ключ13=значение13

;комментарий к секции 3
[3]
ключ31=значение31
ключ32=значение32

ключ33=значение33

;комментарий к секции 2

[2]
ключ21=значение21
ключ22=значение22
ключ23=значение23

;комментарий к секции 4_1
;комментарий к секции 4_2
[4]
ключ41=значение41
ключ42=значение42
ключ43=значение43
Вопрос: можно ли одним регулярным выражением получить содержимое секций вместе с комментариями, которые находятся до секции?
или если нет, то как проще это сделать?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Код:
#include <Array.au3>

$sText = FileRead('C:\Test\Name.ini')
$aSections = StringRegExp($sText, '(?m)^\h*((?:;.+\R+)?\[[^]]+\][\s\S]+?)\s*(?=^\[|;|\z)', 3)

For $i = 0 To UBound($aSections) - 1
	ConsoleWrite($aSections[$i] & @CRLF & '! --------------' & @CRLF)
Next

_ArrayDisplay($aSections, "Массив $aSections")
 
Автор
A

Andrey_A

Продвинутый
Сообщения
325
Репутация
68
CreatoR, спасибо, немного добавил, так самое то:
Код:
$aSections = StringRegExp($sText, '(?m)^\h*((?:;.+\R+){0,}\[[^]]+\][\s\S]+?)\s*(?=^\[|;|\z)', 3)




Добавлено:
Сообщение автоматически объединено:

При дальнейшем тестировании, это регулярное выражение не подходит, т.к. ключи=значение тоже могут иметь комментарии - и вот они не попадают в массив...
 
Верх