поиск и замена

Russian main discussion
  • Author
  • Message
YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

Eskander88 wrote: В общем-то всё работает. У меня просто сборка старенькая. Пример был проверен. А зачем нужен символ "восклицательного знака" не знаю, если есть причины то подскажите.
Дело в том, что от версии к версии, могут происходить изменения в программе, в том числе и в поведении RegExp-ов. Поэтому, примеры необходимо проверять на актуальных версиях программы. Ну а что касается символа "восклицательного знака" - это Вы о каком примере говорите? Если Вы о "вопросительном знаке", то в документации к программе AP это есть, надо только почитать.
Eskander88 wrote: :) Дело не в велосипеде! Надо ж как-то рулить..
...

Вот такая у меня задача:
...
К примеру указывайте массу литературы в килограммах. :wink: Томик Ленина, особо отличившимся как в сов. время за старания, не обещаю, - «кому он в общем-то нужен... »

Ну а рабочий пример, ляжет бесценным грузом в памяти и трудах сообщества.
Если Вам, действительно, необходимо решение задачи (в чем я сильно сомневаюсь), то в вопросе должен отсутствовать сарказм на грани желчной иронии... если, конечно, цель - получить ответ.


PS Ну а если, всё же, я ошибся, то кроме двух вышеописанных способов, могу ещё один путь подсказать: можно воспользоваться функционалом скрипта FindReplaceEx.js от KDJ, расширяющего возможности стандартного диалога поиска и замены. Имхо, но самый простой из всех способов - LinesFilter.js

Offline
Posts: 157
Joined: Thu Nov 26, 2015 8:03 pm
Location: Rostov-on-Don

Post by Eskander88 »

YuS wrote:
Eskander88 wrote:
Если Вам, действительно, необходимо решение задачи (в чем я сильно сомневаюсь), то в вопросе должен отсутствовать сарказм на грани желчной иронии... если, конечно, цель - получить ответ.


PS Ну а если, всё же, я ошибся, то кроме двух вышеописанных способов, могу ещё один путь подсказать: можно воспользоваться функционалом скрипта FindReplaceEx.js от KDJ, расширяющего возможности стандартного диалога поиска и замены. Имхо, но самый простой из всех способов - LinesFilter.js
За решение огромное спасибо. В данном конкретном случае очень помогло!

Сарказм, ирония, - порой даже драма, - это уж когда как работа горит.

И знак '?' не суть важно. По руководству и так работает

Code: Select all

<{1}.*>{1}
и так

Code: Select all

<{1}.*?>{1}
Версия старенькая, но меня устраивает. В новой какие-то заморочки с подменой "notepad.exe", а старая на этот счёт работает надёжно. Да и антивирус пищит (попытка доступа к защищ. COM-интерфесу). Дома ещё б выключил, ладно, а на работе...

Опять же, всё равно как ни крути, речь касается регулярных выражениях.

Когда примеров много, то и руководство понятнее. На то и тема.

Offline
Posts: 27
Joined: Sun Mar 16, 2008 10:26 pm

Post by kadvlad »

Здравствуйте,
можно ли добавить в контекстное меню строку сразу с вызовом конкретного шаблона (согласно SearchReplace.ini), а не просто диалога "SearchReplace"?

Code: Select all

-"Template3" Call("Scripts::Main",  1, "SearchReplace.js" -параметры?)

Offline
Posts: 157
Joined: Thu Nov 26, 2015 8:03 pm
Location: Rostov-on-Don

Post by Eskander88 »

.. и тогда чисто между прочим, к предыдущему посту.

А как вообще можно AkelPad допиливать под себя. То есть там много разных ini-файлов, подскажите на каком языке они записаны?

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Eskander88
Зачем вам ini-файлы? Для начала есть FAQ:
Как подключать плагины и языковые модули?
Как добраться до меню
Как пользоваться скриптами?

Далее смотрите документацию плагинов: ContextMenu - меню, Toolbar - панель инструментов, Coder - подсветка. Для начала.

Темы по плагинам в этом разделе форума.
+универсальная тема.

Попробуйте взять готовую сборку и поковырять. Сам так сделал когда-то - просто выпилив ненужное и переделав как удобнее, а потом грохнул и всё сделал с нуля так, как мне нравится.

Добавлено:
А, забыл про AkelHelp-Rus.htm в каталоге AkelFiles\Docs :) Ручные установки удобнее выставлять с помощью AkelPadManualSettings.js.

Offline
Posts: 6
Joined: Wed Jan 27, 2016 2:07 pm

Post by Stranger »

Подскажите, как лучше решить такую задачу.

