Как отсортировать строки в текстовом файле по длине каждой строки в Notepad ++?
13
Как я могу отсортировать текстовый файл по длине строки в блокноте ++? Есть ли плагин для указанной задачи?
Если плагин отсутствует, какой первый и, возможно, второй учебник прочитать, чтобы написать плагин сам?
Знаете, иногда лучше просто написать код и покончить с этим.
Даниэль Р Хикс
Вы имеете дело с маленькими или большими файлами?
ComFreek,
Файл 50 МБ с длинными строками, длиной около 250 КБ.
13
Являются ли данные чувствительными? Или вы могли бы поделиться им на Dropbox / Google-Drive / и т.д.? Если Notepad ++ сможет открывать и обрабатывать этот файл, я представляю, что мое решение будет работать, но я бы с удовольствием попробовал его сам.
датчанин
Эй @HPM, есть ли шанс получить работу с вашими данными?
датчанин
Ответы:
6
Этот ответ вдохновлен видео на YouTube . Обновлен, чтобы поддерживать оригинальный порядок сортировки, если это важно.
Notepad ++ имеет встроенный инструмент TextFX, который сортирует выделенные строки по алфавиту. Этот инструмент можно перехватить для сортировки по длине линий, поместив пробелы слева от каждой строки и убедившись, что все строки имеют одинаковую длину.
«Зоопарк» идет в алфавитном порядке перед «Их домом», потому что пространство рассматривается как символ и идет перед «я». __X(притворяясь, что подчеркивания на самом деле пробелы), аналогично, придет в алфавитном порядке раньше _XX. Идея в этом ответе заключается в добавлении пробелов и номеров строк, которые __________092dogбудут отсортированы выше _003alligator.
Я буду использовать следующие данные в качестве примера:
Lorem
ipsum
dolor
sit
amet
consectetur
adipisicing
Шаг 1. Добавьте номера строк.
(Примечание, добавленное barlop - примечание для читателя об этом шаге, мы не будем сортировать по этим номерам строк, мы сортируем по длине строк. Но причина добавления номеров строк заключается в том, что мы знать естественный порядок, так что, когда, например, две + строки имеют одинаковую длину, мы можем отсортировать эти строки в соответствии с этим естественным порядком)
Предполагая, что ваш текстовый файл содержит только данные, поместите текстовый курсор (вертикальная линия) в самую первую позицию файла. Затем в Editменю выберите Column Editor...( Alt+ C). Выберите «Число для вставки» и начните с 1, увеличьте на 1 и включите начальные нули. Обратите внимание, что это сохранит исходный порядок при сортировке от самой короткой строки к самой длинной. Сначала переверните все строки, если хотите отсортировать по длине.
Поместите текстовый курсор (вертикальная линия) в самую первую позицию файла. Затем в Editменю выберите Column Editor...( Alt+ C). Вставьте достаточно пробелов, чтобы самая короткая строка данных была заполнена до длины самой длинной строки данных. Если ваша самая короткая строка содержит 4 символа, а самая длинная - 44, убедитесь, что вы вставили как минимум 40 пробелов.
Используйте следующее Регулярное выражение Найти / Заменить ( Ctrl+ H), чтобы соответствовать правым символам, равным или превышающим длину самой длинной строки данных.
^.*(.{50})$
Заменить все на $1. Это обрезает все, кроме самых правых 50 символов каждой строки. Если ваши данные длиннее (или короче), чем 50, настройте их {50}в регулярном выражении.
(Примечание добавлено barlop - идея здесь в том, что самые короткие строки имеют наибольшее количество пробелов в начале )
Выделите весь текст ( Ctrl+ A). Через меню TextFX перейдите к Text FX > TextFX Tools > Sort lines case sensitive (at column). Ваши данные должны быть в порядке длины, от самого короткого до самого длинного. Если вы хотите, чтобы они находились в порядке от самого длинного до самого короткого, снимите флажок Text FX > TextFX Tools > + Sort ascendingперед сортировкой. Обратите внимание, что номера строк также меняются местами.
Используйте другое Регулярное выражение Найти / Заменить ( Ctrl+ H), чтобы найти начальные пробелы.
^ *\d{4}
Это пространство между кареткой и звездочкой. Заменить все ничем. Это удалит все начальные пробелы и вставленные номера строк, если у вас были 4-значные номера строк. Замените на {4}правильное количество цифр в номерах строк.
sit
amet
Lorem
ipsum
dolor
consectetur
adipisicing
MACRO
Я записал вышеупомянутые шаги, используя функцию макроса Notepad ++, и она не работает. Я не уверен, какой шаг терпит неудачу, но я не диагностировал почему. Возможно, вы могли бы использовать AutoHotKey для автоматизации этого, если вы делаете это неоднократно.
Предупреждение: это не стабильный вид. Другими словами, строки одинаковой длины не обязательно будут появляться в том же порядке после сортировки - вместо этого они будут отсортированы лексикографически.
Боб
@Bob является правильным, если у вас есть строки заданной длины, например, 33 символа, которые имеют определенный порядок, которые не будут отражены в результатах. Мы можем добавить номера строк с помощью Alt + C до шага 1 (включая начальные 0, чтобы обеспечить одинаковую длину). Затем при очистке на шаге 4 используйте ^ *\d{5}или любое другое количество цифр для номеров строк.
датчанин
2
Ответ был обновлен, чтобы сохранить существующий порядок сортировки, предполагая, что это важно.
датчанин
хороший датчанин за то, что следил за тем, что делал тот парень в видео на YouTube, где он также отключил комментарии. Можете ли вы добавить ссылку на текст там, где вы думаете, что это не сработало, на pastebin pastebin.com ? и не получилось ли это только с макросом или вручную?
Barlop
1
Надо сказать, прочитав твой ответ, я понял это только когда попробовал. Я думаю, что причина, почему у вас нет больше голосов, может быть в том, что люди не поняли логику. Вы позволите мне добавить объяснение логики к вашему ответу в начале?
Barlop
3
Нет, я не думаю, что есть. Самый близкий плагин TextFx, но это сортировка на основе символов, а не на основе длины строки. Лучше всего поместить текст в электронную таблицу и отсортировать его там (используя отдельный вычисляемый столбец с использованием LEN()функции).
Спасибо, текстовый файл имеет длинные строки и огромный общий размер, поэтому я убрал редакторы электронных таблиц. Позвольте мне обновить вопрос.
hpaknia
@HPM хорошо, если вы хотите посмотреть за пределы блокнота ++, тогда командная строка сделает это. Например, используйте некоторые команды, чтобы получить длину строки в конце каждой строки. тогда ты, по крайней мере, был бы ближе к этому.
Бароп
спасибо, это хороший совет Что меня интересует, так это множество плагинов NP ++, почему этого не существует?
hpaknia
1
Вы можете использовать SQL в N ++ в файлах CSV! Например, если у вас есть:
Вы можете выполнить команду select * from data order by length(col1) descсортировки по убыванию. «данные» означает текущий файл. «col1» - имя первого (и последнего) столбца.
К сожалению, возможно, есть ошибка, которая не позволяет отказаться от разделителя после строк в тексте из одного столбца.
Это действительно отличное решение, если бы только SQL в N ++ не искажал вывод данных. Я только что проверил ваше решение и добавил в конце всех строк разделители с быстрой заменой регулярных выражений, но вывод данных преобразует все в строчные буквы и заменил мои черточки на вопросительные знаки.
датчанин
@Dane (в настоящее время у меня нет доступа к Notepad ++.) Возможно, попробуйте добавить одну кавычку в начало и конец каждой строки (а затем точку с запятой после этого)? Может быть, двойные кавычки?
Боб
@ Боб: ничего хорошего. Строчные буквы упоминаются даже в примечаниях к выпуску плагина SQL в N ++.
Ответы:
Этот ответ вдохновлен видео на YouTube . Обновлен, чтобы поддерживать оригинальный порядок сортировки, если это важно.
Notepad ++ имеет встроенный инструмент TextFX, который сортирует выделенные строки по алфавиту. Этот инструмент можно перехватить для сортировки по длине линий, поместив пробелы слева от каждой строки и убедившись, что все строки имеют одинаковую длину.
«Зоопарк» идет в алфавитном порядке перед «Их домом», потому что пространство рассматривается как символ и идет перед «я».
__X
(притворяясь, что подчеркивания на самом деле пробелы), аналогично, придет в алфавитном порядке раньше_XX
. Идея в этом ответе заключается в добавлении пробелов и номеров строк, которые__________092dog
будут отсортированы выше_003alligator
.Я буду использовать следующие данные в качестве примера:
Шаг 1. Добавьте номера строк.
(Примечание, добавленное barlop - примечание для читателя об этом шаге, мы не будем сортировать по этим номерам строк, мы сортируем по длине строк. Но причина добавления номеров строк заключается в том, что мы знать естественный порядок, так что, когда, например, две + строки имеют одинаковую длину, мы можем отсортировать эти строки в соответствии с этим естественным порядком)
Предполагая, что ваш текстовый файл содержит только данные, поместите текстовый курсор (вертикальная линия) в самую первую позицию файла. Затем в
Edit
меню выберитеColumn Editor...
( Alt+ C). Выберите «Число для вставки» и начните с 1, увеличьте на 1 и включите начальные нули. Обратите внимание, что это сохранит исходный порядок при сортировке от самой короткой строки к самой длинной. Сначала переверните все строки, если хотите отсортировать по длине.Шаг 2. Заполните все строки пробелами.
Поместите текстовый курсор (вертикальная линия) в самую первую позицию файла. Затем в
Edit
меню выберитеColumn Editor...
( Alt+ C). Вставьте достаточно пробелов, чтобы самая короткая строка данных была заполнена до длины самой длинной строки данных. Если ваша самая короткая строка содержит 4 символа, а самая длинная - 44, убедитесь, что вы вставили как минимум 40 пробелов.Шаг 3. Обрежьте линии до одинаковой длины.
Используйте следующее Регулярное выражение Найти / Заменить ( Ctrl+ H), чтобы соответствовать правым символам, равным или превышающим длину самой длинной строки данных.
Заменить все на
$1
. Это обрезает все, кроме самых правых 50 символов каждой строки. Если ваши данные длиннее (или короче), чем 50, настройте их{50}
в регулярном выражении.(Примечание добавлено barlop - идея здесь в том, что самые короткие строки имеют наибольшее количество пробелов в начале )
Шаг 4. Сортировка строк.
Выделите весь текст ( Ctrl+ A). Через меню TextFX перейдите к
Text FX > TextFX Tools > Sort lines case sensitive (at column)
. Ваши данные должны быть в порядке длины, от самого короткого до самого длинного. Если вы хотите, чтобы они находились в порядке от самого длинного до самого короткого, снимите флажокText FX > TextFX Tools > + Sort ascending
перед сортировкой. Обратите внимание, что номера строк также меняются местами.Шаг 5. Удалить ведущие пробелы.
Используйте другое Регулярное выражение Найти / Заменить ( Ctrl+ H), чтобы найти начальные пробелы.
Это пространство между кареткой и звездочкой. Заменить все ничем. Это удалит все начальные пробелы и вставленные номера строк, если у вас были 4-значные номера строк. Замените на
{4}
правильное количество цифр в номерах строк.MACRO
Я записал вышеупомянутые шаги, используя функцию макроса Notepad ++, и она не работает. Я не уверен, какой шаг терпит неудачу, но я не диагностировал почему. Возможно, вы могли бы использовать AutoHotKey для автоматизации этого, если вы делаете это неоднократно.
источник
^ *\d{5}
или любое другое количество цифр для номеров строк.Нет, я не думаю, что есть. Самый близкий плагин TextFx, но это сортировка на основе символов, а не на основе длины строки. Лучше всего поместить текст в электронную таблицу и отсортировать его там (используя отдельный вычисляемый столбец с использованием
LEN()
функции).источник
Вы можете использовать SQL в N ++ в файлах CSV! Например, если у вас есть:
Вы можете выполнить команду
select * from data order by length(col1) desc
сортировки по убыванию. «данные» означает текущий файл. «col1» - имя первого (и последнего) столбца.К сожалению, возможно, есть ошибка, которая не позволяет отказаться от разделителя после строк в тексте из одного столбца.
источник
Или если у вас есть Linux и Nedit:
источник