Вопрос или проблема
Как отсортировать текстовый файл по длине строки в Notepad++? Доступен ли какой-либо плагин для этой задачи?
В случае, если плагин отсутствует, какой будет первым и, возможно, вторым руководством для написания плагина самостоятельно?
Этот ответ вдохновлен видео на YouTube. Обновлено для поддержания оригинального порядка сортировки, если это важно.
Notepad++ имеет встроенный инструмент TextFX, который сортирует выбранные строки в алфавитном порядке. Этот инструмент можно использовать для сортировки по длине строк, добавляя пробелы слева от каждой строки и обеспечивая, что все строки имеют одинаковую длину.
“The Zoo” идет в алфавитном порядке перед “Their House”, потому что пробел считается символом и идет перед “i”. __X
(предполагая, что подчеркивание — это на самом деле пробелы) также будет идти алфавитно перед _XX
. Идея этого ответа заключается в добавлении пробелов и номеров строк, так что __________092dog
будет отсортирована выше _003alligator
.
Я использую следующие данные для примера:
Lorem
ipsum
dolor
sit
amet
consectetur
adipisicing
Шаг 1. Добавьте номера строк.
(Заметка, добавленная barlop-ом: примечание для читателя касательно этого шага, мы не будем сортировать по этим номерам строк, мы сортируем по длине строк. Но причина добавления номеров строк заключается в том, чтобы мы знали естественный порядок, так что когда, например, две+ строки имеют одинаковую длину, мы можем отсортировать эти строки в соответствии с этим естественным порядком)
Предполагая, что в вашем текстовом файле есть только данные, поместите текстовый курсор (вертикальная линия) в самое первое положение файла. Затем в меню Edit
выберите Column Editor...
(Alt+C). Выберите “Number to Insert” и начните с 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
перед сортировкой. Обратите внимание, как номера строк также переворачиваются.
_________4sit
________5amet
_______1Lorem
_______2ipsum
_______3dolor
_6consectetur
_7adipisicing
Шаг 5. Удалите ведущие пробелы.
Используйте еще одно Регулярное Выражение для поиска/замены (Ctrl+H), чтобы соответствовать ведущим пробелам.
^ *\d{4}
Это пробел между кареткой и звездочкой. Замените все на ничего. Это удалит все ведущие пробелы и вставленные номера строк, если у вас были 4-значные номера строк. Замените {4}
на правильное количество цифр в ваших номерах строк.
sit
amet
Lorem
ipsum
dolor
consectetur
adipisicing
МАКРОС
Я записал вышеупомянутые шаги, используя функцию макросов Notepad++, и это не работает. Я не уверен, какой шаг не удается, но я не выяснил почему. Возможно, вы можете использовать AutoHotKey, чтобы автоматизировать это, если вы делаете это многократно.
Нет, я не думаю, что такой существует. Ближайший — это плагин TextFx, но это сортировка по символам, а не по длине строки. Ваш лучший выбор — переместить текст в электронную таблицу и отсортировать его там (используя отдельный вычисленный столбец с использованием функции LEN()
).
Вы можете использовать SQL в N++ в CSV файлах!
Например, если у вас имеется:
col1;
hgfhfghfhg;
khjfhgfhfghfgh;
kjhfhgfhfhgfghfhf;
lkjgjghjhg;
lkjgjg;
, вы можете выполнить команду select * from data order by length(col1) desc
для сортировки по убыванию.
“data” означает текущий файл. “col1” – имя первого (и последнего) столбца.
К сожалению, существует, вероятно, ошибка, которая не позволяет отказаться от разделителя после строк в одноколоночном тексте.
Или если у вас есть Linux и nedit:
ctrl-a
alt-r
perl -e 'print sort { length($a) <=> length($b) } <>'
В NotePad++ установите плагин PythonScript через Plugins Admin:
Создайте файл sort_lines_by_length.py
(например) в C:\Program Files\Notepad++\plugins\PythonScript\scripts\
содержащий:
from Npp import editor
lines = editor.getText().split("\n")
lines.sort(key=len)
editor.setText("\n".join(lines))
Заметка из документации плагина:
Подменю
Scripts
автоматически обновляется всякий раз, когда вы сохраняете сценарий, поэтому, если вы вручную скопируете файл в каталог скриптов, вам нужно будет внести изменение (например, добавить новую строку или комментарий) и сохранить скрипт (любой подойдет) в Notepad++, чтобы оно обновилось.
Таким образом, необходимо редактировать и сохранять скрипт в Notepad++, чтобы он отображался в подменю Scripts.
Запустите его в текстовом файле, который хотите отсортировать:
Вставьте данные в базу данных MS Access – в таблицу с одним текстовым и одним целочисленным полем. Вставьте текстовые строки из исходного файла в текстовое поле Access (настроив запрос с одним полем, он вставляется сверху). Любая строка длиной более 255 символов будет перенаправлена в файл ошибок, как поле “мемо” – которое теперь называется “длинный текст”
Обновите целочисленное поле с длиной текста в текстовом поле – запрос на обновление
Отсортируйте по длине и тексту – вырежьте/вставьте текстовый столбец обратно в ваш исходный файл
Я делаю это все время с списками каталогов или URL, и это занимает больше времени, чтобы прочитать инструкции, чем вставить данные, запустить обновление для получения длины и т. д. Я экспериментирую с инкапсуляцией всего процесса с помощью скрипта Access
Я использую Notepad++ как свой редактор.
.
Ответ или решение
Для сортировки строк в текстовом файле по их длине в Notepad++ можно воспользоваться несколькими методами, включая использование встроенных средств, плагинов или написание скрипта на Python. Ниже представлены различные подходы, которые помогут вам достичь этой цели.
Теория
Notepad++ — это мощный текстовый редактор, который поддерживает различные плагины и расширения, позволяющие значительно расширить функциональность программы. Одной из задач, которую можно решить с помощью Notepad++, является сортировка строк по длине. Хотя Notepad++ не предлагает такой функциональности "из коробки", можно использовать обходные пути, включая использование плагинов или простого скрипта на Python.
Пример
Рассмотрим строковый файл с содержимым:
Lorem
ipsum
dolor
sit
amet
consectetur
adipisicing
Ваша цель — отсортировать эти строки по длине от самой короткой до самой длинной. Для этого можно воспользоваться несколькими методами.
Применение
Способ 1: Использование TextFX плагина с обходным методом
-
Добавление номеров строк: Откройте редактор столбцов, нажмите
Alt + C
, выберите "Number to Insert" с началом с 1 и увеличением на 1, и добавьте ведущие нули. -
Добавление пробелов: Опять откройте редактор столбцов (
Alt + C
) и вставьте необходимое количество пробелов, чтобы уравнять длину строк. -
Обрезка строк: Используйте поиск и замену (
Ctrl + H
) с регулярным выражением^.*(.{50})$
, заменив все на$1
, чтобы обрезать строки до одинаковой длины. -
Сортировка строк: Через меню TextFX выберите
Text FX > TextFX Tools > Sort lines case sensitive (at column)
, чтобы отсортировать строки. -
Удаление ведущих пробелов и номеров строк: Используйте замену для удаления пробелов и номеров строк. Например, регулярное выражение
^ *\d{4}
можно использовать, чтобы удалить ведущие пробелы и номера.
Способ 2: Использование плагина PythonScript
-
Установка плагина PythonScript: Установите его через Plugins Admin.
-
Создание скрипта: Напишите скрипт на Python, который будет сортировать строки по длине.
from Npp import editor lines = editor.getText().split("\n") lines.sort(key=len) editor.setText("\n".join(lines))
-
Запуск скрипта: Сохраните скрипт в директории
C:\Program Files\Notepad++\plugins\PythonScript\scripts\
и запустите его через меню плагинов.
Заключение
Эти методы предоставляют эффективные решения для сортировки строк по длине в Notepad++. Использование TextFX требует больше шагов и ручной настройки, зато PythonScript позволяет автоматизировать процесс, что экономит время при повторных операциях. При всей своей простоте, оба подхода демонстрируют гибкость Notepad++ в решении нестандартных задач, предоставляя пользователю возможность выбора подходящего инструмента в зависимости от его навыков и предпочтений.