Как я могу отсортировать текстовый файл по длине строки в блокноте ++? Есть ли плагин для указанной задачи?
Если плагин отсутствует, какой первый и, возможно, второй урок прочитать, чтобы написать плагин сам?
4 ответа
Этот ответ вдохновлен видео на 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 для автоматизации этого, если вы делаете это неоднократно.
Нет, я не думаю, что есть. Наиболее близким является плагин TextFx, но это сортировка на основе символов, а не на основе длины строки. Лучше всего поместить текст в электронную таблицу и отсортировать его там (используя отдельный вычисляемый столбец с использованием функции LEN()
).
Вы можете использовать SQL в N++ в файлах CSV! Например, если у вас есть:
col1;
hgfhfghfhg;
khjfhgfhfghfgh;
kjhfhgfhfhgfghfhf;
lkjgjghjhg;
lkjgjg;
Вы можете выполнить команду select * from data order by length(col1) desc
для сортировки по убыванию.
"данные" означает текущий файл. "col1" - имя первого (и последнего) столбца.
К сожалению, возможно, есть ошибка, которая не позволяет отказаться от разделителя после строк в тексте из одного столбца.
Или если у вас есть Linux и Nedit:
ctrl-a
alt-r
perl -e 'print sort { length($a) <=> length($b) } <>'