Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Сортировка строк в текстовом файле по дате (http://forum.oszone.net/showthread.php?t=329300)

TRaMeLL 24-08-2017 13:38 2760453

Сортировка строк в текстовом файле по дате
 
Вложений: 1
Здравствуйте!

Есть текстовый файл, каждая строка в котором начинается с даты в формате DD.MM.YYYY, но не по порядку, нужно отсортировать строки по дате.

Т. е. в файле имеем:

10.07.2017 AAAA
13.07.2017 DDDD
11.07.2017 BBBB
12.07.2017 CCCC

Нужно получить:

10.07.2017 AAAA
11.07.2017 BBBB
12.07.2017 CCCC
13.07.2017 DDDD

Желательно реализовать это в CMD\BAT\VBS

Iska 24-08-2017 13:58 2760463

Упакуйте образец файла в архив и приложите к сообщению. Укажите примерный размер оригинальных файлов. Укажите, нужна ли сортировка по последующему содержимому строки, если у некоторых строк даты будут совпадать.

Цитата:

Цитата TRaMeLL
Желательно реализовать это в CMD\BAT\VBS »

Устроил бы Вас Microsoft LogParser (буде окажется возможным решение посредством него)?

TRaMeLL 24-08-2017 14:30 2760480

Добавил, размер примерно до 1Мб, сортировка по следующему содержимому не нужна, только по дате. Нужен максимально простой запуск обработки, чтобы ничего-нигде на надо было щелкать лишнего, не знаю насчет Microsoft LogParser, никогда о нём раньше не слышал, если с ним это возможно, то можно и посредством него.

Busla 24-08-2017 15:15 2760506

Powershell:
Код:

Get-Content .\sample.txt | Sort-Object {"$_[5..9]$_[2..3]$_[0..1]"}

Kazun 24-08-2017 15:15 2760507

PowerShell:
Код:

Get-Content sample.txt | Sort { [datetime]::ParseExact($_.split("|")[0],"dd.MM.yyyy",$null)} | Out-File r.txt

TRaMeLL 24-08-2017 15:29 2760511

Busla, в этом случае не сортирует месяц, т. е. может быть сначала 7-й, потом 6-й, потом 8-й.
Kazun, а вот это, похоже то, что надо. Тестирую.

Iska 24-08-2017 15:53 2760518

Цитата:

Цитата TRaMeLL
не знаю насчет Microsoft LogParser, никогда о нём раньше не слышал »

Это уже достаточно старая разработка Microsoft, особо ценная тем, что для обработки текстовых данных (в том числе различных логов) по сравнению с прочими скриптовыми радостями (даже посредством OLE DB) является наиболее эффективным из известных мне средств. Особенно на достаточно крупных, сравнимых с объёмами оперативной памяти, файлах.

TRaMeLL 24-08-2017 16:33 2760531

Iska, погуглил, штука крутая, но для моей задачи, сильно overkill, как орехи кувалдой колоть. И, как я понял, ставится отдельным компонентом, вариант с PowerShell, похоже, вполне работоспособный, потестирую еще пару дней, но думаю, что всё будет ОК.

Busla 24-08-2017 17:34 2760539

TRaMeLL, да, циферки сдвинулись, должно быть: "$_[6..9]$_[3..4]$_[0..1]"
это просто порядковые номера символов в исходной строке из которых формируется критерий сортировки ГодМесяцЧисло

TRaMeLL 25-08-2017 07:08 2760614

Busla, тогда результат сортировки такой:

11.06.2017 | .................................................
11.07.2017 | .................................................
12.06.2017 | .................................................
12.07.2017 | .................................................

yurfed 25-08-2017 08:26 2760617

TRaMeLL, если использование скрипта не принципиально, AkelPad с этим прекрасно справляется. Заодно сразу видите результат.
"Строки по числовому возрастанию/убыванию"

TRaMeLL 25-08-2017 09:50 2760626

yurfed, в чистом AkelPad не увидел, наверное это в плагинах. Аналогичная функция есть в NotePad++, но результат сортировки аналогичен варианту который получается в примере из сообщения #4 (правка в #9), т. е. месяцы в этом случае смешиваются. Вообще мне лучше скриптом, готовое решение уже есть (сообщение #5), просто спортивного интереса ради любопытно: какие еще есть варианты.

yurfed 25-08-2017 10:06 2760630

Цитата:

Цитата TRaMeLL
в чистом AkelPad не увидел »

https://yadi.sk/i/S5V6g-HR3MK29E
Стрелочкой отметил.

Busla 25-08-2017 10:06 2760631

TRaMeLL, да, напортачил я с синтаксисом... Лаконично не получается :-/
Get-Content .\sample.txt | Sort-Object {$_.SubString(6,4),$_.SubString(3,2),$_.SubString(0,2)}

TRaMeLL 25-08-2017 10:43 2760646

yurfed, а что это за версия такая? Это точно AkelPad? Я нахожу такое:

По этой ссылке - http://akelpad.sourceforge.net/ru/index.php


Busla, вот теперь, вроде, как надо. Добавил вторым вариантом, буду тестировать.

mwz 25-08-2017 11:34 2760660

Цитата:

Цитата yurfed
Стрелочкой отметил. »

У вас небось все плагины для AkelPad стоят. ;)

yurfed 25-08-2017 12:06 2760670

Цитата:

Цитата mwz
У вас небось все плагины для AkelPad стоят. »

Вот
https://yadi.sk/i/zx_FyuVj3MKDtk и
https://yadi.sk/i/FoIRarZY3MKDx7
Цитата:

Цитата TRaMeLL
а что это за версия такая? Это точно AkelPad? »

https://yadi.sk/i/-qPo5ClV3MKDVt

Базовый и с плугами

TRaMeLL 25-08-2017 12:34 2760674

yurfed, посмотрел, нет результат аналогичен сортировке в NotePad++, месяцы и годы сортируются не так, как мне надо. Пока крайний вариант от Busla меня устраивает, такой по-хорошему "дубовый", без заморочек.


Время: 11:51.

Время: 11:51.
© OSzone.net 2001-