Перевернутый или обратный порядок строк в Notepad ++

95

Я хочу перевернуть порядки строк документа с 500+ строками. Строки не просто цифры, некоторые включают в себя текст и другие символы. Это смесь.

Пример:

Линия 1
Линия 2
Линия 3
Строка 4
Строка 5
Строка 6

Что я тогда хочу перевернуть, повернуть вспять и выглядеть так снизу вверх:

Строка 6
Строка 5
Строка 4
Линия 3
Линия 2
Линия 1
Danpe
источник
Это означает, что вы хотите, чтобы числа на левом поле имели обратный отсчет, или вы хотите, чтобы реальный контент вашего файла был перевернут?
Макс.
2
@Maxpm Фактическое содержимое файла, подлежащего обращению.
Данпе
возможный дубликат обратного порядка строк в Notepad ++
Франк Дернонкур
Связанный (но не повторяющийся): Как перевернуть текстовый файл в Windows
Питер Мортенсен

Ответы:

102

Решение, не требующее другого программного обеспечения, кроме обычно включаемого плагина TextFX:

  1. Изменить> Выбрать все
  2. TextFX> Инструменты TextFX> Вставить номера строк
  3. Если установлен флажок TextFX> Инструменты TextFX> + Сортировка по возрастанию, снимите флажок
  4. TextFX> Инструменты TextFX> Сортировать строки с учетом регистра (в столбце)
  5. TextFX> Инструменты TextFX> Удалить номера строк или первое слово
Gnubie
источник
6
Если TextFX не найден, перейдите к: Плагины »Диспетчер плагинов» Показать диспетчер плагинов »Проверьте« Символы TextFX », нажмите« Установить ». Смотрите здесь: textfx.no-ip.com/textfx
Kalpesh
-что работало так: «Сортировка строк без
учета
@ Theta30: думаю, текст интерфейса изменился с той версии, которую я использовал.
Gnubie
2
Для тех, кто использует Eclipse, посмотрите этот ответ, чтобы сделать это еще проще. (Я знаю оригинальный вопрос, заданный для Notepad ++, но подумал, что это стоит добавить тем, кто наткнулся на это).
Стив Чемберс
2
TextFX не поддерживается в 64-битной версии.
Rhyous
34

Это также можно сделать в Notepad ++ без плагина TextFX. Он следует той же стратегии, что и принятый ответ, но с использованием нативной функциональности. Это делается следующим образом:

  1. Изменить> Выбрать все
  2. Редактировать> Редактор столбцов ...> Выбрать номер для вставки> Установить начальный номер на 1> Установить увеличение на 1> Проверить начальные нули> Нажмите OK

введите описание изображения здесь

  1. «Правка»> «Операции со строками»> «Сортировка линий в порядке убывания». « Правка». В недавнем обновлении добавлены дополнительные параметры сортировки. Опция « Лексикографически сортировать линии», кажется, выполняет свою работу.

введите описание изображения здесь

  1. Удалите номера строк с помощью выбора поля (Alt + левое перетаскивание или Alt + Shift Select) или поиска / замены

введите описание изображения здесь

Тревор Янг
источник
1
Это работает, но есть две вещи, которые нужно иметь в виду: 1 - он вставляет дополнительный номер для последней (пустой) строки, поэтому вы должны удалить его перед сортировкой. 2 - если ваш список начинается с цифр, вы можете связать вставленные числа с вашими номерами, потому что после вставленных цифр он не вставляет пробел, поэтому вам следует быть осторожным в этом случае.
Франсиско Альварадо
Невозможно воспроизвести шаг 3. Новая версия изменила формулировку , и любой вариант не работает для меня
Ooker
1
@TrevorYoung - вы жалуетесь на изображение, которое было добавлено другим пользователем . Я только исправил форматирование ответа и одобрил редактирование. Если вы нашли изображение бесполезным, то удалите его, вы являетесь автором ответа. Добавление изображения является приемлемым редактированием (то есть ответ лучше с изображением, чем без него)
Ramhound
1
@Ramhound Мои извинения. Глядя на историю редактирования, я подумал, что вы добавили изображение, но это не так. У меня нет проблем с изображением, но я пытался дать предложение человеку, который добавил, что было бы лучше, если бы это предложение было сделано вместо этого.
Тревор Янг
1
Это странно, но это работает ...
kayleeFrye_onDeck
6

Итак, поскольку мы даем примеры кода, если вы работаете в Windows 7 или установили PowerShell в другой версии Windows, то:

$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

Или для ответа без кода загрузите gVim , откройте файл и введите:

:g/^/m0
EBGreen
источник
Я на Windows 7, где я могу вставить этот код? это действительно интересно.
Данпе
2
Откройте меню «Пуск» и просто введите Powershell. Дважды щелкните «Windows Powershell». Откроется командная строка. Запустите его там. Существует также и IDE (хотя они называют его ISE - Integrated Script Editor), но я делаю большую часть своей работы в командной строке и использую GVim для редактирования скриптов.
EBGreen
Как это можно интегрировать в Notepad ++? (Заголовок вопроса: «Перевернутый или обратный порядок строк в Notepad ++» .)
Питер Мортенсен
Вот почему это комментарий, а не ответ. Это альтернативный способ выполнить то, что я думал, что пользователь хотел, а не ответ на буквальный вопрос.
EBGreen
5

