PDA

Показать полную графическую версию : [решено] Сортировка строк в текстовом файле по дате


TRaMeLL
24-08-2017, 13:38
Здравствуйте!

Есть текстовый файл, каждая строка в котором начинается с даты в формате 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
Упакуйте образец файла в архив и приложите к сообщению. Укажите примерный размер оригинальных файлов. Укажите, нужна ли сортировка по последующему содержимому строки, если у некоторых строк даты будут совпадать.

Желательно реализовать это в CMD\BAT\VBS »
Устроил бы Вас Microsoft LogParser (буде окажется возможным решение посредством него)?

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

Busla
24-08-2017, 15:15
Powershell:
Get-Content .\sample.txt | Sort-Object {"$_[5..9]$_[2..3]$_[0..1]"}

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

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

Iska
24-08-2017, 15:53
не знаю насчет Microsoft LogParser, никогда о нём раньше не слышал »
Это уже достаточно старая разработка Microsoft, особо ценная тем, что для обработки текстовых данных (в том числе различных логов) по сравнению с прочими скриптовыми радостями (даже посредством OLE DB) является наиболее эффективным из известных мне средств. Особенно на достаточно крупных, сравнимых с объёмами оперативной памяти, файлах.

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

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

TRaMeLL
25-08-2017, 07:08
Busla, тогда результат сортировки такой:

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

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

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

yurfed
25-08-2017, 10:06
в чистом AkelPad не увидел »
https://yadi.sk/i/S5V6g-HR3MK29E
Стрелочкой отметил.

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

TRaMeLL
25-08-2017, 10:43
yurfed, а что это за версия такая? Это точно AkelPad? Я нахожу такое:
http://akelpad.sourceforge.net/files/screen_basic.png
По этой ссылке - http://akelpad.sourceforge.net/ru/index.php

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

mwz
25-08-2017, 11:34
Стрелочкой отметил. »
У вас небось все плагины для AkelPad стоят. ;)

yurfed
25-08-2017, 12:06
У вас небось все плагины для AkelPad стоят. »
Вот
https://yadi.sk/i/zx_FyuVj3MKDtk и
https://yadi.sk/i/FoIRarZY3MKDx7
а что это за версия такая? Это точно AkelPad? »
https://yadi.sk/i/-qPo5ClV3MKDVt
Базовый и с плугами (http://akelpad.sourceforge.net/ru/index.php)

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




© OSzone.net 2001-2012