Имеется файл примерно на 40 000 строк формата, к примеру, слово1=слово2. Нужно в сотне других файлов произвести поиск и замены по списку из этого файла. Список замен к нужному формату могу привести без проблем. Поддержка регэкспов желательна, но не обязательна.

Пока смотрю в сторону FindReplaceEx.js (загнать список замен в Templates и сделать из них Batch), но справится ли он с таким объемом? Возможно, есть другие варианты?

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

Stranger
1. Есть мнение, что нужно активнее пользоваться поиском по форуму:
-> 1.1. мультизамена во всех открытых документах (MDI/PMDI): Instructor script MultiReplace.js;
-> 1.2. FeyFre script replacer.js

, то можно поискать сторонние программы. Например, можно использовать программы, предназначенные для чтения вслух текстовых файлов. Поскольку им ("читалкам") при использовании синтезаторов речи всегда приходится задействовать словари (списки замен) для коррекции произношения, то такой функционал присутствует там "из коробки". Программа "Балаболка" подходит для использования в командных файлах:

Code: Select all

balabolka.exe -t book.txt changed.txt
-t имя_файла1 имя_файла2
минимизировать программу при запуске, открыть текстовый файл (имя_файла1), применить к тексту правила коррекции произношения, сохранить измененный текст как новый файл (имя_файла2) и закрыть программу.

Минус в том, что подключать/отключать нужный словарь/словари приходится через интерфейс самой программы. Плюс в том, что можно иметь несколько словарей и использовать их в любом сочетании.

Если "отойти ещё подальше, и копнуть ещё поглубже" историю этого направления, то раньше единственным общедоступным и, одновременно, годным инструментом были препроцессоры систем программирования. Например, Си-шные подстановки вида

Code: Select all

#define BSIZE 200
они как раз "об этом". Актуальности это не потеряло и до сих пор. Тут можно еще почитать

Offline
Posts: 6
Joined: Wed Jan 27, 2016 2:07 pm

Post by Stranger »

opk44
Есть мнение, что нужно активнее пользоваться поиском по форуму
Спасибо, я учту ) Просто ввиду отсутствия какого-либо опыта в данном вопросе нужно было получить вектор для поиска, и благодаря Вам я его получил.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

kadvlad wrote:...можно ли добавить в контекстное меню строку сразу с вызовом конкретного шаблона (согласно SearchReplace.ini), а не просто диалога "SearchReplace"?
См. SearchReplace.js v1.8.

Offline
Posts: 157
Joined: Thu Nov 26, 2015 8:03 pm
Location: Rostov-on-Don

Post by Eskander88 »

Напомню ранее. Был текст для обработки

Code: Select all

...
D:\SRC\Joom\Joomla_2.5.18-Stable-Full_Package_ru\administrator\components\com_banners\models\forms\download.xml
D:\SRC\Joom\Joomla_2.5.18-Stable-Full_Package_ru\administrator\components\com_banners\models\forms\index.html
D:\SRC\Joom\Joomla_2.5.18-Stable-Full_Package_ru\administrator\components\com_banners\sql\index.html
D:\SRC\Joom\Joomla_2.5.18-Stable-Full_Package_ru\administrator\components\com_banners\sql\install.mysql.utf8.sql
D:\SRC\Joom\Joomla_2.5.18-Stable-Full_Package_ru\administrator\components\com_banners\sql\uninstall.mysql.utf8.sql
D:\SRC\Joom\Joomla_2.5.18-Stable-Full_Package_ru(EDITION)\CSS\ШАБЛОН\main\style.css
D:\SRC\Joom\Joomla_2.5.18-Stable-Full_Package_ru\administrator\components\com_banners\tables\banner.php
D:\SRC\Joom\Joomla_2.5.18-Stable-Full_Package_ru\administrator\components\com_banners\tables\client.php
... и т.д
Задача:
Поиск по совпадению и разметка найденных строк. В качестве совпадений слова "ШАБЛОН" и "template"
Cuprum wrote:Eskander88
Вообще то это вопрос для спец. темы.

Используйте скрипт SearchReplace.js, он есть в поставке Акелпада.
Настройки поиска:
Что: (^.+$)
Чем: if(/(ШАБЛОН)|(template)/.test($1)) return $1;
[x] Регулярные выражения
[x] Многострочно
[x] Заменять на функцию
Направление
[.] C начала
Нажимайте [Заменить все]
В итоге, в файле останутся только те строки, в которых есть слово ШАБЛОН или template.
Спасибо за подсказку Cuprum. Потратил некоторое время на опыты и немного разобрался с синтаксисом. Ещё остаётся массу пробелов. Я так понял для функций используется синтаксис JavaScript?!

