Regular Expression Search and Replace (RESearch)
Re: Regular Expression Search and Replace (RESearch)
Latest post of the previous page:
При нынешней стоимости оперативки все это от лукавого, я считаю.HaRT wrote:А PCRE умеет читать только из памяти?
Если умеет также из какого-либо потока, то можно сделать трубопровод.
Re: Regular Expression Search and Replace (RESearch)
Плохо понятно, как это делать - нет функции "найти последний матч в строке". Можно пытаться скармливать каждую строку посимвольно с конца - но это будет очень медленно.Hedin wrote:Cavaler, вот ещё про что забывал написать: когда делается обратный поиск с регулярными выражениями, то пропускаются все вхождения в строке кроме первого. Возможно это исправить?
Re: Regular Expression Search and Replace (RESearch)
Cavaler, я представлял себе два варианта:
- искать вхождения в строке с первого до последнего как при обычном поиске (правда возможно запутывание пользователя какой же поиск делается )
- сначала найти все вхождения, а потом уже переходить по ним в обратном порядке
Re: Regular Expression Search and Replace (RESearch)
0. Если хотите, чтобы ваши правки попали в исходники - правьте RESearch.msg, он в комплекте. Искать руками все исправления в .lng мне лень.Raistlin wrote:Обновил подправленные lng-файлы для RESearch 7.84 / 7.85. По сравнению с файлами для 7.70 есть breaking change: убран хоткей для списка "Выполнить как скрипт:" - совпадал с хоткеем для списка "Искать:", а другой не подберешь.
Баги и пожелания:
- http://forum.farmanager.com/viewtopic.p ... 35#p111403
- В пресетах переименования и переименования выделенных хоткеи полей "Содержащие текст" и "Заменить на" переносят нас не в поля, а на галки регэкспов и многократной замены.
- В диалогах переименования и переименования выделенных - галка регэкспов у поля "Содержащий текст" называется по-разному в основном диалоге и в диалоге пресетов.
- Улетаем вместе с Far2 при попытке переименовать файлы. Пример. Есть файл R:\Temp\a test.txt. - улетаем. 7.84 не улетает.
- Описание галки "Многократная замена" в диалоге переименования не соответствует действительности. Паттерн применяется не к новому имени, а снова к старому. Это не одно и то же. Например, файла abbbbab.txt даст abbba.txt, а не aa.txt.
- Хочется полноценный фильтр для отбора обрабатываемых файлов, как в стандартном поиске. А то сейчас даже нельзя задать переименование одних только каталогов, например.
- Хочется, чтобы пресеты при запуске из пакета могли запрашивать разрешение на замену.
- Хочется иметь возможность выбрать, будет поиск осуществляться с текущего места или с начала (файла/выделения).
- Диалог замены закрывает найденное значение, если оно находится в конце файла (окно всегда пытается появиться под найденным вхождением, а в этом случае надо над). Легко воспроизводится в консоли 80x25 - можно взять тот же файл, что для бага #1, и инициировать .
- Открываем в редакторе (консоль 80x25) файл Test2.txt из аттача, инициируем , выбираем каждый раз "Пропустить". На втором вхождении кнопки диалога уехали за пределы экрана.
- При запуске в консоли 80x25 окно настроек поиска в редакторе слишком высокое - без мыши до нижних параметров не долезть. Можно было бы оптимизировать размер, заменив радиокнопки на выпадающие списки.
1. Не могу повторить - ни в Far2 ни в Far3 нет никакого выделения после завершения замены.
2, 3 Fixed.
4. Не могу повторить.
5. Если галка включена, переименование работает как замена в редакторе - применяясь дальше к неизмененной части. В противном случае слишком легко зациклиться. Я предпочту исправить описание, нежели логику работы.
6. Где, в переименовании? Добавить туда имеющийся в поиске/замене Advanced пойдет?
7. Пресеты - исполняются без вмешательства пользователя. Если очень надо, можно намакросить загрузку пресета в диалог.
8. Про что речь вообще? В редакторских пресетах есть [X] Execute from current position
9-10. Неправда, что диалог всегда под найденным. А 80x25 неактуально. Но - иногда бывают подглюки, посмотрим.
11. См выше, 80x25 неактуально. А радиобаттоны удобнее списка. Да и это не единственный такой диалог.
Re: Regular Expression Search and Replace (RESearch)
1. Запутанно. Особенно при многострочном поиске.Hedin wrote:Cavaler, я представлял себе два варианта:
- искать вхождения в строке с первого до последнего как при обычном поиске (правда возможно запутывание пользователя какой же поиск делается )
- сначала найти все вхождения, а потом уже переходить по ним в обратном порядке
2. Кривовато реализуемо, особенно если учесть, что каждый Search again - независимый вызов плагина.
Re: Regular Expression Search and Replace (RESearch)
Да, идеального варианта тут не получается. Просто то что сейчас вообще мимо проскакивает тоже не очень хорошо.Cavaler wrote:1. Запутанно. Особенно при многострочном поиске.
2. Кривовато реализуемо, особенно если учесть, что каждый Search again - независимый вызов плагина.
Re: Regular Expression Search and Replace (RESearch)
Далеко не всегда есть возможность натыкать памяти. Но если "всасывать", то как будет соотносится размер обрабатываемого файла и размер выделяемой сабжу памяти? Считаем, что свопа у системы нет.Cavaler wrote:При нынешней стоимости оперативки все это от лукавого, я считаю.
В макросе RESearch.lua нет обработки для обратного поиска AltF7 в редакторе.
- HaRT
- Moderator
- Posts: 10858
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Re: Regular Expression Search and Replace (RESearch)
Не могу согласиться.Cavaler wrote:При нынешней стоимости оперативки все это от лукавого, я считаю.HaRT wrote:А PCRE умеет читать только из памяти?
Если умеет также из какого-либо потока, то можно сделать трубопровод.
Как бы ни была дёшева память и сколько бы её ни было установлено на компе, непременно как-нибудь в дерево затесается файл, который в неё не влезет.
А потоки с трубопроводами тем и хороши, что позволяют без лишнего расхода памяти перекодировать/разжимать/расшифровывать, часто даже параллельно.
Фар есть инструмент, а не нянька. © 2009 DrKnS
- HaRT
- Moderator
- Posts: 10858
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Некоторые из ссылок в сообщении у меня открыли явно не то, что, очевидно, было задумано. Поэтому мне пришлось их подправить.Raistlin wrote:Обновил подправленные lng-файлы для RESearch 7.84 / 7.85. По сравнению с файлами для 7.70 есть breaking change: убран хоткей для списка "Выполнить как скрипт:" - совпадал с хоткеем для списка "Искать:", а другой не подберешь.
Прошу впредь использовать кратчайшую и единственно верную ссылку на сообщение, полученную как описано тут: http://forum.farmanager.com/viewtopic.php?p=8589#p8589.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Re: Regular Expression Search and Replace (RESearch)
А они попадут? Помнится, вы скептически отнеслись к моему принципу расстановки хоткеев.Cavaler wrote: 0. Если хотите, чтобы ваши правки попали в исходники - правьте RESearch.msg, он в комплекте. Искать руками все исправления в .lng мне лень.
Это как же? Мы выделяем в том файле кусок с 3-й по 37-ю строку, делаем (три вхождения находятся), и после этого - ничего не выделено? Только что проверил на чистой виртуалке (Far 2.1.1807 bis27 x86, из плагинов - только RESearch, везде настройки по умолчанию, кроме [x] Persistent blocks) - выделение остается, и нижняя его граница находится на не той строке, которая была 37-й до замены.Cavaler wrote: 1. Не могу повторить - ни в Far2 ни в Far3 нет никакого выделения после завершения замены.
Н-да, на чистой виртуалке с единственным плагином (см. выше) и настройками Far'а с рабочей машины - не падает. А на рабочей системе, тоже с единственным плагином (копия Far в отдельной папке), - падает. И куда копать? Может это как-то зависеть от наличия сторонних программ? Что-нибудь менялось в переименовании по сравнению с 7.84?Cavaler wrote:4. Не могу повторить.
Я это и имел в виду - едва ли можно придумать юзкейс для алгоритма, указанного в описании.Cavaler wrote: 5. Если галка включена, переименование работает как замена в редакторе - применяясь дальше к неизмененной части. В противном случае слишком легко зациклиться. Я предпочту исправить описание, нежели логику работы.
Хотя, на мой взгляд, строго говоря, при наличии регэкспов "Многократная замена" - лишнее.
Да.Cavaler wrote: 6. Где, в переименовании? Добавить туда имеющийся в поиске/замене Advanced пойдет?
Макросить в данном случае - неэффективный и затратный путь. А ведь задачу не назовешь слишком экзотической - например, нужно в файлах по маске сделать многоступенчатую замену, но не во всех, а в некоторых, в зависимости от их содержания.Cavaler wrote: 7. Пресеты - исполняются без вмешательства пользователя. Если очень надо, можно намакросить загрузку пресета в диалог.
Я предлагаю так. Пользователь вызывает пакет. Исполняются пресеты из него. Если есть что заменить согласно пресету, в котором включено подтверждение замены, выдается стандартный запрос Replace/Replace All/Abort/Abort All. Соответственно, при выборе Abort прекращается обработка пакетом текущего файла, Abot All - обработка файлов вообще.
В пресетах есть, а в основном диалоге - нет. С другой стороны, в основном диалоге есть [ ] Только в выделенном, а в пресетах этого нет.Cavaler wrote: 8. Про что речь вообще? В редакторских пресетах есть [X] Execute from current position
Почему ж неактуально? При запуске на чистой машине, с настройками консоли по умолчанию, все открывается именно в 80x25.Cavaler wrote: 9-10. Неправда, что диалог всегда под найденным. А 80x25 неактуально. Но - иногда бывают подглюки, посмотрим.
Кроме того, 80x25 - это для примера привел. См. аттач - замена с теми же параметрами, что и для Test2.txt, даст окно с уехавшими вниз контролами на первом же матче (консоль 98x50).
Я лично не вижу, чем они удобнее. Удобно то, что функционально. Впрочем, я уже это говорил.Cavaler wrote: 11. См выше, 80x25 неактуально. А радиобаттоны удобнее списка. Да и это не единственный такой диалог.
- Attachments
-
- Test3.txt
- (1.1 KiB) Downloaded 98 times
Magically yours
Raistlin
Raistlin
Re: Regular Expression Search and Replace (RESearch)
Еще пожелания:
- В русское название галки "Удалить ставшие пустыми строки" полность не видно. Если можно, измените, пож., расположение контролов в диалоге. Даже высоту диалога менять не придется - достаточно сдвинуть [ ] Удалить несовпавшие строки почти до упора вправо (и выровнять с его левой границей [ ] Только в выделенном).
- В S&R в редакторе есть очень полезная штука - "Продолжить работу" и "Продолжить работу (обратный поиск)". Позволяет, инициировав поиск или замену и затем прервавшись, продолжить процесс. Особенно удобным является то, что плагин запоминает последний использовавшийся режим, поэтому для вызова фичи достаточно двух хоткеев (вперед и назад). Можно прикрутить такое?
Magically yours
Raistlin
Raistlin
Re: Regular Expression Search and Replace (RESearch)
Тот же файл в UTF-8 - то есть столько же для английского, в 2 раза больше для русского.AleXH wrote:Далеко не всегда есть возможность натыкать памяти. Но если "всасывать", то как будет соотносится размер обрабатываемого файла и размер выделяемой сабжу памяти? Считаем, что свопа у системы нет.Cavaler wrote:При нынешней стоимости оперативки все это от лукавого, я считаю.
А в макросах для Far1/2 AltF7 - это Filter. Его и добавлю.AleXH wrote:В макросе RESearch.lua нет обработки для обратного поиска AltF7 в редакторе.
Re: Regular Expression Search and Replace (RESearch)
У тебя был пример реально нужной замены в текстовом файле под гигабайт?HaRT wrote:Не могу согласиться.Cavaler wrote:При нынешней стоимости оперативки все это от лукавого, я считаю.HaRT wrote:А PCRE умеет читать только из памяти?
Если умеет также из какого-либо потока, то можно сделать трубопровод.
Как бы ни была дёшева память и сколько бы её ни было установлено на компе, непременно как-нибудь в дерево затесается файл, который в неё не влезет.
А потоки с трубопроводами тем и хороши, что позволяют без лишнего расхода памяти перекодировать/разжимать/расшифровывать, часто даже параллельно.
Не, раз уж я написал код Several-Line, то не буду выпиливать. А он работает по потоку.
Re: Regular Expression Search and Replace (RESearch)
Ну как минимум я смогу быстро сравнить и подумать. А так - не попадут точно.Raistlin wrote:А они попадут? Помнится, вы скептически отнеслись к моему принципу расстановки хоткеев.Cavaler wrote:0. Если хотите, чтобы ваши правки попали в исходники - правьте RESearch.msg, он в комплекте. Искать руками все исправления в .lng мне лень.
А что выделено-то? Пустая строка?Raistlin wrote:Это как же? Мы выделяем в том файле кусок с 3-й по 37-ю строку, делаем замену (три вхождения находятся), и после этого - ничего не выделено?Cavaler wrote: 1. Не могу повторить - ни в Far2 ни в Far3 нет никакого выделения после завершения замены.
После выполнения каждой замены выделение явно сбрасывается, кроме "Replace in selection".
Нет. Если бы менялось - я бы посмотрел.Raistlin wrote:Н-да, на чистой виртуалке с единственным плагином (см. выше) и настройками Far'а с рабочей машины - не падает. А на рабочей системе, тоже с единственным плагином (копия Far в отдельной папке), - падает. И куда копать? Может это как-то зависеть от наличия сторонних программ? Что-нибудь менялось в переименовании по сравнению с 7.84?Cavaler wrote:4. Не могу повторить.
Re: Regular Expression Search and Replace (RESearch)
А как одной заменой заменить все "a" на все "b"?Raistlin wrote:Я это и имел в виду - едва ли можно придумать юзкейс для алгоритма, указанного в описании.Cavaler wrote:5. Если галка включена, переименование работает как замена в редакторе - применяясь дальше к неизмененной части. В противном случае слишком легко зациклиться. Я предпочту исправить описание, нежели логику работы.
Хотя, на мой взгляд, строго говоря, при наличии регэкспов "Многократная замена" - лишнее.
Ну на мой взгляд это уже довольно экзотично. Особенно если это достаточно повторяющаяся операция, чтобы для нее делать пресеты.Raistlin wrote:Макросить в данном случае - неэффективный и затратный путь. А ведь задачу не назовешь слишком экзотической - например, нужно в файлах по маске сделать многоступенчатую замену, но не во всех, а в некоторых, в зависимости от их содержания.Cavaler wrote: 7. Пресеты - исполняются без вмешательства пользователя. Если очень надо, можно намакросить загрузку пресета в диалог.
Делать разные запросы для запуска из пресета и из диалога - вообще ахтунг.Raistlin wrote:Я предлагаю так. Пользователь вызывает пакет. Исполняются пресеты из него. Если есть что заменить согласно пресету, в котором включено подтверждение замены, выдается стандартный запрос Replace/Replace All/Abort/Abort All. Соответственно, при выборе Abort прекращается обработка пакетом текущего файла, Abort All - обработка файлов вообще.
Сделай Ctrl+PgUp перед вызовом диалога. Зачем опция для того, что делается вручную одним нажатием?Raistlin wrote:В пресетах есть, а в основном диалоге - нет.Cavaler wrote: 8. Про что речь вообще? В редакторских пресетах есть [X] Execute from current position
А что делать, если опция в пресете такая выставлена, а выделения нет?Raistlin wrote:С другой стороны, в основном диалоге есть [ ] Только в выделенном, а в пресетах этого нет.
Это и есть неактуально - искусственная ситуация. Никто не мешает сделать консоль больше даже в 800x600. И пользоваться будет удобнее.Raistlin wrote:Почему ж неактуально? При запуске на чистой машине, с настройками консоли по умолчанию, все открывается именно в 80x25.Cavaler wrote:9-10. Неправда, что диалог всегда под найденным. А 80x25 неактуально. Но - иногда бывают подглюки, посмотрим.
1 клик против 2, и сразу видимый выбор опций.Raistlin wrote:Я лично не вижу, чем они удобнее.Cavaler wrote:А радиобаттоны удобнее списка.
Это кардинально неправильное заблуждение. Функциональнее всего - командная строка, и написание скриптов самому. С их помощью можно сделать ВСЕ. Но из этого не следует, что они удобнее GUI и готовых инструментов.Raistlin wrote:Удобно то, что функционально.
Re: Regular Expression Search and Replace (RESearch)
Вообще-то в последней версии они на разных строках со следующей опцией, ровно для этого.Raistlin wrote:В диалоге замены русское название галки "Удалить ставшие пустыми строки" полность не видно.
Не очень понял, что он такого запоминает, что не запоминает Search/replace again?Raistlin wrote:[*]В S&R в редакторе есть очень полезная штука - "Продолжить работу" и "Продолжить работу (обратный поиск)". Позволяет, инициировав поиск или замену и затем прервавшись, продолжить процесс. Особенно удобным является то, что плагин запоминает последний использовавшийся режим, поэтому для вызова фичи достаточно двух хоткеев (вперед и назад). Можно прикрутить такое?