Назад | Перейти на главную страницу

Импорт из CSV и сортировка по дате

У меня есть следующий скрипт, который анализирует выходной файл HR в поисках сотрудников и выводит такую ​​информацию, как Hire Dare, First Name, Last Name, Supervisor и т. Д.

Проблема, с которой я столкнулся, заключается в том, что в текущем формате, я думаю, столбец «Дата найма» обрабатывается как строка, поэтому фактически вывод упорядочивается по месяцам (т.е. 01.01.01 предшествует 02.02.98). Есть ли способ сопоставить этот столбец с датой / временем, чтобы он сортировался правильно?

Import-CSV -delimiter "`t" Output.tab | Where-Object {$_.'First Nae' -like '*And*'} | Sort-Object 'Hire Date' | ft 'Hire Date', 'First Name'

Вы можете добавить новое поле (с типом DateTime) в свой встроенный CSV-файл, используя значение из Hire Date, чтобы заполнить его, а затем использовать его для сортировки. Тем не менее, вы все равно можете распечатать стандартную дату найма.

Это должно сработать для вас:

Import-CSV -delimiter "`t" Output.tab | Where-Object {$_.'First Name' -like '*And*'} | add-member scriptproperty -name 'HireDateTyped' -value { [DateTime]::Parse($this.'Hire Date') } -passthru | Sort-Object 'HireDateTyped' | ft 'Hire Date', 'First Name'

Кроме того, у вас есть опечатка в Where-Object предложение, Имя написано с ошибкой.

отсортируйте по выражению (и введите приведение столбца даты найма}:

... | Sort-Object {[datetime] $ _. 'Hire Date'} | ...

Вам нужно ввести приведение каждого объекта в CSV-файле для каждого свойства к нужному типу объекта. В этом случае вы хотите, чтобы для этого столбца был установлен объект DateTime.

Это выглядело бы примерно так:

$data = import-csv C:\report.csv
$data | foreach-object {
New-Object PSObject -prop @{
"Hire Date" = [DateTime]::Parse("$_.Hire Date")
}
}

Хорошая статья о том, как это сделать ...

http://www.heikniemi.net/hardcoded/2010/01/powershell-basics-1-reading-and-parsing-csv/

Надеюсь это поможет!