| View previous topic :: View next topic |
| Author |
Message |
yozhik

Joined: 04 May 2014 Posts: 347 Location: Электросталь
|
(Separately) Posted: Mon Jul 20, 2026 13:05 Post subject: |
|
|
| Orion9 wrote: | | Сначала заменить _|_78_| на \n. |
Да, но это в силе только для одного лога. А в другом логе начальное число будет другим и оно заранее неизвестно. Т.е. не соблюдается вот это условие:
| Batya wrote: | | начало табличного текста и начало каждой строки начинается с одинакового фрагмента, который меняется для каждого лога |
Я, кажется, понял как нужно сделать. Сейчас только проверю работоспособность в NPP и дооформлю пост. (А потом и ещё и болванную оптимизацию прокомментируем)). _________________ Amo ergo sum |
|
| Back to top |
|
 |
Batya

Joined: 15 Dec 2004 Posts: 2234 Location: Москва, Россия
|
(Separately) Posted: Mon Jul 20, 2026 13:20 Post subject: |
|
|
Orion9
Можно. Только я заранее не знаю точное значение начального фрагмента ("_|_78_|_"). Вместо "78" может быть любое число. При этом просто менять все числа я не могу. Надо поменять именно фрагмент, находящийся в начале, но который заранее не известен. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
| Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 347 Location: Электросталь
|
(Separately) Posted: Mon Jul 20, 2026 13:58 Post subject: |
|
|
Batya
 Условия списком, для удобства 1. Обработка макросом.
2. Строки таблицы могут быть на отдельных строках, а могут быть склеены.
3. Начало табличного текста и начало каждой строки начинается с одинакового фрагмента, который меняется для каждого лога.
4. Количество строк всегда разное.
5. Количество склеенных строк заранее не известно.
6. Начальный фрагмент можно заменить, а можно и оставить.
Я бы сделал так. Разъединяю склеенные строки. Запускаю несколько раз следующую замену (найти/заменить):
| Code: | (?m-s)^(_\|_\d+_\|_)(.+)(\1.+?)$
\1\2\r\n\3 |
За каждый проход эта регулярка будет «отщипывать» нужный нам блок от конца строки. Запускаю «несколько раз» — т.е. столько, сколько нужно. 100 раз, 200 раз. В зависимости от максимально возможного кол-ва склеенного. В конце это приведёт к требуемому виду:
| Code: | _|_начало_|...
_|_начало_|...
_|_начало_|...
и т.п. |
Условие 5 соблюдается, только придётся уточнить максимум.
Это по сути аналог обработки циклом в скрипте. Но у нас же макрос, а значит нас не заботит кол-во проходов регуляркой по тексту. И 100, и 200 отработают в долю секунды. Просто откопировать эту строку макроса столько раз, сколько нужно.
Этим соблюдается условие 3. Ведь, если я правильно понял, в каждом логе _|_начало_| будет одинаковым для всего лога. Т.о. мы не рискуем промахнуться.
После этой обработки можно и пустые строки удалить, и извлечь нужные блоки в отдельную вкладку, если помимо блоков там есть ещё ненужный текст. _________________ Amo ergo sum
Last edited by yozhik on Mon Jul 20, 2026 14:02; edited 1 time in total |
|
| Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 1219
|
(Separately) Posted: Mon Jul 20, 2026 14:01 Post subject: |
|
|
| yozhik wrote: | | А в другом логе начальное число будет другим и оно заранее неизвестно. |
Если табличная часть из лога извлекается пользователем, она всегда будет ему известна | yozhik wrote: | | (А потом и ещё и болванную оптимизацию прокомментируем) |
Да. Очень бы этого хотелось ) |
|
| Back to top |
|
 |
yozhik

Joined: 04 May 2014 Posts: 347 Location: Электросталь
|
(Separately) Posted: Mon Jul 20, 2026 14:06 Post subject: |
|
|
| Orion9 wrote: | | она всегда будет ему известна |
Но тогда придётся макрос каждый раз редактировать )) А это неудобно.
Добавлено спустя 32 минуты:
Orion9
| болван wrote: | | избыточный бэктрекинг (откаты движка), который вызывают ленивые квантификаторы (+? и *?) |
Это существенно только при обработке гигантских массивов (гиг текста). Или для подсветок (как в AkelPad), которые в фоне постоянно шуруют. В остальных случаях речь о микродолях секунды.
| болван wrote: | | (?i)\b(button|cmd|param|path|menu|iconic)(\d++)=(.*) |
(?i) — лучше уточнить, что точка не захватывает перенос строки (?i-s), а то всякое бывает (общие настройки поменял временно и забыл).
(\d++) — одного плюса скорее всего хватит (\d+), т.к. обычно множители жадные по умолчанию (в справках об этом упоминают). В этом именно случае ++ или + большой разницы не даст, но вообще лучше не привыкать к ++, они иногда неожиданные сюрпризы подкидывают.
| болван wrote: | | Дело в том, что TRegExpr... имеет упрощенный, классический Perl-подобный синтаксис |
Не понятно, «упрощенный» по сравнению с чем? В большинстве редакторов синтаксис даже до Perl не дотягивает.
| болван wrote: | | Дело в том, что TRegExpr... В ней отсутствует поддержка сверхжадных (possessive) квантификаторов |
Неправда. Устаревшие сведения. Поддерживает, хоть и с ограничениями, но процентов 90 необходимости покрывает. И \d++ поддерживает точно.
А вообще, чем на болванов время тратить, лучше книжку Джеффри Фридла почитать. А после этого уже и с болванами работать )) _________________ Amo ergo sum |
|
| Back to top |
|
 |
Batya

Joined: 15 Dec 2004 Posts: 2234 Location: Москва, Россия
|
(Separately) Posted: Mon Jul 20, 2026 20:12 Post subject: |
|
|
| yozhik wrote: | (?m-s)^(_\|_\d+_\|_)(.+)(\1.+?)$
\1\2\r\n\3 |
Да, придётся, видимо, использовать множественный проход.
Спасибо! Завтра попробую. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|