Page 27 of 29
Posted: Fri Jan 11, 2019 8:07 am
by zeroberto
YuS wrote:zeroberto wrote:
как выполнить автозамену
<div><img alt="" data-rich-file-id="цифра" src="
на
'](./images/smilies/icon_smile.gif)
Posted: Sat Mar 14, 2020 7:21 am
by Azrailll
Подскажите какую сточку в скрипте MultiReplace.js надо заменить, чтобы поиск был с помощью регулярных выражений. Вернее 1-й шаблон - обычный поиск, 2-й шаблон с помощью регулярок.
Posted: Sat Mar 14, 2020 7:00 pm
by opk44
Azrailll
1. В подавляющем большинстве случаев ничего менять не надо.
2. Поиск в скрипте выполняется стандартным Akelpad-методом - "AkelPad.TextReplace":
Code: Select all
AkelPad.TextReplace(0, "FindIt1", "ReplaceWith1", 0x280001 /*FRF_DOWN|FRF_BEGINNING|FRF_REGEXP*/, true);
3. Описание метода найдёте в файле "..\AkelFiles\Docs\Scripts-Rus.txt"
4. В тех же случаях, где
необходимо исключить обработку шаблона как регулярного выражения и принудить к обработке как "обычного текста", пересчитайте сумму флагов за минусом FRF_REGEXP (0x00080000 //FRF_REGEXP):
0x280001 --> 0x200001
5. Также желательно заменить в оригинальном скрипте последний аргумент в соответствии с актуальным синтаксисом:
true --> 0x1
6. ИТОГО (1 - "обычный", 2 - RegExp):
Code: Select all
AkelPad.TextReplace(0, "FindIt1", "ReplaceWith1", 0x200001 /*FRF_DOWN|FRF_BEGINNING*/, 0x1);
AkelPad.TextReplace(0, "FindIt2", "ReplaceWith2", 0x280001 /*FRF_DOWN|FRF_BEGINNING|FRF_REGEXP*/, 0x1);
Posted: Sun Mar 15, 2020 12:12 am
by Azrailll
opk44 wrote:Azrailll
1. В подавляющем большинстве случаев ничего менять не надо.
2. Поиск в скрипте выполняется стандартным Akelpad-методом - "AkelPad.TextReplace":
Code: Select all
AkelPad.TextReplace(0, "FindIt1", "ReplaceWith1", 0x280001 /*FRF_DOWN|FRF_BEGINNING|FRF_REGEXP*/, true);
3. Описание метода найдёте в файле "..\AkelFiles\Docs\Scripts-Rus.txt"
4. В тех же случаях, где
необходимо исключить обработку шаблона как регулярного выражения и принудить к обработке как "обычного текста", пересчитайте сумму флагов за минусом FRF_REGEXP (0x00080000 //FRF_REGEXP):
0x280001 --> 0x200001
5. Также желательно заменить в оригинальном скрипте последний аргумент в соответствии с актуальным синтаксисом:
true --> 0x1
6. ИТОГО (1 - "обычный", 2 - RegExp):
Code: Select all
AkelPad.TextReplace(0, "FindIt1", "ReplaceWith1", 0x200001 /*FRF_DOWN|FRF_BEGINNING*/, 0x1);
AkelPad.TextReplace(0, "FindIt2", "ReplaceWith2", 0x280001 /*FRF_DOWN|FRF_BEGINNING|FRF_REGEXP*/, 0x1);
Спасибо за объяснение.
И еще вопрос: почему такое регулярное выражение "<p>(\n| )</p>\n" в скрипте не находит? (обычным поиском все нормально)
Posted: Sun Mar 15, 2020 3:32 am
by opk44
Azrailll wrote:И еще вопрос: почему такое регулярное выражение "<p>(\n| )</p>\n" в скрипте не находит? (обычным поиском все нормально)
Из-за ограничений, накладываемых JScript на символ "". Его, в данном случае, нужно экранировать (дублировать). Т. е. запись вашего выражения внутри скрипта должна выглядеть следующим образом:
Code: Select all
AkelPad.TextReplace(0, "<p>(\\n| )</p>\\n", "ReplaceWith3", 0x280001 /*FRF_DOWN|FRF_BEGINNING|FRF_REGEXP*/, 0x1);
Posted: Sun Mar 15, 2020 4:34 am
by Azrailll
opk44 wrote:Из-за ограничений, накладываемых JScript на символ "". Его, в данном случае, нужно экранировать (дублировать).
opk44, Спасибо большое, а то я голову ломал.
Posted: Sun Mar 15, 2020 10:21 am
by AZJIO
Azrailll
перед применением экранировать
Code: Select all
// sSelText = sSelText.replace(/[\]\[\{\}\(\)\*\+\?\.\^\$\|\=\<\>\#\\]/g, escaper);
sSelText = sSelText.replace(/[\\]/g, escaper); // экранировать
function escaper(str) {
return '\\' + str;
}
// или так наверно
sSelText = sSelText.replace("\\", "\\\\");
Поиск - в одной строке, замена в следующей
Posted: Thu Apr 09, 2020 9:00 am
by wizpad
Доброго дня! Прошу помощи новичку.
Есть текст, нужно найти ключевое словосочетание, потом перейти на следующую строку и заменить ее на свой текст.
А именно - ищем "нет на складе", и заменяем следующую строку (+1) на свой текст : <quantity>0</quantity>
Как это реализовать быстро и с помощью каких инструментов?
Code: Select all
<item sku="2083669083193">
<name>Electrolux EACS-07HF/N3 Fusion Нет на складе!!! нет в наличии</name>
<quantity>4</quantity>
<price>16888</price>
<cat_id>536820868</cat_id>
</item>
<item sku="2210000011137">
<name>Electrolux EACS-07HG-M/N3 Silver Белое стекло</name>
<quantity>2</quantity>
<price>14999</price>
<cat_id>536820868</cat_id>
</item>
<item sku="2210000011878">
<name>Electrolux EACS-07HLO/HF нет в наличии</name>
<quantity>2</quantity>
<price>11999</price>
<cat_id>536820868</cat_id>
[/code]
Re: Поиск - в одной строке, замена в следующей
Posted: Thu Apr 09, 2020 12:36 pm
by opk44
wizpad wrote:...найти ключевое словосочетание, потом перейти на следующую строку и заменить ее на свой текст.
А именно - ищем "нет на складе", и заменяем следующую строку (+1) на свой текст... : <quantity>0</quantity>
Как это реализовать быстро и с помощью каких инструментов?
Если версия редактора не совсем древняя, то можно и без инструментов.
Стандартный диалог замены
Что: Code: Select all
(?-s)(^.*Нет на складе.*)(\n.*<quantity>)(\d+)(<\/quantity>)
Чем:
Опции: [v] Регулярные выражения
Оговорки и допущения:
1. Предполагается, что текущее количество выражено только в целых числах.
2. Меняется любое целое число внутри тега на ноль. При подстановке в качестве "нуля" использован "\u0030" чтобы не путаться в номерах обратных ссылок.
3. Можно отбросить четвертую группу (<\/quantity>) и соответствующую ей обратную ссылку (\4). 4. В первой группе поиск с начала строки также избыточен и его можно укоротить до (Нет на складе.*). Но на скорости это не должно особо отразиться.
5. Если исходить из желания максимально разгрузить первую часть (шаблон поиска), чтобы избежать возможных ошибок при его изменении, то взамен придётся "нагрузить" вторую часть замены:
Что:
Чем:
Опции: [v] Регулярные выражения
Re: Поиск - в одной строке, замена в следующей
Posted: Fri Apr 10, 2020 9:46 am
by wizpad
opk44 wrote:
Если версия редактора не совсем древняя, то можно и без инструментов.
Стандартный диалог замены
Благодарю! Оба варианты работают. На старой версии выдало ошибку, на свежей работает.
Возможно ли это все запустить из командной строки, чтобы подсунуть фаил и пройтись разными ключевыми словами?
Posted: Fri Apr 10, 2020 12:56 pm
by opk44
wizpad
1. Для того, чтобы узнать "возможно ли", крайне полезно ознакомиться с документацией (раздел "Параметры командной строки"+"Ручные установки").
Данное чтение отлично "
вострит ум и бодрит воображение".
2. На форуме работает поиск!
Среди 33 тысяч сообщений уже очень трудно не найти что-то или очень схожее или прямо идентичное практически любому "новому" вопросу.
Например....
3. На текущей (27-й) странице данной ветки только что в очередной раз обсуждался скрипт "MultiReplace.js". Затруднительно понять, каким образом вы этого не заметили.
4. Пункты 1+2+3 (документация+поиск+готовые решения) - это те самые "стандартные кирпичи" из которых строится практически любой "сарай" по индивидуальному проекту.
Posted: Fri Apr 10, 2020 3:00 pm
by wizpad
opk44 wrote:wizpad
1. Для того, чтобы узнать "возможно ли", крайне полезно ознакомиться с документацией (раздел "Параметры командной строки"+"Ручные установки").
Смотрел. Для человека далекого от кодинга - тяжко осилить. Предполагал, что есть решение типа:
фаил.txt фаил сценария поиска и замены, сохранение.
Вероятно, тут сложнее чем bat фаил слепить
2. На форуме работает поиск!
Искал. Искомое решение отсутствует. Возможно, мне так повезло с запросом "из командной строки поиск и замена", но на вторую страницу результата поиска уже выдает ошибку
http://akelpad.sourceforge.net/forum/se ... 1&start=15
3. На текущей (27-й) странице данной ветки только что в очередной раз обсуждался скрипт "MultiReplace.js". Затруднительно понять, каким образом вы этого не заметили.
Видел. Смотрел. К сожалению, применение к свое задаче не нашел. Где-то рядом, но развить самому не получилось
Всегда стараюсь разобраться самостоятельно, перед запросом о помощи. Но тут - пассую.
Вам еще раз - слова благодарности, что помогаете простым юзерам)))
Posted: Fri Apr 10, 2020 3:34 pm
by AZJIO
wizpad
Для множественной замены по сценарию могу предложить
свою прогу TextReplace, обсудить можно
тут
Posted: Fri Apr 10, 2020 5:50 pm
by opk44
wizpad wrote:Смотрел. Для человека далекого от кодинга - тяжко осилить. Предполагал, что есть решение типа:
фаил.txt фаил сценария поиска и замены, сохранение.
Вероятно, тут сложнее чем bat фаил слепить
1. "Лепить" bat-файлы - это тоже разновидность кодинга, а сложность - понятие относительное. Но дело не в этом. Как говорилось в известном мультфильме "
лучше день потерять, потом за пять минут долететь...Вперёд!".
2. test.bat
Code: Select all
AkelPad.exe /Show(0) "c:\File_In.txt" /Call("Scripts::Main", 2, "MultiReplace.js") /SaveFile("C:\File_Out.txt") /Quit
где
-- запустить в скрытом окне (см. \AkelFiles\Docs\AkelHelp-Rus.htm)
-- файл на входе (открыть и обработать)
Code: Select all
/Call("Scripts::Main", 2, "MultiReplace.js")
-- запустить скрипт "MultiReplace.js"
и дождаться его выполнения ("
2") (см. "\AkelFiles\Docs\Scripts-Rus.txt")
-- результат обработки сохранить в выходной файл "C:\File_Out.txt"
-- закончить обработку и выйти
3. Ну и некоторые самоочевидные вещи:
файл скрипта можно и нужно переназвать, и оставить в нём только шаблоны замен (без цикла обхода вкладок)
после завершения этапа тестирования, но не ранее, можно "выходной" файл начать писать во "входной".
"Обжиг горшков" закончен.
Posted: Sat Apr 11, 2020 3:26 pm
by wizpad
opk44 wrote:
"Обжиг горшков" закончен.
Спасибо, получилось! Чувствую себя почти джидаем)))