Virar ou inverter a ordem das linhas no Notepad ++


95

Quero inverter as ordens de linha de um documento com mais de 500 linhas. As linhas não são apenas números, algumas incluem texto e outros caracteres. É uma mistura.

Exemplo:

Linha 1
Linha 2
Linha 3
Linha 4
Linha 5
Linha 6

Que eu quero virar, reverter e ficar assim de baixo para cima:

Linha 6
Linha 5
Linha 4
Linha 3
Linha 2
Linha 1

O que significa que você deseja que os números na margem esquerda sejam contados regressivamente ou que o conteúdo real do seu arquivo seja revertido?
— Maxpm 02/09/11

2
@Maxpm Conteúdo real do arquivo a ser revertido.
— Danpe


Respostas:


102

Solução que não requer outro software, exceto o plug-in TextFX normalmente incluído:

  1. Editar> Selecionar tudo
  2. TextFX> Ferramentas TextFX> Inserir números de linha
  3. Se TextFX> Ferramentas TextFX> + Classificar em ordem crescente estiver marcado, desmarque
  4. TextFX> Ferramentas TextFX> Classificar linhas que diferenciam maiúsculas de minúsculas (na coluna)
  5. TextFX> Ferramentas TextFX> Excluir números de linha ou primeira palavra

6
Se o TextFX não for encontrado, acesse: Plugins »Gerenciador de plug-ins» Mostrar Gerenciador de plug-ins »Marque" Caracteres do TextFX ", clique em Instalar. Veja aqui: textfx.no-ip.com/textfx
— Kalpesh Panchal

-O trabalhado foi "Classificar linhas maiúsculas e minúsculas", em parte, 4)
— Theta30

@ Theta30: Acho que o texto da interface mudou desde a versão que usei.
— precisa saber é o seguinte

2
Para aqueles que usam o Eclipse, veja esta resposta para fazer isso de maneira ainda mais simples. (Conheço a pergunta original solicitada pelo Notepad ++, mas achei que valeria a pena acrescentar para os que se deparam com isso).
— Steve Chambers

2
O TextFX não é um plug-in suportado na versão de 64 bits.
— Rhyous 21/02

34

Isso também pode ser feito no Notepad ++ sem o plug-in TextFX. Segue a mesma estratégia da resposta aceita, mas usando a funcionalidade nativa. Isso é feito da seguinte maneira:

  1. Editar> Selecionar tudo
  2. Editar> Editor de colunas ...> Selecione o número a ser inserido> Defina o número inicial como 1> Defina Aumentar por 1> Verificar zeros à esquerda> Clique em OK

insira a descrição da imagem aqui

  1. Editar> Operações de linha> Classificar linhas em ordem decrescente Editar: uma atualização recente adicionou opções de classificação extras, a opção: Classificar linhas Lexicograficamente descendente parece fazer o trabalho.

insira a descrição da imagem aqui

  1. Remova os números de linha através da seleção da caixa (Alt + Clique esquerdo Arraste ou Alt + Shift Select) ou Pesquisa / Substituição

insira a descrição da imagem aqui


1
Funciona, mas há duas coisas a ter em mente: 1- Ele insere um número extra para a última linha (vazia), para que você tenha que excluí-lo antes de classificar. 2- Se a sua lista começar com números, você poderá mexer nos números inseridos com os números, porque não insere um espaço após os números inseridos; portanto, tenha cuidado nesse caso.
— Francisco Alvarado

Não podem se reproduzir passo 3. A nova versão alterou a redacção , e qualquer opção não funciona para mim
— Ooker

1
@TrevorYoung - Você está reclamando de uma imagem que foi adicionada por outro usuário . Eu apenas corrigi a formatação da resposta e aprovei a edição. Se a imagem não for útil e remova-a, você é o autor da resposta. A adição da imagem é uma edição aceitável (isto é, a resposta é melhor com a imagem do que sem ele)
— Ramhound

1
@ Ramhound Minhas desculpas. Olhando para o histórico de edições, pensei que você tivesse adicionado a imagem, mas esse não é o caso. Não tenho nenhum problema com a imagem estar lá, mas estava tentando dar uma sugestão para a pessoa que acrescentou que seria melhor se a sugestão fosse feita.
— Trevor Young

1
Isso é estranho, mas funciona ...
— kayleeFrye_onDeck

6

Bem, como estamos dando exemplos de código, se você está no Windows 7 ou instalou o PowerShell em outra versão do Windows, então:

