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

Russian main discussion
  • Author
  • Message
Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Да, все \ в пути должны быть сдвоены. Либо путь должен быть заключен в одинарные кавычки '(но на это лучше не расчитвать, у меня с перепугу какого-то это не работает, так что пришлось ставить двойные кавычки с двойными \ ).
Далее, кусочек "f.lines = AkelPad.ReadFile("D:\\names.txt").split(/\r\n?|\n\r?/);" должен быть переписан под Ваш файл. Infocatcher вероятно не понял формат файла(или я?).
Искать что:alt="(\d+)[^"]+"
Чем:

Code: Select all

var g = arguments.callee; if(typeof(g.lines)=="undefined"){g.lines={};var arr=AkelPad.ReadFile("c:\\pattern.txt").split(/\r\n?|\n\r?/);for(var ind in arr){var str=arr[ind];if(!str) continue;var sind = str.indexOf(' ');g.lines[str.substring(0,sind)]=str.substring(sind+1).replace(/^\s*/,'').replace(/\s*$/,'');}}return 'alt="'+g.lines[$1]+'"';
C:\\pattern.txt заменить своим файлом(ставить двойные \\ где нужно).
Установить птички "Регулярные" "Заменить функцией"

Пояснение:

Ищутся все вхождения alt="123abс",любой не пустой набор цифр(за это отвечает (\d+)), abс - любые знаки до кавычки(за это отвечает [^"]+ , если нужны вхождения конкретных вхождений - замените на своё).

Далее по "Чем":

Кусочек до "return 'alt=...." отвечает за загрузку таблицы соответствия найденному числу подставляемой строке. Каждая строка указанного файла парсится построчно(пустые пропускаются, строка из одних пробелов не считается пустой!) по шаблону "число подстановка". До числа не должно быть пробела, между "числом"и "подстановкой" минимум 1 пробел(больше проигнорируются), и после "подставноки" пробелы игнорируются. Полученные пары "число" подстановка сохраняются в списке lines.

Кусочек "return 'alt=...." и до конца отвечает собственно за вставку. Найденный набор цифр ищется в списке lines, подстановка обрамляется alt=" " и собственно происходит замена.
Что будет если найдется последовательность цифр, которой нету в списке подстановок? Вместо подстановки появится слово undefined.

Если будете пользоваться "Заменить всё", то файл подстановок прочитается один раз, если через "Заменить" - каждый раз будет читаться. Учтите это, если файл подстановок очень большой будет заметный лаг.

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

Offline
Posts: 18
Joined: Thu Nov 29, 2012 11:55 am

Post by shveicar »

Спасибо за желание помочь, - но к сожалению, ничего не получается - скрипт выдает синтаксическую ошибку.
Вроде все по пунктам расписанно, - видать "не дорос" до серьезных сценариев, хотя с регулярными выражениями - знаком.
В общем, - изначально была задумка упростить редактирование html страницы, - добавить описание из файла списка, что бы в ручную каждый раз не вбивать.
Обычно пользуюсь Textpipe, - но тут он бессилен...
Первый этап преобразования - получился (заменга фрагментов на цифры), а вот со вторым, (добавление строк - никак).
Так же, была задумка , - с помощью такого подхода отредактировать файл database.txt
хотя он больше похож на скрипт js ( для внутреннего поиска по сайту - замена ссылок и текста)
в нем тоже можно способом подстановки, сначала на цифры, затем на строки - произвести замену или автоматизировать процесс.
Конечно создавать ради этого скрипт, тем более что он не простой, - желания ни у кого нет, но если все же такое решение будет созданно, - буду очень признателен.
Вот сам файл архив с html - файлом списком, и для проверки на возможность обработки - файл database.txt
Надежда, как говорят, - "умирает последней"...

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

Post by FeyFre »

1. У Вас ошибочки в самом тексте. У вас постоянно "alt="1-999" - первая кавычка лишняя совсем. Вам все обозреватели ошибки выдадут. Уберите её.
2. У меня работает.
Что:alt="(\d+)-999"
Чем:

Code: Select all

var g = arguments.callee; if(typeof(g.lines)=="undefined"){g.lines={};var arr=AkelPad.ReadFile("t:\\build\\help\\zamena_alt=\\filelist.txt").split(/\r\n?|\n\r?/);for(var ind in arr){var str=arr[ind];if(!str) continue;var sind = str.indexOf(' ');g.lines[str.substring(0,sind)]=str.substring(sind+1).replace(/^\s*/,'').replace(/\s*$/,'');}}return 'alt="'+g.lines[$1]+'"';
Подставить свой путь!
В файле zamena_alt=.html заменило 15 штук.
скрипт выдает синтаксическую ошибку.
Скрин в студию. Значения полей поиска, замены в студию. Обновить скрипт, плагин Scripts не пробовали?

Offline
Posts: 18
Joined: Thu Nov 29, 2012 11:55 am

Post by shveicar »

FeyFre
Большое Вам Спасибо, наконец - всё заработало, - был лишний пробел при копировании, -(может и еще что-то, кроме "alt):oops:
В общем, теперь - все в порядке.

Offline
Posts: 18
Joined: Thu Nov 29, 2012 11:55 am

Post by shveicar »

Интерсно, получается данный скрипт - действует узко профильно? (сам пока не очень в этом - соображаю)
Решил применить его к файлу database.txt , точнее - к его фрагментам.
Всё подготовил, - вышло:

Code: Select all

Keyword[02] =@"999-999"
Address[02] = "999-999"
подправил фрагмент на найти

Code: Select all

=@"(\d+)-999"
заменить

Code: Select all

var g = arguments.callee; if(typeof(g.lines)=="undefined"){g.lines={};var arr=AkelPad.ReadFile("c:\\filelist.txt").split(/\r\n?|\n\r?/);for(var ind in arr){var str=arr[ind];if(!str) continue;var sind = str.indexOf(' ');g.lines[str.substring(0,sind)]=str.substring(sind+1).replace(/^\s*/,'').replace(/\s*$/,'');}}return '='+g.lines[$1]+'';
правда в файле списке несколько тысяч строк, но все в точности как в предыдущем примере.

Code: Select all

1 "0-9"
2 "a"
3 "b"
И тут, - скрипт меняет мне все значения на ="ppa" во всех нужных местах. Что может быть не так?
Сам фрагмент, и файл список прилагаю
Помогите еще разок, плиз...

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

Post by FeyFre »

Ну дык смотрите, в Вашем mergefilename.txt все вхождения =@"999-999" (других просто нетуу) . Поиск находит эти первые 999 и подставляет именно замену соответсвующую ей из файла-списка. Если вы хотите ориентироваться по другой части, например по Keyword[09] =@"999-999" , то соотвественно Вам нужно его и искать

Code: Select all

(Keyword\[(\d+)\]\s*=)@"999-999"
А в Чем тот return что там есть заменить на

Code: Select all

return $1+g.lines[$2];
Только учтите, у Вас Keyword[01] в тексте, и в файле-списке замен тоже должно быть именно 01, а не 1.

Offline
Posts: 18
Joined: Thu Nov 29, 2012 11:55 am

Post by shveicar »

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

Offline
Posts: 366
Joined: Mon Jan 10, 2011 5:28 pm
Contact:

Post by Lenchik »

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

Code: Select all

'ABCEHKMOPTXaceopxy' - кириллические буквы, которые выглядят как латинские 
'АВСЕНКМОРТХасеорху' - латинские буквы, которые выглядят как кириллические
[ABCEHKMOPTXaceopxy] - так он побуквенно находит, но заменять побуквенно на [АВСЕНКМОРТХасеорху] согласно соответствию не хочет.

Что и куда прописать, чтобы рещить такую задачку?

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Lenchik
В первом приближении как-то так:
SearchReplace.js
Что: [ABCEHKMOPTXaceopxy]
Чем: return "АВСЕНКМОРТХасеорху".charAt("ABCEHKMOPTXaceopxy".indexOf($0));
[v] Заменять на функцию

Offline
Posts: 366
Joined: Mon Jan 10, 2011 5:28 pm
Contact:

Post by Lenchik »

Спасибо. Работает. Пока каких-то недостатков не обнаружил.

Offline
Posts: 12
Joined: Fri Oct 24, 2008 4:05 am
Location: где то рядом была Москва

Post by FiLinX »

добра всем) не знаю, туда ли обращаюсь, но раз уж тут мне помогли в прошлый раз с m3u разобраться, то здесь и спрошу..
вот помогите, есть допустим такой текст:

<li onclick="window.location.href='http://torrent-tv.ru/torrent-online.php?translation=390';">
<a href="torrent-online.php?translation=390">2x2</a>
</li>
<li onclick="window.location.href='http://torrent-tv.ru/torrent-online.php?translation=385';">
<a href="torrent-online.php?translation=385">Домашний</a>
</li>
<li onclick="window.location.href='http://torrent-tv.ru/torrent-online.php?translation=391';">
<a href="torrent-online.php?translation=391">Звезда</a>

а хотелось бы создавать из него такой продукт:

#EXTM3U
#EXTINF:-1,2x2
http://torrent-tv.ru/torrent-online.php?translation=390
#EXTINF:-1,Домашний
http://torrent-tv.ru/torrent-online.php?translation=385
#EXTINF:-1,Звезда
http://torrent-tv.ru/torrent-online.php?translation=391

пособите а? :-) сам я диривенский, не по силам разобраться в этом всём.. к тому же хоться чтоб скрипт можно было бы легко подстраивать) ну задавать выборку например по "translation=", иль по "/watch?" с ютуба вот, - для адреса второй строки.. но и имя в #EXTINF чтоб тоже задавать выборку можно было, типа брать то что перед "</a>
</li>" и смещать наверх над адрес..

уух, чую нагородил геморру) но вот хотя бы например для этого http://torrent-tv.ru/channels.php - как скриптик сделать?

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

Post by FeyFre »

Грубая прикидка.
Что:

Code: Select all

<li.*window.location.href='([^']*)'.*<a.*>([^<])</a.*/li>
Чем:

Code: Select all

#EXTINF:-1,$2\n$1
Детали уж сами подточите.

Offline
Posts: 5
Joined: Mon Feb 18, 2013 2:12 pm

Поиск и замена: справочная информация

Post by PadeDown »

Столкнулся при работе с программой с такой проблемой: нужно было заменить в тексте слова, окруженные скобками - и я не так и не понял, как это можно сделать. Количество слов/символов разное, и сами они, понятно, тоже разные. Единственное подходящее выражение, которое я знаю, выглядит как (*), где * - любое количество символов, но программа его понимает буквально.
Короче говоря, вопрос: нельзя ли привести список подстановочных символов, которые можно использовать при поиске/замене? Кроме того, расшифруйте, пожалуйста, понятия "регулярные выражения" и "Esc-последовательности", а также как с ними работать. Я самый обычный пользователь и не владею программерской терминологией. Иначе говоря, использовать эти функции я не могу, и значит, лично для меня они пропадают зря.
Хорошо было бы объединить эту информацию в единый справочный файл или топик. Мне не удалось найти ее ни в справке, ни на форуме, ни через Google. Правда, есть похожие темы, но они начаты годы назад, начинаются с описаний старых версий программы, многие занимают не один десяток страниц - в общем, надо потратить немало времени, чтобы суметь извлечь из них какую-то пользу. Очень неудобно.

Заранее спасибо.

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Re: Поиск и замена: справочная информация

Post by DV »

См. Справка - Руководство, раздел №8.
И как пример viewtopic.php?t=1507

Offline
Posts: 5
Joined: Mon Feb 18, 2013 2:12 pm

Post by PadeDown »

Спасибо. Я пользуюсь версией программы 4.7.5, в ее справке информации по регулярным выражениям нет. Нашел только в архиве новой версии.
Все-таки жаль, что на форуме не было единой темы по вопросу (специально для таких "чайников" и слоупоков, как я).
Post Reply