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
Danpe
fonte
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
possível duplicata de fim de linha inversa no Notepad ++
Franck Dernoncourt
Relacionado (mas não duplicado): Como reverter um arquivo de texto no Windows
Peter Mortensen

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
Gnubie
fonte
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

Trevor Young
fonte
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
EBGreen
fonte
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.

Avanço
fonte
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
4

Use a ferramenta disponível on-line que faz isso em um clique

http://www.miniwebtool.com/reverse-lines/

user674167
fonte
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
2

Você pode fazê-lo online no site http://textmechanic.co/Sort-Text-Lines.html

Franck Dernoncourt
fonte
1
Site é quebrado, porém, parece que havia se mudado para textmechanic.co/Sort-Text-Lines.html
George Chalhoub
1
@georgechalhoub Obrigado, atualizei a resposta.
Franck Dernoncourt
Como isso pode ser integrado ao Notepad ++? (O título da pergunta é "Virar ou inverter a ordem das linhas no Notepad ++" .)
Peter Mortensen em
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);
        }
    }
}
Danpe
fonte
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
Dale
fonte
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 PythonConfiguraçã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 ++.)

JinSnow
fonte