Как я могу отсортировать строки в текстовом файле по длине каждой строки в Notepad++?

Вопрос или проблема

Как отсортировать текстовый файл по длине строки в 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 плагина с обходным методом

  1. Добавление номеров строк: Откройте редактор столбцов, нажмите Alt + C, выберите "Number to Insert" с началом с 1 и увеличением на 1, и добавьте ведущие нули.

  2. Добавление пробелов: Опять откройте редактор столбцов (Alt + C) и вставьте необходимое количество пробелов, чтобы уравнять длину строк.

  3. Обрезка строк: Используйте поиск и замену (Ctrl + H) с регулярным выражением ^.*(.{50})$, заменив все на $1, чтобы обрезать строки до одинаковой длины.

  4. Сортировка строк: Через меню TextFX выберите Text FX > TextFX Tools > Sort lines case sensitive (at column), чтобы отсортировать строки.

  5. Удаление ведущих пробелов и номеров строк: Используйте замену для удаления пробелов и номеров строк. Например, регулярное выражение ^ *\d{4} можно использовать, чтобы удалить ведущие пробелы и номера.

Способ 2: Использование плагина PythonScript

  1. Установка плагина PythonScript: Установите его через Plugins Admin.

  2. Создание скрипта: Напишите скрипт на Python, который будет сортировать строки по длине.

    from Npp import editor
    
    lines = editor.getText().split("\n")
    lines.sort(key=len)
    editor.setText("\n".join(lines))
  3. Запуск скрипта: Сохраните скрипт в директории C:\Program Files\Notepad++\plugins\PythonScript\scripts\ и запустите его через меню плагинов.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...