Je souhaite inverser les commandes d'un document comportant plus de 500 lignes. Les lignes ne sont pas que des chiffres, certaines incluent du texte et d’autres caractères. C'est un mélange.
Exemple:
Ligne 1 Ligne 2 Ligne 3 Ligne 4 Ligne 5 Ligne 6
Ce que je veux ensuite retourner, inverser et ressembler à ceci de bas en haut:
Ligne 6 Ligne 5 Ligne 4 Ligne 3 Ligne 2 Ligne 1
Solution ne nécessitant pas d'autre logiciel que le plugin TextFX normalement inclus:
Cela peut aussi être fait dans Notepad ++ sans le plugin TextFX. Il suit la même stratégie que celle de la réponse acceptée, mais en utilisant une fonctionnalité native. C'est fait comme suit:
Eh bien, puisque nous donnons des exemples de code, si vous utilisez Windows 7 ou que 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 codante, téléchargez GVim , ouvrez le fichier et tapez:
:g/^/m0
Si vous êtes à l'aise pour compiler C++, cela devrait faire l'affaire. Fondamentalement, je mets chaque ligne du fichier dans un vecteur et les exporte dans un nouveau fichier en utilisant un itérateur inversé.
#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 manque des sauts de ligne entre les lignes, modifiez le outFile << *rIt;
en outFile << *rIt << "\r\n";
pour l'ajouter à un saut de ligne (omettez le \r
si vous utilisez Unix/Linux).
Disclaimer: Je n'ai pas testé ce code (je l'ai écrit très vite dans Notepad), mais il semble viable.
Utiliser un outil disponible en ligne qui le fait en un clic
Vous pouvez le faire en ligne sur le site Web http://textmechanic.co/Sort-Text-Lines.html
voici un code C # .NET pour cela, 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);
}
}
}
Voici un moyen non-codant:
Si vous souhaitez automatiser cela avec Notepad ++ en un seul clic:
Toute la gloire à Reck Dickhard !
edit: pour l'ajouter dans le menu contextuel Si vous cliquez sur l'onglet plugins/Script Python/Configuration, vous pouvez affecter le script à une icône de barre d'outils ou au menu Script Python lui-même. (Si vous affectez un script au menu, il apparaîtra immédiatement, mais vous ne pourrez pas lui attribuer de raccourci avant le prochain démarrage de Notepad ++. Si vous l'assignez à une icône de la barre d'outils, il n'apparaîtra que sur le prochain démarrage de Notepad ++.)