Odwróć lub odwróć kolejność linii w Notepad ++

95

Chcę zmienić kolejność wierszy dokumentu zawierającego ponad 500 wierszy. Linie nie są tylko cyframi, niektóre zawierają tekst i inne znaki. To mieszanka.

Przykład:

Linia 1
Linia 2
Linia 3
Linia 4
Wiersz 5
Linia 6

Które następnie chcę przewracać, odwracać i wyglądać tak od dołu do góry:

Linia 6
Wiersz 5
Linia 4
Linia 3
Linia 2
Linia 1
Danpe
źródło
To znaczy, że chcesz odliczać liczby na lewym marginesie, czy też chcesz odwrócić rzeczywistą zawartość pliku?
Maxpm
2
@Maxpm Rzeczywista zawartość pliku do odwrócenia.
Danpe,
możliwy duplikat Odwrotnej kolejności linii w Notepad ++
Franck Dernoncourt
Powiązane (ale nie duplikaty): Jak odwrócić plik tekstowy w systemie Windows
Peter Mortensen

Odpowiedzi:

102

Rozwiązanie niewymagające innego oprogramowania oprócz normalnie dołączonej wtyczki TextFX:

  1. Edycja> Wybierz wszystko
  2. TextFX> Narzędzia TextFX> Wstaw numery linii
  3. Jeśli zaznaczone jest TextFX> Narzędzia TextFX> + Sortuj rosnąco, usuń zaznaczenie
  4. TextFX> Narzędzia TextFX> Sortuj linie z rozróżnianiem wielkości liter (w kolumnie)
  5. TextFX> Narzędzia TextFX> Usuń numery linii lub pierwsze słowo
Gnubie
źródło
6
Jeśli TextFX nie zostanie znaleziony, przejdź do: Wtyczki »Menedżer wtyczek» Pokaż Menedżera wtyczek »Zaznacz„ Znaki TextFX ”, kliknij Zainstaluj. Zobacz tutaj: textfx.no-ip.com/textfx
Kalpesh Panchal
-w tym działało: „Sortuj linie bez rozróżniania wielkości liter” w części 4)
Theta30
@ Theta30: Zgadnij, że tekst interfejsu użytkownika zmienił się od wersji, której użyłem.
Gnubie,
2
Dla osób korzystających z Eclipse zobacz tę odpowiedź, aby zrobić to jeszcze prościej. (Wiem, że pierwotne pytanie zadane dla Notepad ++, ale pomyślałem, że warto je dodać dla tych, którzy natkną się na to).
Steve Chambers,
2
TextFX nie jest obsługiwaną wtyczką w wersji 64-bitowej.
Rhyous
34

Można to również zrobić w Notepad ++ bez wtyczki TextFX. Postępuje zgodnie z tą samą strategią, co przyjęta odpowiedź, ale przy użyciu natywnej funkcjonalności. Odbywa się to w następujący sposób:

  1. Edycja> Wybierz wszystko
  2. Edycja> Edytor kolumn ...> Wybierz numer do wstawienia> Ustaw liczbę początkową na 1> Ustaw zwiększenie o 1> Sprawdź wiodące zera> Kliknij OK

wprowadź opis zdjęcia tutaj

  1. Edycja> Operacje na liniach> Sortuj linie w porządku malejącym Edycja: W ostatniej aktualizacji dodano dodatkowe opcje sortowania, opcja: Sortuj linie leksykograficznie malejąco wydaje się wykonywać zadanie.

wprowadź opis zdjęcia tutaj

  1. Usuń numery linii poprzez zaznaczenie pola (Alt + lewy przycisk myszy Przeciągnij lub Alt + Shift Wybierz) lub Wyszukaj / Zamień

wprowadź opis zdjęcia tutaj

