Page 22 of 29

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

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

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


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

Posted: Thu Dec 03, 2015 10:43 am
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-интерфесу). Дома ещё б выключил, ладно, а на работе...

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

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

Posted: Fri Jan 22, 2016 8:39 am
by kadvlad
Здравствуйте,
можно ли добавить в контекстное меню строку сразу с вызовом конкретного шаблона (согласно SearchReplace.ini), а не просто диалога "SearchReplace"?

Code: Select all

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

Posted: Sat Jan 23, 2016 5:00 pm
by Eskander88
.. и тогда чисто между прочим, к предыдущему посту.

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

Posted: Sat Jan 23, 2016 5:19 pm
by Skif_off
Eskander88
Зачем вам ini-файлы? Для начала есть FAQ:
Как подключать плагины и языковые модули?
Как добраться до меню
Как пользоваться скриптами?

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

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

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

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

Posted: Wed Jan 27, 2016 2:16 pm
by Stranger
Подскажите, как лучше решить такую задачу.

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

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

Posted: Wed Jan 27, 2016 5:06 pm
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
они как раз "об этом". Актуальности это не потеряло и до сих пор. Тут можно еще почитать

Posted: Wed Jan 27, 2016 5:29 pm
by Stranger
opk44
Есть мнение, что нужно активнее пользоваться поиском по форуму
Спасибо, я учту ) Просто ввиду отсутствия какого-либо опыта в данном вопросе нужно было получить вектор для поиска, и благодаря Вам я его получил.

Posted: Sun Feb 21, 2016 3:11 pm
by Instructor
kadvlad wrote:...можно ли добавить в контекстное меню строку сразу с вызовом конкретного шаблона (согласно SearchReplace.ini), а не просто диалога "SearchReplace"?
См. SearchReplace.js v1.8.

Posted: Sun Feb 28, 2016 12:32 pm
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)

Posted: Sun Feb 28, 2016 1:10 pm
by opk44
Eskander88 wrote:...Я так понял для функций используется синтаксис JavaScript?!

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

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

Posted: Wed Mar 02, 2016 3:49 pm
by VladSh
Ребята, помогите пожалуйста доделать регулярку для search.
Надо найти первое вхождение:
>>текст<*
где, * - любой символ кроме слэша,
т.е. пропускать:
>>текст</
Пробую так:

Code: Select all

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

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

Posted: Wed Mar 02, 2016 5:54 pm
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-выражений" регулярка отрабатывает в обоих случаях верно.
Мистика какая-то...

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