88

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

Пример:

Line 1
Line 2
Line 3
Line 4
Line 5
Line 6

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

Line 6
Line 5
Line 4
Line 3
Line 2
Line 1

9 ответов9

94

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

  1. Изменить> Выбрать все
  2. TextFX> Инструменты TextFX> Вставить номера строк
  3. Если установлен флажок TextFX> Инструменты TextFX> + Сортировка по возрастанию, снимите флажок
  4. TextFX> Инструменты TextFX> Сортировка строк с учетом регистра (в столбце)
  5. TextFX> Инструменты TextFX> Удалить номера строк или первое слово
25

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

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

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

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

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
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).

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

4

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

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

2

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

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

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

  1. Скачать / установить бесплатную пробную версию TextPad
  2. Откройте программу для работы с электронными таблицами (т. Е. Excel) и создайте числа от 1000 до 1500 в столбце "А", поместив "1000" в ячейку А1, затем поместив А1+1 в ячейку А2, а затем скопируйте их в A500.
  3. Откройте ваш текстовый файл в TextPad
  4. Перейдите в режим блокировки в TextPad
  5. Вставьте столбец A из электронной таблицы в TextPad (все закончится на левом поле из-за режима блока)
  6. Использовать функцию сортировки TextPad по убыванию
  7. Используйте режим удаления блока TextPad, чтобы избавиться от цифр
0

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .