Capovolgi o inverti l'ordine in Notepad ++


95

Voglio invertire gli ordini di linea di un documento con oltre 500 righe. Le linee non sono solo numeri, alcune includono testo e altri caratteri. È un mix.

Esempio:

Linea 1
Linea 2
Linea 3
Linea 4
Linea 5
Linea 6

Che poi voglio capovolgere, invertire e assomigliare dal basso verso l'alto:

Linea 6
Linea 5
Linea 4
Linea 3
Linea 2
Linea 1

Vuoi dire che vuoi che i numeri sul margine sinistro contino, o vuoi che il contenuto reale del tuo file sia invertito?
Maxpm

2
@Maxpm Contenuto effettivo del file da invertire.
Danpe,


Risposte:


102

Soluzione che non richiede altro software ad eccezione del plug-in TextFX normalmente incluso:

  1. Modifica> Seleziona tutto
  2. TextFX> Strumenti TextFX> Inserisci numeri di riga
  3. Se TextFX> Strumenti TextFX> + Ordina crescente è selezionato, deselezionalo
  4. TextFX> Strumenti TextFX> Ordina le righe con distinzione tra maiuscole e minuscole (nella colonna)
  5. TextFX> Strumenti TextFX> Elimina numeri di riga o prima parola

6
Se TextFX non viene trovato, vai su: Plugin »Gestione Plugin» Mostra Gestione Plugin »Seleziona" Caratteri TextFX ", Fai clic su Installa. Vedi qui: textfx.no-ip.com/textfx
Panchal il

-questo ha funzionato è stato "
Distinzione tra

@ Theta30: indovina il testo dell'interfaccia utente è cambiato dalla versione che ho usato.
Gnubie,

2
Per coloro che usano Eclipse vedi questa risposta per farlo ancora più semplicemente. (Conosco la domanda originale per Notepad ++ ma ho pensato che valesse la pena aggiungerlo per quelli che si imbattono in questo).
Steve Chambers,

2
TextFX non è un plug-in supportato nella versione a 64 bit.
Rhyous,

34

Questo può essere fatto anche in Notepad ++ senza il plugin TextFX. Segue la stessa strategia di quella della risposta accettata, ma utilizzando la funzionalità nativa. È fatto come segue:

  1. Modifica> Seleziona tutto
  2. Modifica> Editor colonna ...> Seleziona il numero da inserire> Imposta il numero iniziale su 1> Imposta aumento di su 1> Controlla zeri iniziali> Fai clic su OK

inserisci qui la descrizione dell'immagine

  1. Modifica> Operazioni linea> Ordina linee in ordine decrescente Modifica: un recente aggiornamento ha aggiunto ulteriori opzioni di ordinamento, l'opzione: Ordina linee in ordine discendente Lexicographically sembra fare il lavoro.

inserisci qui la descrizione dell'immagine

  1. Rimuovere i numeri di riga tramite la selezione di una casella (Alt + trascinamento con il tasto sinistro del mouse o Alt + Maiusc) o Cerca / Sostituisci

inserisci qui la descrizione dell'immagine


1
Funziona, ma ci sono due cose da tenere a mente: 1- Inserisce un numero aggiuntivo per l'ultima riga (vuota), quindi è necessario eliminarlo prima dell'ordinamento. 2- se la tua lista inizia con i numeri, potresti confondere i numeri inseriti con i tuoi numeri, perché non inserisce uno spazio dopo i numeri inseriti, quindi dovresti fare attenzione in questo caso.
Francisco Alvarado,

Impossibile riprodurre il passaggio 3. La nuova versione ha modificato il testo e qualsiasi opzione non funziona per me
Ooker

1
@TrevorYoung - Ti stai lamentando per un'immagine che è stata aggiunta da un altro utente . Ho appena corretto la formattazione della risposta e approvato la modifica. Se trovi inutile l'immagine, quindi rimuovila, sei l'autore della risposta. L'aggiunta dell'immagine è una modifica accettabile (vale a dire che la risposta è migliore con l'immagine che senza di essa)
Ramhound,

1
@Ramhound Le mie scuse. Guardando la cronologia delle modifiche, ho pensato che tu avessi aggiunto l'immagine, ma non è così. Non ho alcun problema con l'immagine che è lì, ma stavo cercando di dare un suggerimento alla persona che ha aggiunto che potrebbe essere meglio se invece il suggerimento dato fosse fatto.
Trevor Young,

1
Questo è strano ma funziona ...
kayleeFrye_onDeck

6

Bene, poiché stiamo fornendo esempi di codice, se sei su Windows 7 o hai installato PowerShell su un'altra versione di Windows, allora:

$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 per una risposta non codificante, scarica gVim , apri il file e digita:

:g/^/m0

Sono su Windows 7, dove posso incollare quel codice? questo è davvero interessante.
Danpe,

