13

Как я могу отсортировать текстовый файл по длине строки в блокноте ++? Есть ли плагин для указанной задачи?
Если плагин отсутствует, какой первый и, возможно, второй урок прочитать, чтобы написать плагин сам?

4 ответа4

6

Этот ответ вдохновлен видео на YouTube. Обновлен, чтобы поддерживать оригинальный порядок сортировки, если это важно.

Notepad++ имеет встроенный инструмент TextFX, который сортирует выделенные строки по алфавиту. Этот инструмент можно перехватить для сортировки по длине линий, поместив пробелы слева от каждой строки и убедившись, что все строки имеют одинаковую длину.

"Зоопарк" идет в алфавитном порядке перед "Их домом", потому что пространство рассматривается как символ и идет перед "я". __X (притворяясь, что символы подчеркивания на самом деле являются пробелами) также будет располагаться в алфавитном порядке перед _XX . Идея в этом ответе состоит в том, чтобы добавить пробелы и номера строк, чтобы __________092dog был отсортирован выше _003alligator .

Я буду использовать следующие данные в качестве примера:

Lorem
ipsum
dolor
sit
amet
consectetur
adipisicing

Шаг 1. Добавьте номера строк.

(Примечание, добавленное barlop - примечание для читателя об этом шаге, мы не будем сортировать по этим номерам строк, мы сортируем по длине строк. Но причина добавления номеров строк заключается в том, что мы знаем естественный порядок, так что когда, например, две + строки имеют одинаковую длину, мы можем отсортировать эти строки в соответствии с этим естественным порядком)

Предполагая, что ваш текстовый файл содержит только данные, поместите текстовый курсор (вертикальная линия) в самую первую позицию файла. Затем в меню « Edit выберите « Column Editor... (Alt+C). Выберите "Число для вставки" и начните с 1, увеличьте на 1 и включите начальные нули. Обратите внимание, что это сохранит исходный порядок при сортировке от самой короткой строки к самой длинной. Сначала переверните все строки, если хотите отсортировать по длине.

1Lorem
2ipsum
3dolor
4sit
5amet
6consectetur
7adipisicing

Шаг 2. Заполните все строки пробелами.

Поместите текстовый курсор (вертикальная линия) в самую первую позицию файла. Затем в меню « Edit выберите « Column Editor... (Alt+C). Вставьте достаточно пробелов, чтобы самая короткая строка данных была дополнена до длины самой длинной строки данных. Если ваша самая короткая строка содержит 4 символа, а самая длинная - 44, убедитесь, что вы вставили как минимум 40 пробелов.

__________1Lorem
__________2ipsum
__________3dolor
__________4sit
__________5amet
__________6consectetur
__________7adipisicing

Шаг 3. Обрежьте линии до одинаковой длины.

Используйте следующее Регулярное выражение Найти / Заменить (Ctrl+H), чтобы сопоставить правые символы, равные или превышающие длину самой длинной строки данных.

^.*(.{50})$

Замените все $1 . Это обрезает все, кроме самых правых 50 символов каждой строки. Если ваши данные длиннее (или короче), чем 50, отрегулируйте {50} в регулярном выражении.

(Примечание добавлено barlop - идея здесь в том, что самые короткие строки имеют наибольшее количество пробелов в начале)

_______1Lorem
_______2ipsum
_______3dolor
_________4sit
________5amet
_6consectetur
_7adipisicing

Шаг 4 Сортировка строк.

Выделите весь текст (Ctrl+ A). Через меню TextFX перейдите в Text FX > TextFX Tools > Sort lines case sensitive (at column) . Ваши данные должны быть в порядке длины, от самой короткой до самой длинной. Если вы хотите, чтобы они находились в порядке от самого длинного до самого короткого, снимите флажок Text FX > TextFX Tools > + Sort ascending option перед сортировкой. Обратите внимание, что номера строк также меняются местами.

_________4sit
________5amet
_______1Lorem
_______2ipsum
_______3dolor
_6consectetur
_7adipisicing

Шаг 5 Удалить ведущие пробелы.

Используйте другое Регулярное выражение Найти / Заменить (Ctrl+H), чтобы найти начальные пробелы.

^ *\d{4}

Это пространство между кареткой и звездочкой. Заменить все ничем. Это удалит все начальные пробелы и вставленные номера строк, если у вас были 4-значные номера строк. Замените {4} на правильное количество цифр в номерах строк.

sit
amet
Lorem
ipsum
dolor
consectetur
adipisicing

MACRO

Я записал вышеупомянутые шаги, используя функцию макроса Notepad++, и она не работает. Я не уверен, какой шаг терпит неудачу, но я не диагностировал почему. Возможно, вы могли бы использовать AutoHotKey для автоматизации этого, если вы делаете это неоднократно.

3

Нет, я не думаю, что есть. Наиболее близким является плагин TextFx, но это сортировка на основе символов, а не на основе длины строки. Лучше всего поместить текст в электронную таблицу и отсортировать его там (используя отдельный вычисляемый столбец с использованием функции LEN() ).

1

Вы можете использовать SQL в N++ в файлах CSV! Например, если у вас есть:

col1;
hgfhfghfhg;
khjfhgfhfghfgh;
kjhfhgfhfhgfghfhf;
lkjgjghjhg;
lkjgjg;

Вы можете выполнить команду select * from data order by length(col1) desc для сортировки по убыванию. "данные" означает текущий файл. "col1" - имя первого (и последнего) столбца.

К сожалению, возможно, есть ошибка, которая не позволяет отказаться от разделителя после строк в тексте из одного столбца.

0

Или если у вас есть Linux и Nedit:

ctrl-a
alt-r
perl -e 'print sort { length($a) <=> length($b) } <>'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .