Voltear o invertir orden de línea en Notepad ++


95

Quiero voltear pedidos de línea de un documento con más de 500 líneas. Las líneas no son solo números, algunos incluyen texto y otros caracteres. Es una mezcla

Ejemplo:

Línea 1
Línea 2
Línea 3
Línea 4
Línea 5
Linea 6

Lo que luego quiero voltear, invertir y lucir así de abajo hacia arriba:

Linea 6
Línea 5
Línea 4
Línea 3
Línea 2
Línea 1

¿Significa que desea que los números en el margen izquierdo cuenten hacia atrás o que se invierta el contenido real de su archivo?
Maxpm

2
@Maxpm Contenido real del archivo a revertir.
Danpe


Respuestas:


102

Solución que no requiere otro software excepto el complemento TextFX normalmente incluido:

  1. Editar> Seleccionar todo
  2. TextFX> Herramientas TextFX> Insertar números de línea
  3. Si TextFX> Herramientas TextFX> + Ordenar ascendente está marcado, desmarque
  4. TextFX> Herramientas TextFX> Ordenar líneas entre mayúsculas y minúsculas (en la columna)
  5. TextFX> Herramientas TextFX> Eliminar números de línea o primera palabra

66
Si no se encuentra TextFX, vaya a: Complementos »Administrador de complementos» Mostrar Administrador de complementos »Marque" Caracteres TextFX ", haga clic en Instalar. Ver aquí: textfx.no-ip.com/textfx
Kalpesh Panchal

-lo que funcionó fue "Ordenar líneas entre mayúsculas y minúsculas" en la parte 4)
Theta30

@ Theta30: Supongo que el texto de la interfaz de usuario ha cambiado desde la versión que utilicé.
Gnubie

2
Para aquellos que usan Eclipse, vea esta respuesta para hacerlo aún más simple. (Sé que la pregunta original fue para Notepad ++, pero pensé que valdría la pena agregarla para aquellos que se topan con esto).
Steve Chambers

2
TextFX no es un complemento compatible en la versión de 64 bits.
Rhyous

34

Esto también se puede hacer en Notepad ++ sin el complemento TextFX. Sigue la misma estrategia que la de la respuesta aceptada, pero utilizando la funcionalidad nativa. Se hace de la siguiente manera:

  1. Editar> Seleccionar todo
  2. Editar> Editor de columnas ...> Seleccionar número para insertar> Establecer el número inicial en 1> Establecer aumentar en 1> Comprobar ceros iniciales> Hacer clic en Aceptar

ingrese la descripción de la imagen aquí

  1. Editar> Operaciones de línea> Ordenar líneas en orden descendente Editar: una actualización reciente agregó opciones de ordenación adicionales, la opción: Ordenar líneas descendentemente lexicográficamente parece hacer el trabajo.

ingrese la descripción de la imagen aquí

  1. Elimine los números de línea a través de cualquiera de los cuadros de selección (Alt + clic izquierdo Arrastrar o Alt + Mayús Seleccionar) o Buscar / reemplazar

ingrese la descripción de la imagen aquí


1
Funciona, pero hay dos cosas a tener en cuenta: 1- Inserta un número adicional para la última fila (vacía), por lo que debe eliminarlo antes de ordenar. 2- si su lista comienza con números, podría confundir los números insertados con sus números, ya que no inserta un espacio después de los números insertados, por lo que debe tener cuidado en este caso.
Francisco Alvarado

No se puede reproducir el paso 3. La nueva versión ha cambiado la redacción , y cualquier opción no me funciona
Ooker

1
@TrevorYoung: se queja de una imagen que fue agregada por otro usuario . Simplemente arreglé el formato de la respuesta y aprobé la edición. Si encuentra que la imagen no es útil, luego quítela, usted es el autor de la respuesta. La adición de la imagen es una edición aceptable (es decir, la respuesta es mejor con la imagen que sin ella)
Ramhound

1
@Ramhound Mis disculpas. Mirando el historial de edición, pensé que habías agregado la imagen, pero ese no es el caso. No tengo ningún problema con que la imagen esté allí, pero estaba tratando de darle una sugerencia a la persona que agregó que podría ser mejor si se hiciera la sugerencia dada.
Trevor Young

1
Esto es raro pero funciona ...
kayleeFrye_onDeck

6

Bueno, dado que estamos dando ejemplos de código, si está en Windows 7 o ha instalado PowerShell en otra versión de Windows, entonces:

$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

O para una respuesta que no sea de codificación, descargue gVim , abra el archivo y escriba:

:g/^/m0

Estoy en Windows 7, ¿dónde pego ese código? Esto es realmente interesante.
Danpe

