Страница 1 из 2

EmEditor удаление строк по параметрам

Добавлено: Вт июл 28, 2015 21:04
ArrowSoft
Добрый привет!
Подскажите пожалуйста как удалить строки содержащие более 16 символов и менее 16 символов, в txt через EmEditor.
:cry:

Добавлено: Вт июл 28, 2015 21:21
Avada
ArrowSoft
Видимо, макрос надо писать. Я тут пас, но на форуме есть более продвинутые специалисты. (Например, CaptainFlint, но он сейчас должен быть в отъезде.) И версию используемого EE надо в любом случае указать.

Добавлено: Вт июл 28, 2015 21:41
ArrowSoft
Avada
я подумал можно через регулярное выражение, но не знаю как ими пользоваться тут. Спасибо за ответ :)
Версия 15.1.7

Добавлено: Вт июл 28, 2015 21:41
MVV
Можно заменой с регулярным выражением.
Для удаления строк короче 16 символов заменить выражение (^|\n).{0,16}\n\n? на \1.
Для удаления строк длиннее 16 символов заменить чуть модифицированное выражение (^|\n).{16,}\n\n? на \1.

Добавлено: Вт июл 28, 2015 21:51
ArrowSoft
MVV
Спасибо! Помогло! :roll:
Но работает очень медленно, думал будет быстро.
Все так через Terminal мне будет проще удалить =)

Добавлено: Вт июл 28, 2015 22:08
Flasher
ArrowSoft
На скорость влияют разные факторы. Например, размер файла, рабочие процессы, загрузка памяти, процессор.
Вот "быстро" - это сколько?

Добавлено: Вт июл 28, 2015 22:21
MVV
Насколько я понимаю, в EmEditor загруженные в память файлы хранятся как массивы строк, поэтому операции по удалению или добавлению строк в многострочном файле медленны - видимо, из-за частого перестроения этого массива строк.

Добавлено: Вт июл 28, 2015 23:25
Flasher
[s]Есть ещё один способ. Закрепляем режим блочного выделения. Держим на первой строке после 16 символа Shift и жмём PgDn пока сепаратор не достинет конца рабочей области, потом отпускаем PgDn и нажимаем HOME или END (+ необх. число раз Вправо) в зависимости от того, с какой стороны удаляем, а после отпускаем Shift и жмём Del, соответственно.[/s]

Добавлено: Вт июл 28, 2015 23:32
MVV
Flasher,
Длинные строки же так просто укоротятся, но не удалятся целиком, или?

Добавлено: Вт июл 28, 2015 23:35
Flasher
MVV
Блин, точно, я вообще о другом подумал... Вычёркиваю...

Добавлено: Ср июл 29, 2015 08:23
Avada
ArrowSoft
Что какие-то рекомендации помогли — замечательно, но правила форума попрошу соблюдать. Полное цитирование предыдущего поста — моветон. В таких случаях достаточно ника того, кому отвечают (вставляется кликом из левой части соответствующего поста). Ненужные цитаты удалены.

Добавлено: Сб янв 21, 2017 15:48
umka
MVV
Для удаления строк длиннее 16 символов заменить чуть модифицированное выражение (^|\n).{16,}\n\n? на \1.
Меня терзают смутные сомнения.

Что если текст будет такой:

Код: Выделить всё

Чт
о 
ка
ки
е-т
о р
ек
ом
ен
да
ци
Это регулярное выражение найдет первые любых . 16 символов (включая символы перевода строки, любые ведь), то есть:

Код: Выделить всё

Чт
о 
ка
ки
е-т
о р
ек
и заменит их на символ перевода строки или начала строки.
Хотя эти строки заведомо короче 16-ти символов.

Добавлено: Сб янв 21, 2017 15:59
Flasher
umka
Ничего подобного. Это в первом примере {0,16} даёт до 16 символов, а во втором {16,} даёт 16+, но по ТЗ тут 17 нужно писать.

Добавлено: Сб янв 21, 2017 16:25
Alextp
Офтоп-- в CudaText есть плагин Filter Lines:
вводим там регэкс ^.{17,}$
и он найдет строки больше 16.
И наоборот можно- ^.{,16}$

Добавлено: Сб янв 21, 2017 21:08
umka
Flasher
разве символы перевода строки не считаются за символы?