Page 15 of 28

LuaFAR Search

Posted: Fri 13 Nov, 2009 07:29
by Shmuel
Здесь можно обсуждать плагин LuaFAR Search. (Анонс).

LuaFAR Search

Posted: Wed 26 Oct, 2016 07:25
by Shmuel

Latest post of the previous page:

Sim wrote: умеет делать поиск когда весь файл воспринимается как одна строка, но почему нет этой опции при замене текста? Как бы нет препятствий для того чтобы такая опция таки была...
Неудачное название опции "Файл как строка" вводит в заблуждение. Плагин не читает все файлы одним куском, чтобы не затыкаться на очень больших файлах. Он читает кусками в несколько мегабайт, с перекрытием кусков. Этот алгоритм может не найти некоторые вхождения, если их длина больше размера перекрытия.

Для замены алгоритм с перекрытием кусков применять нельзя, ибо возможны некорректные замены, что можно трактовать как потерю данных. Единственное лечение здесь - действительно читать весь файл одним куском. Реализовать это не очень сложно, но сложно красиво обрабатывать ситуации, когда памяти не хватает. На данный момент замена из панелей - построчная. Может как-нибудь что-нибудь придумаю.

LuaFAR Search

Posted: Wed 26 Oct, 2016 10:07
by Sim
Shmuel, файл может вообще не содержать переводов строки, тогда что? будет затык? да пусть лучше обработка такого большого текста на несколько мегабайт затянется немного, но работа будет выполнена. Я так считаю. Может добавить параметр с которым плагин будет считывать весь файл целиком и обрабатывать его как одну строку? а что из этого выйдет ... зависнет фар или просто долго будет работать операция это уже проблема пользователя, как бы знает что делает, и какого размера у него файлы.

LuaFAR Search

Posted: Wed 26 Oct, 2016 10:40
by Shmuel
Sim wrote: файл может вообще не содержать переводов строки, тогда что? будет затык?
Как раз наоборот, файл будет корректно обработан, если памяти хватит.
Sim wrote: да пусть лучше обработка такого большого текста на несколько мегабайт затянется немного, но работа будет выполнена.
Вы меня не поняли. Под большими файлами имеется в виду не несколько мегабайт, а гигабайты. В этом случае ситуация нехватки памяти может возникнуть на произвольном этапе обработки, при этом может и крэш произойти.

Я могу сделать такую замену как вы хотите (с чтением файла целиком "на страх и риск пользователя"), но только отдельным диалогом. Будет ли на это время в обозримом будущем - не знаю.

LuaFAR Search

Posted: Wed 26 Oct, 2016 10:46
by Sim
Shmuel wrote: Я могу сделать такую замену как вы хотите (с чтением файла целиком "на страх и риск пользователя"), но только отдельным диалогом. Будет ли на это время в обозримом будущем - не знаю.
Буду ждать реализацию, у меня не бывает в работе на столько огромных файлов, обычно много мелких файлов в десятки, максимум сотни килобайт. Так что вариант замены текста с поиском в файле воспринимая его как одну строку было бы очень кстати, и кстати в редакторе тоже.

LuaFAR Search

Posted: Wed 26 Oct, 2016 10:52
by Shmuel
Sim wrote: Так что вариант замены текста с поиском в файле воспринимая его как одну строку было бы очень кстати, и кстати в редакторе тоже.
Но ведь в редакторе это есть - диалог "Многострочная замена". Именно то, что вы просите.

LuaFAR Search

Posted: Wed 26 Oct, 2016 10:57
by Sim
Ага, не замечал его искал галку в обычной замене. Есть ли смысл отдельный диалог делать? почему бы не объединить в одном диалоге? ведь по сути интерфейс тот же.

LuaFAR Search

Posted: Wed 26 Oct, 2016 11:02
by Shmuel
Sim wrote: Есть ли смысл отдельный диалог делать?
Есть. Различия в работе значительные, поэтому не следует вызывать у пользователя иллюзию, что это всего лишь опция. Хотя бы то, что основной поиск с заменой даёт пользователю возможность заменять выборочно, а данный диалог - не даёт.

