3

Использование Notepad++ v6.6.8 с TextFX.

Как сортировать строки по порядку, а не по алфавиту?

То есть я хочу, чтобы строки сортировались так:

1
2
10
11
15
20

не:

1
10
11
15
2
20

5 ответов5

5

Я не знаю, как выглядит ваш файл, но я бы использовал регулярные выражения для добавления пробелов или нулей перед каждым числом, чтобы сделать их одинаковой длины (например, 2 становится 002). Затем они будут отсортированы правильно, и вы можете использовать другую замену, чтобы впоследствии убрать начальные пробелы / нули.

Это шаги (работает для номера до 10 символов)

Найти: ^ заменить: 0000000000

Найти: \d*(\d{10}) Заменить: \1

Сортировать

Найти: ^0* Заменить:

Это работает путем добавления 10 нулей перед числом, хотя это, вероятно, слишком много. Вторая замена, которая берет последние 10 цифр числа, чтобы привести все обратно к одинаковой длине, давая вам такие числа, как 0000000839, 0000000003 и т.д. Они будут отсортированы в том порядке, в котором вы хотите их отсортировать. После сортировки последнее выражение уберет все начальные нули, поэтому вы вернете исходные числа.

Если вам нужны более длинные числа, просто добавьте больше нулей к первой замене и соответственно увеличьте 10 во второй замене. Если вы собираетесь делать это чаще, вы можете записать макрос с этими шагами.

1

Теперь это легко сделать (по крайней мере, в Notepad++ 7.5.9):

Используйте пункт меню:Edit -> Line Operations -> Sort Lines As Integers Ascending

(Обратите внимание, что если вы не выделите какой-либо текст, он будет сортировать весь файл, а если вы выделите текст, он ограничит сортировку выделенным текстом.)

1

Я не пробовал это, но есть плагин, который утверждает, что делает это (пока строки начинаются с числа). Вот ссылка: http://www.scout-soft.com/linesort/

Обновление Хорошо, этот плагин, по-видимому, пока отсутствует. Возможно, он не работает с более новыми версиями NP++. Вот еще один, который я видел в менеджере плагинов, поэтому он, по крайней мере, более распространен: http://william.famille-blum.org/blog/index.php?entry=entry110123-113226

Я только что попробовал это на 6.6.9, и это немного неловко (не забудьте нажать кнопку «Добавить» в диалоговом окне), но работает отлично.

1

Выделите все и скопируйте как текст в Excel или другую программу для работы с электронными таблицами, используйте пользовательскую сортировку. Каждая строка должна быть вставлена как отдельная ячейка, A1, B1 и т.д. Просто нужно установить поле как цифру, а не текст. Это делается путем установки формата ячейки или использования функции TEXT. Вставить обратно в блокнот ++.

В более сложном случае, когда OP содержит текст, смешанный с числами (например, "1 Первая строка", "12 Двенадцатая строка"), мы можем создать столбец сортировки для упорядочивания списка. Поскольку после числа есть пробел, мы можем найти этот пробел, чтобы создать столбец только с числами, используя = LEFT (A1, FIND ("", A1,1)). После распространения функции на весь столбец мы можем отсортировать оба столбца в соответствии с порядком столбцов сортировки (т. Е. Числовым порядком), а затем скопировать первый столбец обратно в правильном порядке. Точная формула для разрыва номера строки будет зависеть от формата строки, но приведенная выше команда должна работать с незначительными изменениями в большинстве случаев, в противном случае обмен стека имеет дополнительные примеры подобных формул.

-2

Плагин сортировки столбцов

http://william.famille-blum.org/software/nppcolumnsort/NppColumnSort-1.0.0.2.zip

Вы должны указать начальный столбец для чисел (обычно 1, первый) и длины для сравнения (максимальное количество цифр). Затем установите порядок сортировки "По возрастанию" и тип сравнения "Числовой".

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