Да, кстати, почему не подходит? В чем там принципиальное отличие текста?VladSh wrote:YuS
TextReplace не подходит - надо работать с программно полученным текстом.
Регулярные выражения
- Author
- Message
-
Offline
- Posts: 3217
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
yozhic, YuS
Спасибо за помощь и пояснения! Теперь понятно
Спасибо за помощь и пояснения! Теперь понятно
В TextReplace отсутствует параметр чтобы передать текст. Т.е. этот метод сам получает данные из окна редактирования AkelPad. Регулярки хороши тем, что они работают с произвольным текстом, который может быть предварительно программно обработан.YuS wrote:Да, кстати, почему не подходит? В чем там принципиальное отличие текста?
-
Offline
- Posts: 512
- Joined: Sun Sep 15, 2013 8:25 am
- Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы
Требуется замена зависящая от настроек "Параметры-Редактор 1->Размер табуляции" или именно "один-к-одному"? Если второе, то можно заменить так:Skif_off wrote:как можно в строке "^\t++<" заменить табуляцию на точно такое же количество пробелов?
Предполагается использовать AkelPad.TextReplace().
Code: Select all
AkelPad.TextReplace(0, "\\t", " ", 0x00280001, true);
Last edited by YuS on Sat Jan 23, 2016 8:54 am, edited 1 time in total.
-
Offline
- Posts: 1161
- Joined: Sun Oct 20, 2013 11:44 am
YuS
Один символ табуляции на один символ пробела, только в начале строки. Считать - не вариант: строк может быть слишком много.
Если AkelPad.TextFind() и AkelPad.TextReplace
() работают как через GUI, нужно будет попробовать
А в тексте для поиска и замены слэши точно нужно удваивать? У меня так получается какая-то ерунда.
Один символ табуляции на один символ пробела, только в начале строки. Считать - не вариант: строк может быть слишком много.
Если AkelPad.TextFind() и AkelPad.TextReplace
() работают как через GUI, нужно будет попробовать
А в тексте для поиска и замены слэши точно нужно удваивать? У меня так получается какая-то ерунда.
-
Offline
- Posts: 512
- Joined: Sun Sep 15, 2013 8:25 am
- Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы
В таком варианте придется скрипт запускать на каждое следующее совпадение... я там добавил hint, может такой вариант подойдёт...Skif_off wrote:YuS
Один символ табуляции на один символ пробела, только в начале строки. Считать - не вариант: строк может быть слишком много.
Если AkelPad.TextFind() и AkelPad.TextReplace
() работают как через GUI, нужно будет попробовать
Хмм, сложно сказать, я у более опытных товарищей подсмотрел, что слеши удвоенные используются, но у меня и так работает, и эдак... т.е. подсказать как должно быть правильно, увы не могу.Skif_off wrote: А в тексте для поиска и замены слэши точно нужно удваивать? У меня так получается какая-то ерунда.
-
Offline
- Posts: 1161
- Joined: Sun Oct 20, 2013 11:44 am
YuS
Про hint не понял и да, неправ: долго и неудобно. Количество символов табуляции не бесконечное и не припомню, чтобы встречалось больше десятка - сделаю стопку правил или лучше в цикле, штук 15 итераций будет с запасом.
Про hint не понял и да, неправ: долго и неудобно. Количество символов табуляции не бесконечное и не припомню, чтобы встречалось больше десятка - сделаю стопку правил или лучше в цикле, штук 15 итераций будет с запасом.
По идее надо удваивать, но у меня тогда не работает (вставляет, например, "\n" вместо переноса.YuS wrote:Хмм, сложно сказать, я у более опытных товарищей подсмотрел, что слеши удвоенные используются, но у меня и так работает, и эдак... т.е. подсказать как должно быть правильно, увы не могу.Skif_off wrote: А в тексте для поиска и замены слэши точно нужно удваивать? У меня так получается какая-то ерунда.
-
Offline
- Posts: 512
- Joined: Sun Sep 15, 2013 8:25 am
- Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы
hint здесьSkif_off wrote:YuS
Про hint не понял
А у меня всё одинаково работает, в обоих случаях.Skif_off wrote: По идее надо удваивать, но у меня тогда не работает (вставляет, например, "\n" вместо переноса.
-
Offline
- Posts: 1161
- Joined: Sun Oct 20, 2013 11:44 am
YuS
С телефона заходил, не понял, что это был тег more Решил сделать
вот так работает как надо
а так
вставляет "\n" вместо переноса строки.
Добавлено:
Блин, сейчас перепроверил - с "\\n" отрабатывает нормально, как и положено. Подождём, всё равно повторяю валидацию после запуска.
Добавлено:
Похоже, проблема с флагами, неправильно сложил.
С телефона заходил, не понял, что это был тег more Решил сделать
Нашёл, где проблема:YuS wrote:А у меня всё одинаково работает, в обоих случаях.
вот так работает как надо
Code: Select all
AkelPad.TextReplace(hWndEdit, "></FictionBook>", ">\n</FictionBook>", 0x01000001 /*FRF_DOWN|FRF_BEGINNING|FRF_ESCAPESEQ*/, true);
Code: Select all
AkelPad.TextReplace(hWndEdit, "></FictionBook>", ">\\n</FictionBook>", 0x01000001 /*FRF_DOWN|FRF_BEGINNING|FRF_ESCAPESEQ*/, true);
Добавлено:
Блин, сейчас перепроверил - с "\\n" отрабатывает нормально, как и положено. Подождём, всё равно повторяю валидацию после запуска.
Добавлено:
Похоже, проблема с флагами, неправильно сложил.
-
Offline
- Posts: 512
- Joined: Sun Sep 15, 2013 8:25 am
- Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы
-
Offline
- Posts: 6
- Joined: Wed Jan 27, 2016 2:07 pm
Подскажите, как в строке замены в скрипте с использованием AkelPad.TextReplace отделить обратную ссылку (\\1) от цифр последующего текста (в приведенном примере - 777)? Просто так не работает.
Code: Select all
AkelPad.TextReplace(0, "(some)(text)", "\\1777", 0x280001 /*FRF_DOWN|FRF_BEGINNING|FRF_REGEXP*/, true)
-
Offline
- Posts: 1161
- Joined: Sun Oct 20, 2013 11:44 am
Stranger
Прошу прощения, возможности проверить не было (с телефона), вспомнил про группы в JScript.
Прошу прощения, возможности проверить не было (с телефона), вспомнил про группы в JScript.
-
Offline
- Posts: 874
- Joined: Sat Jan 16, 2010 2:03 pm
Stranger
Можно побороть, если вместо самих цифр подставлять их коды (они от тридцати начинаются). Т.е. \x37 - это "7".или даже еще короче (только первая "семерка" идет кодом, а остальные две в привычном виде)
Можно побороть, если вместо самих цифр подставлять их коды (они от тридцати начинаются). Т.е. \x37 - это "7".
Code: Select all
AkelPad.TextReplace(hWndEdit, "(some)(text)", "\\1\\x37\\x37\\x37", 0x00280001, true);
Code: Select all
AkelPad.TextReplace(hWndEdit, "(some)(text)", "\\1\\x3777", 0x00280001, true);