Trevor Young
źródło
1
Działa, ale należy wziąć pod uwagę dwie rzeczy: 1- Wstawia dodatkową liczbę dla ostatniego (pustego) wiersza, więc musisz ją usunąć przed sortowaniem. 2 - jeśli twoja lista zaczyna się od cyfr, możesz zepsuć wstawione cyfry swoimi liczbami, ponieważ nie wstawia spacji po wstawionych liczbach, więc w takim przypadku należy zachować ostrożność.
Francisco Alvarado,
Nie można odtworzyć kroku 3. Nowa wersja zmieniła sformułowanie , a jakakolwiek opcja nie działa dla mnie
Ooker
1
@ TrevorYoung - narzekasz na zdjęcie dodane przez innego użytkownika . Właśnie poprawiłem formatowanie odpowiedzi i zatwierdziłem edycję. Jeśli obraz okaże się nieprzydatny, a następnie usuń go, jesteś autorem odpowiedzi. Dodanie obrazu jest akceptowalną edycją (tzn. Odpowiedź jest lepsza dla obrazu niż bez niego)
Ramhound,
1
@Ramhound Moje przeprosiny. Patrząc na historię edycji, pomyślałem, że dodałeś obraz, ale tak nie jest. Nie mam problemu z obecnością obrazu, ale starałem się zasugerować osobie, która dodała, że ​​lepiej byłoby, gdyby podana sugestia została wykonana.
Trevor Young,
1
To dziwne, ale działa ...
kayleeFrye_onDeck
6

Cóż, ponieważ podajemy przykłady kodu, jeśli korzystasz z systemu Windows 7 lub zainstalowałeś PowerShell w innej wersji systemu Windows, to:

$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

Lub w celu uzyskania niekodującej odpowiedzi pobierz gVim , otwórz plik i wpisz:

:g/^/m0
EBGreen
źródło
Korzystam z systemu Windows 7, gdzie wkleić ten kod? to jest naprawdę interesujące.
Danpe,
2
Otwórz menu Start i po prostu wpisz Powershell. Kliknij dwukrotnie „Windows Powershell”. Otworzy się wiersz polecenia. Uruchom tam. Jest też i IDE (choć nazywają to ISE - Integrated Script Editor), ale większość pracy wykonuję w wierszu poleceń i używam GVima do edycji skryptów.
EBGreen,
Jak można to zintegrować z Notepad ++? (Tytuł pytania brzmi: „Odwróć lub odwróć kolejność wierszy w Notepad ++” .)
Peter Mortensen
Dlatego jest to komentarz, a nie odpowiedź. Jest to alternatywny sposób na osiągnięcie tego, co moim zdaniem chciał użytkownik, zamiast odpowiedzi na dosłowne pytanie.
EBGreen
5

Jeśli nie masz problemów ze skompilowaniem C ++, to powinno wystarczyć. Zasadniczo umieszczam każdy wiersz pliku w wektorze i wysyłam go do nowego pliku za pomocą iteratora odwrotnego.

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

Jeśli w pliku wyjściowym brakuje podziałów między wierszami, zmień wartość outFile << *rIt;na outFile << *rIt << "\r\n";tak, aby dodać podział wiersza (pomiń, \rjeśli korzystasz z systemu Unix / Linux).

Oświadczenie: Nie testowałem tego kodu (napisałem go naprawdę szybko w Notatniku), ale wygląda on na realny.

Przełom
źródło
Dzięki stary :) ale już użyłem mojego kodu, ale może to być bardzo pomocne dla innych. A może nawet napisam do tego wtyczkę Notepad ++. jakiego języka używają w wtyczkach notatnika ++?
Danpe,
@Danpe większość wtyczek Notepad ++ jest napisanych w C ++, ale technicznie można je rozszerzyć na dowolny inny język zdolny do kompilacji .DLL (i z odpowiednimi powiązaniami API).
Przełom
Więc myślę, że właśnie stworzyłeś wtyczkę :)
Danpe
Jak można to zintegrować z Notepad ++? (Tytuł pytania brzmi: „Odwróć lub odwróć kolejność wierszy w Notepad ++” .)
Peter Mortensen
4

Skorzystaj z narzędzia online dostępnego za jednym kliknięciem

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