2
Abra el menú de inicio y simplemente escriba Powershell. Haga doble clic en "Windows Powershell". Se abrirá un símbolo del sistema. Ejecútalo allí. También hay un IDE (aunque lo llaman ISE - Integrated Script Editor), pero hago la mayor parte de mi trabajo en el símbolo del sistema y uso GVim para la edición del script.
EBGreen

¿Cómo se puede integrar esto en Notepad ++? (El título de la pregunta es "Orden de línea invertida o invertida en Notepad ++" .)
Peter Mortensen

Por eso es un comentario en lugar de una respuesta. Es una forma alternativa de lograr lo que pensé que el usuario quería en lugar de una respuesta a la pregunta literal.
EBGreen

5

Si te sientes cómodo compilando C ++, esto debería ser suficiente. Básicamente, pongo cada línea del archivo en un vector y la envío a un nuevo archivo usando un iterador inverso.

#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 al archivo de salida le faltan saltos de línea entre las líneas, cambie el outFile << *rIt;para que outFile << *rIt << "\r\n";se agregue un salto de línea (omita el \rsi está en Unix / Linux).

Descargo de responsabilidad: no he probado este código (lo escribí muy rápido en el Bloc de notas), pero parece viable.


Gracias hombre :) pero ya usé mi código, pero eso puede ser muy útil para otros. Por cierto, tal vez escribiré un complemento Notepad ++ para eso. ¿Qué idioma utilizan en los complementos de Notepad ++?
Danpe

@Danpe, la mayoría de los complementos de Notepad ++ están escritos en C ++, pero técnicamente se pueden extender a cualquier otro lenguaje capaz de compilar un .DLL (y con los enlaces API adecuados).
Avance el

Así que creo que acabas de crear un complemento :)
Danpe

¿Cómo se puede integrar esto en Notepad ++? (El título de la pregunta es "Voltear o revertir el orden de las líneas en Notepad ++" .)
Peter Mortensen



1

Aquí está el código C # .NET para él que acabo de escribir :)

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 qué necesitas la unsafepalabra clave Mainaquí?
Avance el

@Break No sé cómo llegó allí: O lol arreglado.
Danpe

1
¿Cómo podemos integrar esto en Notepad ++?
Teoman shipahi

¿Cómo se puede integrar esto en Notepad ++? (El título de la pregunta es "Orden de línea invertida o invertida en Notepad ++" .)
Peter Mortensen

0

Aquí hay una forma sin codificación:

  1. Descargue / instale la prueba gratuita de TextPad
  2. Abra un programa de hoja de cálculo (es decir, Excel) y cree los números del 1000 al 1500 en la columna "A" colocando un "1000" en la celda A1, luego colocando A1 + 1 en la celda A2, luego cópielo en A500.
  3. Abra su archivo de texto en TextPad
  4. Cambiar a "modo de bloqueo" en TextPad
  5. Pegue la columna A de la hoja de cálculo en TextPad (todo terminará en el margen izquierdo debido al modo de bloqueo)
  6. Utilice la función de clasificación de TextPad, descendiendo
  7. Utilice el modo de bloqueo de TextPad para eliminar los números

2
bueno, si vas a usar Excel de todos modos, simplemente copia el contenido del archivo desde cualquier editor, pégalo para sobresalir. Llena la serie de la siguiente columna con una serie de números. Seleccione ambas columnas y ordene descendiendo en la columna numérica. Copie la columna de texto y péguela nuevamente en el editor.
EBGreen

@EBGreen, tienes razón. Soy un idiota. Solo debe tener cuidado porque Excel cambiará sus datos (desorden con números, fechas y demás).
Dale

¿Cómo se puede integrar esto en Notepad ++? (El título de la pregunta es "Orden de línea invertida o invertida en Notepad ++" .)
Peter Mortensen

@PeterMortensen, la pregunta original decía "Si no está disponible en Notepad ++, entonces otro software también sería bueno :)"
Dale

0

Si desea automatizar esto en Notepad ++ con un solo clic:

  1. Obtenga este complemento de script Python
  2. agregue el código a continuación y guárdelo como archivo .py en la carpeta de secuencia de comandos de Python (para conocer la ubicación de esta carpeta, haga clic en la pestaña de complementos, luego en Python Script y nuevas secuencias de comandos).

¡Toda la gloria para Reck Dickhard !

Para agregarlo en el menú contextual:

Si hace clic en la pestaña de complementos → Python ScriptConfiguración , puede asignar el script a un icono de la barra de herramientas o al menú de Python Script. (Si asigna un script al menú, aparecerá inmediatamente, pero no podrá asignarle un acceso directo hasta la próxima vez que se inicie Notepad ++. Si lo asigna a un icono de barra de herramientas, solo aparecerá en el próximo inicio de Notepad ++.)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.