2016-07-15 2 views
0

Я сортировкой текстовый файл, который имеет следующую закономерность:Сортировка даты в текстовом файле

moon|gamma|D5412|745|72|8:3:43:7:6:2016 
Bingo|denmark|4|4|985|12:11:43:7:12:2015 
charlie|london|Debb|517|10|7:15:43:6:5:2014 
Alpha|Debra|devido|0|8745|6:33:43:23:6:2016

УЧИТЫВАЯ 7:3:43:7:6:2016 подстроку в качестве даты в каждой строке, мне нужно отсортировать строки по возрастанию или по убыванию из даты. Я получаю ошибки, и я не могу сортировать текстовый файл.

ответ

3

Во-первых, вам нужно разбить строку на разделитель | и захватить последнее значение из каждой строки:

# Index -1 is always the last one 
$dateString = 'moon|gamma|D5412|745|72|8:3:43:7:6:2016'.Split('|')[-1] 

Вы можете использовать статический метод DateTime.ParseExact() для разбора входной строки в качестве сортируемого DateTime объекта :

[datetime]::ParseExact($dateString,'H:m:s:d:M:yyyy',[cultureinfo]::InvariantCulture) 

Теперь нам просто нужно положить, что вместе в качестве аргумента Sort-Object -Property:

Get-Content .\file.txt |Sort-Object -Property { [datetime]::ParseExact($_.Split('|')[-1],'H:m:s:d:M:yyyy',[cultureinfo]::InvariantCulture)} 

По умолчанию порядок сортировки Sort-Object возрастает, используйте переключатель -Descending, чтобы изменить его, если необходимо.


Если вы хотите использовать более лаконичный и unix'y подход, сортировать по отдельным значениям строки даты вместо (вам нужно изменить их порядок, хотя):

Sort-Object { $_.Split('|')[-1].Split(':')[5,4,3,0,1,2] } 
+0

Это дает много ошибок, может быть, я не использую его правильно, читая файл или анализируя текст. – maverick

+0

@maverick Обновите свой вопрос и добавьте ошибки, которые вы получите. Если файл отформатирован точно так, как вы описываете, оба метода должны работать –