Como posso classificar as linhas em um arquivo de texto, pelo comprimento de cada linha, no Notepad ++?

13

Como posso classificar um arquivo de texto por comprimento de linha no notepad ++? Existe algum plugin disponível para a tarefa mencionada?
No caso em que não há plugin, Qual é o primeiro e talvez segundo tutorial para ler, Para escrever o plugin Eu mesmo?

    
por hpaknia 18.06.2013 / 13:35

4 respostas

6

Esta resposta é inspirada por um vídeo do YouTube . Atualizado para manter a ordem de classificação original, se isso for importante.

O Notepad ++ possui uma ferramenta TextFX interna que classifica as linhas selecionadas em ordem alfabética. Essa ferramenta pode ser sequestrada para classificar pelo comprimento das linhas, colocando espaços à esquerda de cada linha e certificando-se de que todas as linhas tenham o mesmo tamanho.

"O Zoo" vem em ordem alfabética antes de "Sua Casa" porque o espaço é tratado como um caractere e vem antes de "i". __X (fingindo que os sublinhados são realmente espaços) será semelhante em ordem alfabética antes de _XX . A ideia nesta resposta é adicionar espaços e números de linha para que __________092dog seja classificado acima de _003alligator .

Vou usar o seguinte como dados de exemplo:

Lorem
ipsum
dolor
sit
amet
consectetur
adipisicing

Etapa 1. Adicione números de linha.

(Nota adicionada por barlop - uma nota para o leitor sobre essa etapa, não estaremos classificando de acordo com esses números de linha, estamos classificando de acordo com o comprimento das linhas. Mas a razão para adicionar a linha números de linha, é assim que sabemos a ordem natural, de modo que quando, por exemplo, duas linhas + são de igual comprimento, podemos classificar essas linhas de acordo com essa ordem natural)

Supondo que seu arquivo de texto tenha apenas os dados, coloque o cursor de texto (a linha vertical) na primeira posição do arquivo. Em seguida, no menu Edit , selecione Column Editor... ( Alt + C ). Escolha "Número para inserir", comece com 1, aumente em 1 e inclua zeros à esquerda. Observe que isso manterá a ordem original ao classificar da cadeia mais curta para a mais longa. Inverta todas as linhas primeiro se você quiser classificá-las da mais longa para a mais curta.

1Lorem
2ipsum
3dolor
4sit
5amet
6consectetur
7adipisicing

Etapa 2. Preencher todas as linhas com espaços iniciais.

Coloque o cursor de texto (a linha vertical) na primeira posição do arquivo. Em seguida, no menu Edit , selecione Column Editor... ( Alt + C ). Insira espaços suficientes para que a linha mais curta de dados seja preenchida com o comprimento da maior linha de dados. Se a sua linha mais curta tiver 4 caracteres e a sua 44 mais longa, insira pelo menos 40 espaços.

__________1Lorem
__________2ipsum
__________3dolor
__________4sit
__________5amet
__________6consectetur
__________7adipisicing

Etapa 3. Apare as linhas para um comprimento uniforme.

Use a seguinte Expressão / Substituição de Expressões Regulares ( Ctrl + H ) para combinar com os caracteres à direita, igualando ou excedendo o comprimento de sua linha de dados mais longa. p>

^.*(.{50})$

Substitua tudo por $1 . Isso cortará tudo, exceto os 50 caracteres mais à direita de cada linha. Se os seus dados forem mais longos (ou curtos) do que 50, ajuste o {50} na expressão regular.

(Nota adicionada por barlop- a ideia aqui é que as linhas mais curtas têm o maior número de espaços no início )

_______1Lorem
_______2ipsum
_______3dolor
_________4sit
________5amet
_6consectetur
_7adipisicing

Etapa 4. Classifique as linhas.

Selecione todo o texto ( Ctrl + A ). Através do menu TextFX, vá para Text FX > TextFX Tools > Sort lines case sensitive (at column) . Seus dados devem estar em ordem de duração, do mais curto para o mais longo. Se você os quiser na ordem de mais longa para a mais curta, desmarque a opção Text FX > TextFX Tools > + Sort ascending antes de classificar. Observe como os números de linha também são invertidos.

_________4sit
________5amet
_______1Lorem
_______2ipsum
_______3dolor
_6consectetur
_7adipisicing

Etapa 5. Remova os espaços iniciais.

Use outro Localizar / Substituir Expressão Regular ( Ctrl + H ) para corresponder aos espaços iniciais.

^ *\d{4}

Esse é um espaço entre o cursor e o asterisco. Substitua tudo por nada. Isso removerá todos os espaços iniciais e os números de linha inseridos, se você tivesse números de linha de 4 dígitos. Substitua o {4} pelo número correto de dígitos nos seus números de linha.

sit
amet
Lorem
ipsum
dolor
consectetur
adipisicing

MACRO

Eu gravei as etapas acima usando o recurso macro do Notepad ++ e ele não funciona. Não tenho certeza qual etapa falha, mas não diagnostiquei o motivo. Você provavelmente poderia usar o AutoHotKey para automatizar isso se fizer isso repetidamente.

    
por 16.09.2013 / 16:32
3

Não, não acho que haja. O mais próximo é o plugin TextFx, mas é uma classificação baseada em caracteres e não no tamanho da linha. Sua melhor aposta é lançar o texto em uma planilha e classificá-lo lá (usando uma coluna computada separada usando a função LEN() ).

    
por 18.06.2013 / 17:49
1

Você pode usar SQL em N ++ em arquivos CSV! Por exemplo, se você tiver:

col1;
hgfhfghfhg;
khjfhgfhfghfgh;
kjhfhgfhfhgfghfhf;
lkjgjghjhg;
lkjgjg;

, você pode executar o comando select * from data order by length(col1) desc para classificar em ordem decrescente. "data" significa arquivo atual. "col1" - nome da primeira (e última) coluna.

Infelizmente, provavelmente existe um bug que não permite abandonar o delimitador após as linhas no texto de uma coluna.

    
por 21.06.2013 / 23:18
0

Ou se você tiver linux e nedit:

ctrl-a
alt-r
perl -e 'print sort { length($a) <=> length($b) } <>'
    
por 16.09.2013 / 15:15

Tags