123 votes

Retourner ou inverser l'ordre des lignes dans Notepad++

Je veux inverser l'ordre des lignes d'un document de plus de 500 lignes. Les lignes ne sont pas seulement des chiffres, certaines comprennent du texte et d'autres caractères. C'est un mélange.

Ejemplo:

Line 1
Line 2
Line 3
Line 4
Line 5
Line 6

Que je veux ensuite retourner, inverser et ressembler à ça de bas en haut :

Line 6
Line 5
Line 4
Line 3
Line 2
Line 1

116voto

Gnubie Points 2737

Solution ne nécessitant pas d'autre logiciel que le plugin TextFX normalement inclus :

  1. Editer > Sélectionner tout
  2. TextFX > Outils TextFX > Insérer des numéros de ligne
  3. Si la case TextFX > Outils TextFX > +Tri croissant est cochée, décochez-la.
  4. TextFX > Outils TextFX > Trier les lignes en respectant la casse (à la colonne)
  5. TextFX > Outils TextFX > Supprimer les numéros de ligne ou le premier mot

55voto

Trevor Young Points 651

Edit : Les versions plus récentes de Notepad++ (v8.0+) supportent maintenant directement l'inversion de l'ordre des lignes. Il suffit d'aller sur :

Editer -> Opérations de ligne -> Inverser l'ordre de la ligne

Notez qu'elle inversera l'ordre des lignes sélectionnées, ou inversera toutes les lignes du fichier si rien n'est sélectionné. Pour les anciennes versions de Notepad++, la stratégie précédente peut encore être utilisée.


Cela peut également être fait dans Notepad++ sans le plugin TextFX. Elle suit la même stratégie que celle de la réponse acceptée, mais en utilisant la fonctionnalité native. Elle s'effectue comme suit :

  1. Editer > Sélectionner tout
  2. Édition > Éditeur de colonnes... > Sélectionner le nombre à insérer > Définir le nombre initial à 1 > Définir l'augmentation à 1 > Vérifier les zéros de tête > Cliquer sur OK

enter image description here

  1. Edition > Opérations sur les lignes > Trier les lignes par ordre décroissant Editar: Une mise à jour récente a ajouté des options de tri supplémentaires, l'option : Trier les lignes par ordre lexicographique décroissant semble faire l'affaire.

enter image description here

  1. Supprimez les numéros de ligne en sélectionnant la boîte (Alt+Clic gauche ou Alt+Majuscule) ou en recherchant/remplaçant.

enter image description here

9voto

djeidot Points 2143

Puisque nous donnons des exemples de code, si vous êtes sous Windows 7 ou si vous avez installé PowerShell sur une autre version de Windows, alors.. :

$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 pour une réponse non codée, téléchargez gVim ouvrez le fichier et tapez :

:g/^/m0

5voto

Breakthrough Points 33693

Si vous êtes à l'aise avec la compilation du C++, cela devrait faire l'affaire. En gros, je place chaque ligne du fichier dans un vecteur, et je l'envoie dans un nouveau fichier en utilisant un itérateur inverse.

#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;
}

Si le fichier de sortie ne comporte pas de sauts de ligne entre les lignes, modifiez l'option outFile << *rIt; à être outFile << *rIt << "\r\n"; de sorte qu'un saut de ligne est ajouté (omettre l'option \r si vous êtes sous Unix/Linux).

Avertissement : Je n'ai pas testé ce code (je l'ai écrit rapidement dans Notepad), mais il semble viable.

1voto

David Reis Points 1631

Voici le code C# .NET que je viens d'écrire :)

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);
        }
    }
}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X