$foo = New-Object System.collections.arraylist;
$foo.AddRange($(Get-Content 'C:\Path\To\File.txt));
$foo.Reverse();
$foo | Out-File C:\Path\To\File.txt

Ou, para uma resposta sem codificação, faça o download do gVim , abra o arquivo e digite:

:g/^/m0

Estou no Windows 7, onde colo esse código? isso é realmente interessante.
— Danpe

2
Abra o menu Iniciar e digite Powershell. Clique duas vezes em "Windows Powershell". Ele abrirá um prompt de comando. Execute-o lá. Também existe um IDE (embora eles o chamam de ISE - Integrated Script Editor), mas faço a maior parte do meu trabalho no prompt de comando e uso o GVim para edição de scripts.
— EBGreen

Como isso pode ser integrado ao Notepad ++? (O título da pergunta é "Virar ou inverter a ordem das linhas no Notepad ++" .)
— Peter Mortensen em

É por isso que é um comentário e não uma resposta. É uma maneira alternativa de realizar o que eu achava que o usuário queria, em vez de uma resposta à pergunta literal.
— EBGreen

5

Se você estiver confortável em compilar C ++, isso deve ser suficiente. Basicamente, eu coloco cada linha do arquivo em um vetor e a produzo em um novo arquivo usando um iterador reverso.

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

int main()
{
    std::vector<std::string> fileLines;
    std::string              currLine;
    std::ifstream            inFile("input.txt");
    if (inFile.is_open())
    {
        while (inFile.good())
        {
            std::getline(inFile, currLine);
            fileLines.push_back(currLine);
        }
        inFile.close();
    }
    else
    {
        std::cout << "Error - could not open input file!\n";
        return 1;
    }

    std::ofstream outFile("output.txt");
    if (outFile.is_open())
    {
        std::vector<std::string>::reverse_iterator rIt;
        for (rIt = fileLines.rbegin(); rIt < fileLines.rend(); rIt++)
        {
            outFile << *rIt;
        }
        outFile.close();
    }
    else
    {
        std::cout << "Error - could not open output file!\n";
        return 1;
    }
    return 0;
}

Se o arquivo de saída estiver faltando quebras de linha entre as linhas, altere outFile << *rIt;para que seja adicionada outFile << *rIt << "\r\n";uma quebra de linha (omita a opção \rse você estiver no Unix / Linux).

Isenção de responsabilidade: não testei esse código (escrevi rapidamente no bloco de notas), mas parece viável.


Obrigado cara :) mas eu já usei meu código, mas isso pode ser muito útil para outras pessoas. Btw, talvez eu escrevi um plugin do Notepad ++ para isso. qual idioma eles usam nos plugins do bloco de notas ++?
— Danpe

@Danpe A maioria dos plugins do Notepad ++ são escritos em C ++, mas tecnicamente pode ser estendido para qualquer outra linguagem capaz de compilar um .DLL (e com as ligações de API apropriadas).
— Breakthrough

Então eu acho que você acabou de criar um plug-in :)
— Danpe

Como isso pode ser integrado ao Notepad ++? (O título da pergunta é "Virar ou inverter a ordem das linhas no bloco de notas ++" .)
— Peter Mortensen



1

Aqui está o código C # .NET para isso, acabei de escrever :)

class Program
{
    static void Main(string[] args)
    {
        try
        {
            String line;
            Stack<String> lines = new Stack<string>();
            // Create an instance of StreamReader to read from a file.
            // The using statement also closes the StreamReader.
            using (StreamReader sr = new StreamReader("test.txt"))
            {
                // Read and display lines from the file until the end of
                // the file is reached.
                while ((line = sr.ReadLine()) != null)
                    lines.Push(line);
            }

            // Create a writer and open the file
            TextWriter tw = new StreamWriter("test2.txt");
            // Write a line of text to the file
            while (lines.Count > 0)
                tw.WriteLine(lines.Pop());
            // close the stream
            tw.Close();
        }
        catch (Exception e)
        {
            // Let the user know what went wrong.
            Console.WriteLine("The file could not be read/written:");
            Console.WriteLine(e.Message);
        }
    }
}

Por que você precisa da unsafepalavra-chave Mainaqui?
— Revelação

@ Break Eu não sei como chegou lá: O lol fixo.
— Danpe

1
Como podemos integrar isso ao bloco de notas ++?
— Teoman shipahi

Como isso pode ser integrado ao Notepad ++? (O título da pergunta é "Virar ou inverter a ordem das linhas no Notepad ++" .)
— Peter Mortensen em

0

Aqui está uma maneira sem codificação:

  1. Baixe / instale a avaliação gratuita do TextPad
  2. Abra um programa de planilha (ou seja, Excel) e crie os números 1000 a 1500 na coluna "A", colocando "1000" na célula A1 e, em seguida, colocando A1 + 1 na célula A2, e copie-o para A500.
  3. Abra seu arquivo de texto no TextPad
  4. Mude para "modo de bloco" no TextPad
  5. Cole a coluna A da planilha no TextPad (tudo terminará na margem esquerda devido ao modo de bloqueio)
  6. Use o recurso de classificação TextPad, decrescente
  7. Use o modo de bloco TextPad delete para se livrar dos números

2
bem, se você for usar o Excel de qualquer maneira, basta copiar o conteúdo do arquivo de qualquer editor e colar no Excel. Preencha a série na próxima coluna com uma série de números. Selecione as duas colunas e classifique decrescente na coluna numérica. Copie a coluna de texto e cole de volta no editor.
— EBGreen

@ EBGreen, você está correto. Eu sou um idiota. Você só precisa ter cuidado, pois o Excel alterará seus dados (mexe com números, datas e outros).
— Dale

Como isso pode ser integrado ao Notepad ++? (O título da pergunta é "Virar ou inverter a ordem das linhas no Notepad ++" .)
— Peter Mortensen em

@ PeterMortensen, A pergunta original dizia: "Se não estiver disponível no Notepad ++, outros softwares também serão bons :)"
— Dale

0

Se você deseja automatizar isso no Notepad ++ com um único clique:

  1. Obtenha este plugin de script Python
  2. adicione o código abaixo e salve-o como arquivo .py na pasta de scripts Python (para saber o local dessa pasta, clique na guia plug-ins, depois em Python Script e novos scripts).

Toda a glória de Reck Dickhard !

Para adicioná-lo no menu de contexto:

Se você clicar na guia plug-ins → Script Python → Configuração , poderá atribuir o script a um ícone da barra de ferramentas ou ao próprio menu Script Python. (Se você atribuir um script ao menu, ele aparecerá imediatamente, mas você não poderá atribuir um atalho até a próxima vez em que o Notepad ++ for iniciado. Se você o atribuir a um ícone da barra de ferramentas, ele aparecerá apenas no próximo início do Notepad ++.)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.