Если вам удобно компилировать C ++, это должно сработать. По сути, я помещаю каждую строку файла в вектор и выводю его в новый файл с помощью обратного итератора.

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

Если в выходном файле отсутствуют разрывы строк между строками, измените их outFile << *rIt;на outFile << *rIt << "\r\n";так, чтобы был добавлен разрыв строк (пропустите, \rесли вы работаете в Unix / Linux).

Отказ от ответственности: я не тестировал этот код (я написал его очень быстро в блокноте), но он выглядит жизнеспособным.

Прорвать
источник
Спасибо, человек :), но я уже использовал свой код, но это может быть очень полезно для других. Кстати, я напишу для этого плагин Notepad ++. какой язык они используют в плагинах notepad ++?
Данпе
@Danpe большинство плагинов Notepad ++ написаны на C ++, но технически могут быть расширены на любой другой язык, способный компилировать .DLL (и с соответствующими привязками API).
Прорыв
Так что я думаю, что вы только что создали плагин :)
Danpe
Как это можно интегрировать в Notepad ++? (Название вопроса - «Переворот или обратный порядок строк в Блокноте ++» .)
Питер Мортенсен
4

Используйте онлайн доступный инструмент, который делает это в один клик

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

user674167
источник
Как это можно интегрировать в Notepad ++? (Заголовок вопроса: «Перевернутый или обратный порядок строк в Notepad ++» .)
Питер Мортенсен
2

Вы можете сделать это онлайн на сайте http://textmechanic.co/Sort-Text-Lines.html

Франк Дернонкур
источник
1
Сайт сломан, хотя, кажется, он перешел на textmechanic.co/Sort-Text-Lines.html
Джордж Чалхуб
1
@georgechalhoub Спасибо, я обновил ответ.
Франк Дернонкур
Как это можно интегрировать в Notepad ++? (Заголовок вопроса: «Перевернутый или обратный порядок строк в Notepad ++» .)
Питер Мортенсен
1

Вот код C # .NET, который я только что написал :)

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
источник
Зачем вам здесь unsafeключевое слово Main?
Прорыв
@ Черт возьми, я не знаю, как это получилось: О лол исправлено.
Данпе
1
Как мы можем интегрировать это в блокнот ++?
Теоман Шипахи
Как это можно интегрировать в Notepad ++? (Заголовок вопроса: «Перевернутый или обратный порядок строк в Notepad ++» .)
Питер Мортенсен
0

Вот не кодирующий способ:

  1. Скачать / установить бесплатную пробную версию TextPad
  2. Откройте программу для работы с электронными таблицами (т. Е. Excel) и создайте числа от 1000 до 1500 в столбце «А», поместив «1000» в ячейку А1, затем поместив А1 + 1 в ячейку А2, а затем скопируйте их в A500.
  3. Откройте ваш текстовый файл в TextPad
  4. Перейдите в «режим блокировки» в TextPad
  5. Вставьте столбец A из электронной таблицы в TextPad (все закончится на левом поле из-за режима блока)
  6. Использовать функцию сортировки TextPad по убыванию
  7. Используйте режим удаления блока TextPad, чтобы избавиться от цифр
Дол
источник
2
хорошо, если вы собираетесь использовать Excel в любом случае, просто скопируйте содержимое файла из любого редактора, вставьте в Excel. Заполните серию следующего столбца серией чисел. Выберите оба столбца и сортируйте по убыванию по числовому столбцу. Скопируйте текстовый столбец и вставьте обратно в редактор.
EBGreen
@EBGreen, ты прав. Я идиот. Вам просто нужно быть осторожным, потому что Excel изменит ваши данные (портит цифры, даты и тому подобное).
Дейл
Как это можно интегрировать в Notepad ++? (Заголовок вопроса: «Перевернутый или обратный порядок строк в Notepad ++» .)
Питер Мортенсен
@PeterMortensen, в первоначальном вопросе говорилось: «Если он не доступен в Notepad ++, то будет полезно и другое программное обеспечение :)»
Дейл,
0

Если вы хотите автоматизировать это на Notepad ++ одним щелчком мыши:

  1. Получить этот плагин скрипта Python
  2. добавьте приведенный ниже код и сохраните его как файл .py в папке скриптов Python (чтобы узнать расположение этой папки, откройте вкладку плагинов, затем Python Script и новые скрипты).

Вся слава Реку Дикхарду !

Чтобы добавить его в контекстное меню:

Если вы щелкнете по вкладке плагинов → Python ScriptConfiguration , вы можете назначить скрипт либо значку панели инструментов, либо самому меню Python Script. (Если вы назначите скрипт в меню, он появится сразу, но вы не сможете назначить ему ярлык до следующего запуска Notepad ++. Если вы назначите его значку на панели инструментов, он появится только на следующий запуск Notepad ++.)

JinSnow
источник