użytkownik674167
źródło
Jak można to zintegrować z Notepad ++? (Tytuł pytania brzmi: „Odwróć lub odwróć kolejność wierszy w Notepad ++” .)
Peter Mortensen
2

Możesz to zrobić online na stronie http://textmechanic.co/Sort-Text-Lines.html

Franck Dernoncourt
źródło
1
Strona jest jednak zepsuta, wygląda na to, że została przeniesiona do textmechanic.co/Sort-Text-Lines.html
George Chalhoub
1
@georgechalhoub Dzięki, zaktualizowałem odpowiedź.
Franck Dernoncourt
Jak można to zintegrować z Notepad ++? (Tytuł pytania brzmi: „Odwróć lub odwróć kolejność wierszy w Notepad ++” .)
Peter Mortensen
1

Oto kod C # .NET, który właśnie napisałem :)

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
źródło
Dlaczego potrzebujesz tutaj unsafesłowa kluczowego Main?
Przełom
@Break Nie wiem, jak to się tam dostało: O lol naprawione.
Danpe,
1
Jak możemy to zintegrować z notatnikiem ++?
Teoman shipahi
Jak można to zintegrować z Notepad ++? (Tytuł pytania brzmi: „Odwróć lub odwróć kolejność wierszy w Notepad ++” .)
Peter Mortensen
0

Oto niekodujący sposób:

  1. Pobierz / zainstaluj bezpłatną wersję próbną TextPad
  2. Otwórz program arkusza kalkulacyjnego (tj. Excel) i utwórz liczby od 1000 do 1500 w kolumnie „A”, umieszczając „1000” w komórce A1, a następnie umieszczając A1 + 1 w komórce A2, a następnie skopiuj ją do A500.
  3. Otwórz plik tekstowy w TextPad
  4. Przejdź do „trybu blokowania” w TextPad
  5. Wklej kolumnę A z arkusza kalkulacyjnego do TextPada (wszystko skończy się na lewym marginesie z powodu trybu blokowania)
  6. Użyj funkcji sortowania TextPad, malejąco
  7. Użyj trybu blokowania TextPad, aby pozbyć się liczb
Dołek
źródło
2
cóż, jeśli i tak zamierzasz używać programu Excel, po prostu skopiuj zawartość pliku z dowolnego edytora, wklej do programu Excel. Wypełnij serię następną kolumną serią liczb. Wybierz obie kolumny i posortuj malejąco według kolumny liczbowej. Skopiuj kolumnę tekstową i wklej z powrotem do edytora.
EBGreen,
@EBGreen, masz rację. Jestem idiotą. Musisz tylko zachować ostrożność, ponieważ program Excel zmieni dane (messe z liczbami, datami itp.).
Dale
Jak można to zintegrować z Notepad ++? (Tytuł pytania brzmi: „Odwróć lub odwróć kolejność wierszy w Notepad ++” .)
Peter Mortensen
@PeterMortensen, w pierwotnym pytaniu było napisane: „Jeśli nie jest ono dostępne w Notepad ++, wówczas inne oprogramowanie też mogłoby być dobre :)”
Dale
0

Jeśli chcesz zautomatyzować to w Notepad ++ za pomocą jednego kliknięcia:

  1. Pobierz wtyczkę skryptu Python
  2. dodaj poniższy kod i zapisz go jako plik .py w folderze skryptów Pythona (aby poznać lokalizację tego folderu, kliknij kartę wtyczek, a następnie Skrypt Python i nowe skrypty).

Cała chwała Reckowi Dickhardowi !

Aby dodać go w menu kontekstowym:

Jeśli klikniesz kartę wtyczek → Python ScriptKonfiguracja , możesz przypisać skrypt albo do ikony paska narzędzi, albo do samego menu Python Script. (Jeśli przypiszesz skrypt do menu, pojawi się on natychmiast, ale nie będziesz mógł przypisać skrótu do następnego uruchomienia Notepad ++. Jeśli przypiszesz go do ikony paska narzędzi, pojawi się on tylko w następny start Notepad ++.)

JinSnow
źródło