2
Apri il menu Start e digita Powershell. Fare doppio clic su "Windows Powershell". Si aprirà un prompt dei comandi. Eseguilo lì. C'è anche e IDE (anche se lo chiamano ISE - Integrated Script Editor), ma faccio la maggior parte del mio lavoro al prompt dei comandi e utilizzo GVim per la modifica degli script.
EBGreen

Come può essere integrato in Notepad ++? (Il titolo della domanda è "Capovolgi o inverti l'ordine nel Blocco note ++" .)
Peter Mortensen,

Ecco perché è un commento piuttosto che una risposta. È un modo alternativo per realizzare ciò che pensavo volesse l'utente piuttosto che una risposta alla domanda letterale.
EBGreen

5

Se sei a tuo agio nel compilare C ++, questo dovrebbe fare al caso tuo. Fondamentalmente, ho messo ogni riga del file in un vettore e l'output in un nuovo file utilizzando un iteratore 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;
}

Se nel file di output mancano le interruzioni di riga tra le righe, cambia outFile << *rIt;in outFile << *rIt << "\r\n";modo da aggiungere un'interruzione di riga (ometti \rse sei su Unix / Linux).

Disclaimer: non ho testato questo codice (l'ho scritto molto velocemente in Blocco note), ma sembra fattibile.


Grazie amico :) ma ho già usato il mio codice, ma può essere molto utile per gli altri. A proposito forse scriverò un plugin Notepad ++ per quello. quale lingua usano nei plugin notepad ++?
Danpe,

La maggior parte dei plugin di Notepad ++ di @Danpe è scritta in C ++, ma tecnicamente può essere estesa a qualsiasi altro linguaggio in grado di compilare un .DLL (e con i collegamenti API appropriati).
Breakthrough

Quindi penso che tu abbia appena creato un plugin :)
Danpe,

Come può essere integrato in Notepad ++? (Il titolo della domanda è "Capovolgi o inverti l'ordine nel Blocco note ++" .)
Peter Mortensen



1

Ecco il codice C # .NET per esso che ho appena scritto :)

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

Perché hai bisogno della unsafeparola chiave Mainqui?
Breakthrough

@Break Non so come sia arrivato lì: O lol riparato.
Danpe,

1
Come possiamo integrarlo in notepad ++?
Teoman Shipahi,

Come può essere integrato in Notepad ++? (Il titolo della domanda è "Capovolgi o inverti l'ordine nel Blocco note ++" .)
Peter Mortensen,

0

Ecco un modo non codificante:

  1. Scarica / Installa la versione di prova gratuita di TextPad
  2. Apri un programma per fogli di calcolo (ad es. Excel) e crea i numeri da 1000 a 1500 nella colonna "A" inserendo un "1000" nella cella A1, quindi inserendo A1 + 1 nella cella A2, quindi copiandolo in A500.
  3. Apri il tuo file di testo in TextPad
  4. Passa alla "modalità blocco" in TextPad
  5. Incolla la colonna A dal foglio di calcolo in TextPad (tutto finirà sul margine sinistro a causa della modalità blocco)
  6. Usa la funzione di ordinamento di TextPad, in ordine decrescente
  7. Utilizzare la modalità di blocco TextPad delete per eliminare i numeri

2
bene, se hai intenzione di usare Excel comunque, copia il contenuto del file da qualsiasi editor, incolla su Excel. Riempi la serie della colonna successiva con una serie di numeri. Seleziona entrambe le colonne e ordina in ordine decrescente sulla colonna numerica. Copia la colonna di testo e incollala nuovamente nell'editor.
EBGreen

@EBGreen, hai ragione. Sono un idiota. Devi solo stare attento perché Excel cambierà i tuoi dati (pasticcia con numeri, date e simili).
Dale,

Come può essere integrato in Notepad ++? (Il titolo della domanda è "Capovolgi o inverti l'ordine nel Blocco note ++" .)
Peter Mortensen,

@PeterMortensen, La domanda originale diceva "Se non è disponibile in Notepad ++, anche altri software dovrebbero essere buoni :)"
Dale

0

Se desideri automatizzare questo su Notepad ++ con un solo clic:

  1. Ottieni questo plug-in di script Python
  2. aggiungi il codice qui sotto e salvalo come file .py nella cartella degli script Python (per conoscere la posizione di questa cartella, fai clic sulla scheda plug-in, quindi su Script Python e nuovi script).

Tutta la gloria a Reck Dickhard !

Per aggiungerlo nel menu di scelta rapida:

Se si fa clic sulla scheda Plugin → Script PythonConfigurazione , è possibile assegnare lo script a un'icona della barra degli strumenti o al menu Python Script stesso. (Se assegni uno script al menu, allora apparirà immediatamente, ma non sarai in grado di assegnargli un collegamento fino al prossimo avvio di Notepad ++. Se lo assegni a un'icona della barra degli strumenti, allora apparirà solo sul prossimo avvio di Notepad ++.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.