А что означает метод .test ?
И кто знает, что подразумевается под функцией "многострочно" - без неё SearchReplace ведёт себя непонятно?

$1, $2, $3, .. - Это возращаемая строка по совпадению, в виде переменно. Берётся из скобок. Нумеруется слева направо.

Переделал под свои нужды, примерно так:
Что: (^.*WordPress.*$)|(^.+$)
Чем: if(/(SKIN)/.test($1)) return "Здесь совпадение из 1ой скобки: " + $1;if(/(ШАБЛОН)|(template)/.test($2)) return "Здесь совпадение из 2ой скобки: "+ $2;


Вводный текст:

Code: Select all

...
D:\SRC\Joom\sql\uninstall.mysql.utf8.sql
D:\SRC\Joom\CSS\ШАБЛОН\main\style.css
D:\SRC\WordPress\sql\uninstall.mysql.utf8.sql
D:\SRC\WordPress\SKIN\administrator\components\com_banners\tables\banner.php
...
Возвращаемый тест:

Code: Select all


Здесь совпадение из 2ой скобки: D:\SRC\Joom\CSS\ШАБЛОН\main\style.css

Здесь совпадение из 1ой скобки: D:\SRC\WordPress\SKIN\administrator\components\com_banners\tables\banner.php

Заметил особенность, что в некоторых случаях получается выражение (^.*WordPress.*$) работает (или (.*WordPress.*$)),
а если уже (WordPress.*$) то не находит в "Вводном текст"е.

Почему так? Не знаю.

Тоже самое удалось записать другой функцией (где-то из материалов форума).
За некоторым исключением: если строка не соответствует регулярному выражению - она остаётся.

Что: (WordPress.*$)|(^.+$)
Чем: $0.replace(/^.*SKIN.*$/, "Здесь совпадение из 1ой скобки: " + $1).replace(/^.*(ШАБЛОН)|(template).*$/, "Здесь совпадение из 2ой скобки: " + $2)

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

Eskander88 wrote:...Я так понял для функций используется синтаксис JavaScript?!

А что означает метод .test ?
См. руководство по JScript, синтаксис regexp.test([str])

UPD:
Eskander88 wrote:что подразумевается под функцией "многострочно" - без неё SearchReplace ведёт себя непонятно?
"многострочно"="multiline"
См. руководство по JScript, multiline

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Ребята, помогите пожалуйста доделать регулярку для search.
Надо найти первое вхождение:
>>текст<*
где, * - любой символ кроме слэша,
т.е. пропускать:
>>текст</
Пробую так:

Code: Select all

>>(?=\w|\W|\s<[^/])
>>(?=\w|\W|\s<?!/)
Но почему-то захватывается 1-я строка из строк для проверки:
<tag >> трам-пам-пам</tag>
<tag>>tram/pam\pam <tag>

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Не совсем понятно что нужно найти(точнее выделить найденным). Это: >>.*<(?!/) находит и захватывает всё включая >> и < только в тестовой строке 2.
ЗЫ: lookaround-ы должны заключаться в свои скобки, в примере нет ни разу(форум сожрал?)

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

FeyFre wrote:lookaround-ы должны заключаться в свои скобки, в примере нет ни разу(форум сожрал?)
Нет, это скорее мои регулярки такие))


Любые удвоения ">>", кроме:

Code: Select all

<p>> какой-либо текст </p>
Во всех остальных случаях удвоенный ">>" считать за ошибку.

Я вставил Вашу регулярку в

Code: Select all

text.search(/>>.*<(?!/)"/)
но при выполнении сказало, что не хватает какой-то скобки. Я не смог догадаться какой; возможно надо было ещё что-то экранировать... Потому попытался обдурить, и сделал через:

Code: Select all

var re = new RegExp(">>.*<(?!/)");
filepos = text.search(re);
Теперь запуская XMLValidator.js вижу странную картину:
здесь не находит вхождение (и это правильно):

Code: Select all

<PRODUCT>
  <TITLE>> Product #1 </TITLE>
</PRODUCT>
а здесь - находит:

Code: Select all

<PRODUCT>
  <TITLE>> Product #1 </TITLE>
  <SORT>
      <COLOR> red </COLOR>
      <PRICE> $10.00 </PRICE>
  </SORT>
</PRODUCT>
Причём через скрипт "Тестирование RegExp-выражений" регулярка отрабатывает в обоих случаях верно.
Мистика какая-то...

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Понял. Нужно только детектировать есть ли оно, и где, а сам захват не нужен. Тогда так: var re= />>.*<[^\/]/;
Мешает ему по ходу какраз lookahead, его скобки. хз почему. Тыкался тут: https://regex101.com/#javascript
Post Reply