|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] StringRegExp: Получение массива где каждый элемент содержит Ini-секцию |
|
[решено] StringRegExp: Получение массива где каждый элемент содержит Ini-секцию
|
Must AutoIt Сообщения: 3054 |
Профиль | Сайт | Отправить PM | Цитировать #include <Array.au3> $sRead = _ "[Sect 1]" & @CRLF & _ "Key=Val" & @CRLF & _ "[Sect 2]" & @CRLF & _ "Key=Val" & @CRLF & _ "[Sect 3]" & @CRLF & _ "Key=Val" ;Эта строчка добавляет новую строку перед каждой секцией в $sRead, что позволяет $sPattern быть "правильным" запросом поиска ;$sRead = StringRegExpReplace($sRead, '.*(\[.*\]).*', @CRLF & '\1') $sPattern = '(?s).*?(\[.*?\].*?)(?:(?:\r\n){2}|\[.*?\]|$)' $aResults = StringRegExp($sRead, $sPattern, 3) _ArrayDisplay($aResults) Если раскоментировать строчку с дополнительным вызовом StringRegExp, то будет видно каков мне нужен результат. P.S Строку с Pattern: Я уже менял раз 100, всё что удалось так это сбор секции через одну, а не по порядку. Дело в том что закоментированная строчка просто добавляет перевод строки (@CRLF) к имени каждой секции, в таком раскладе мой запрос работает, т.е если в ini-файле секции разделены между собой пустой строкой, то запрос актуален, а если строки нет, и секции сливаются, то мой запрос уже не работает - а нужно чтобы срабатывала вне зависимости от наличия пустых строк. |
|
------- Отправлено: 02:36, 23-08-2009 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R, пара паттернов, но в параметрах не должно быть квадратных скобок:
'\[[^]]+\][^[]+', '(?m)^\[[^]]+\][^[]+[^[\n\r]' |
Отправлено: 08:35, 23-08-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата amel27:
|
|
------- Отправлено: 16:01, 23-08-2009 | #3 |
Старожил Сообщения: 215
|
Профиль | Отправить PM | Цитировать Вопрос: а обязательно именно регулярными выражениями это делать?
|
------- Отправлено: 17:31, 23-08-2009 | #4 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
|
||
Отправлено: 17:36, 23-08-2009 | #5 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата SyDr:
P.S Не нужно плиз приводить примеры без RegExp, меня интересует только с ним, точка. Цитата amel27:
|
||
------- Отправлено: 17:41, 23-08-2009 | #6 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Creat0R, решено?
|
Отправлено: 07:22, 27-08-2009 | #7 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать amel27,
Ещё один вопрос в том же направлении. Нужно просто удалить целиком одну секцию (например [Sect 2]), с теми же условиями (чтобы также между секциями небыло лишних переводов строк). Прбовал подобрать по аналогии последнего шаблона, но ничего толкового не вышло - Я его если честно не понимаю до конца. |
------- Отправлено: 18:26, 27-08-2009 | #8 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
$sRead = _ "[Sect 1]" & @CRLF & _ "Key=Val" & @CRLF & _ "[Sect 2]" & @CRLF & _ "Key=Val" & @CRLF & _ "[Sect 3]" & @CRLF & _ "Key=Val" ConsoleWrite($sRead &@CRLF&"---"&@CRLF) $sSection = "[Sect 2]" $sPattern = '(?mi)^\Q'& $sSection &'\E[\r\n]+(?:[^[\r\n].*(?:[\r\n]+|$))*' $sResults = StringRegExpReplace($sRead, $sPattern, "") ConsoleWrite($sResults &@CRLF) |
|
Отправлено: 07:04, 28-08-2009 | #9 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата amel27:
$sSection = "\[Sect 2\]" $sPattern = '(?ims)(.*?[\n\r]|)' & $sSection & '.*?(^\[.*?|\z)' $sResults = StringRegExpReplace($sRead, $sPattern, '\1\2') Я всё никак не привыкну к использованию (?m), которое задаёт другое свойство «^» и «$», поэтому «\z» заменяет конец всей строки в этом случае. Кстати, это в каком то роде замена IniDelete (без третьего параметра - key) - которая оставляет пустые строчки при удалении всей секции. |
|
------- Отправлено: 07:52, 28-08-2009 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] StringRegExp не работает? %) | Freesty1er | AutoIt | 4 | 26-01-2022 09:26 | |
Java - Элемент массива | ManHack | Программирование и базы данных | 2 | 23-10-2009 10:41 | |
Получение массива из строки с числами | malev | AutoIt | 3 | 11-09-2009 00:08 | |
.NET - [решено] Получение массива ячеек для объединения | Delirium | Программирование и базы данных | 10 | 29-07-2009 06:49 | |
Создание массива строк,где каждая строка оканчивается null | Crew | Программирование и базы данных | 6 | 22-04-2003 16:59 |
|