LuaFAR Search

Posted: Wed 26 Oct, 2016 13:43
by Mauro72
Update to last version..
lfs_spa.lng.7z
(2.13 KiB) Downloaded 243 times
Thanks.

LuaFAR Search

Posted: Wed 26 Oct, 2016 14:39
by Shmuel
Mauro72, thank you very much!

LuaFAR Search

Posted: Mon 03 Apr, 2017 09:00
by Talker
Попробовал менять подстроку на перевод строки (#0D#0A -> \r\n) работает отлично
А вот поиск перевода строки не получается - пишу в поле "Искать" \r\n с включенной опцией Регулярное выражение , ответ:

Code: Select all

   ╔═ LuaFAR Search [ 0.00 s ] ═╗
   ║    Выражение не найдено    ║
   ║           "\r\n"           ║
   ╟────────────────────────────╢
   ║           { OK }           ║
   ╚════════════════════════════╝
Что-то делаю не так?

LuaFAR Search

Posted: Mon 03 Apr, 2017 09:36
by Sim
Talker, все дело в том, что этот плагин делит весь текст на строки и обрабатывает по отдельности каждую строку, а символы \r\n служат разделителем, хотя конечно автор мог бы сделать чтобы строка включала в себя символы \r\n в конце строки это бы позволило заменять переводы строки на то что необходимо в конкретной ситуации.

LuaFAR Search

Posted: Mon 03 Apr, 2017 09:39
by Shmuel
Talker,
Отдельного многострочного поиска нет, есть "многострочная замена", отдельным пунктом меню. Описано в справке (а также упоминается на данной странице обсуждения, см. выше).
Sim,
Данная утилита заменяет переводы строк. Что вы хотели сделать и что не получилось?

LuaFAR Search

Posted: Mon 03 Apr, 2017 09:50
by Sim
да, многострочная замена реализована в отдельном диалоговом окне, и если не знаешь о ней то найти сложно, было бы удобнее если бы была галка в диалоге замены

LuaFAR Search

Posted: Mon 03 Apr, 2017 10:39
by Talker
Исходный файл:

Code: Select all

1

2

3

4
Форма поиска:

Code: Select all

    ╔═══════════════════════ Многострочная замена ═══════════════════════╗
    ║ Искать:                                                            ║
    ║ \r\n                                                              ↓║
    ║ Заменить на:                                                       ║
    ║ #                                                                 ↓║
    ║     [ ] Режим функции                                              ║
    ╟────────────────────────────────────────────────────────────────────╢
    ║ [x] Регулярное выражение          Библиотека: Far regex    ↓       ║
    ║ [ ] Учитывать регистр             [ ] Файл как строка              ║
    ║ [ ] Целые слова                   [ ] Многострочный режим          ║
    ║ [ ] Игнорировать пробелы                                           ║
    ╟────────────────────────────────────────────────────────────────────╢
    ║ [ ] Дополнительно                                                  ║
    ║ Начальный код:                    Конечный код:                    ║
    ║                                 ↓                                 ↓║
    ╟────────────────────────────────────────────────────────────────────╢
    ║                { Заменить } [ Подсчёт ] [ Отмена ]                 ║
    ╚════════════════════════════════════════════════════════════════════╝
Ответ:

Code: Select all

   ╔═ Многострочная замена ═╗
   ║  Выражение не найдено  ║
   ║         "\r\n"         ║
   ╟────────────────────────╢
   ║         { OK }         ║
   ╚════════════════════════╝
Что я делаю не так?

LuaFAR Search

Posted: Mon 03 Apr, 2017 11:04
by Shmuel
Справка плагина wrote:На стадии поиска строки текста склеиваются с вставкой \n между ними, независимо от того, какой тип перевода строки есть у данной строки. На стадии замены вставляются переводы строк по умолчанию.
Таким образом, не используйте \r в ваших выражениях.

LuaFAR Search

Posted: Mon 03 Apr, 2017 12:19
by Talker
Да, все работает. Спасибо большое.