Importando do CSV e classificando por Data

4

Eu tenho o seguinte script que analisa um arquivo de saída de RH procurando por funcionários e informações de saída como Contratar Desafio, Nome, Sobrenome, Supervisor, etc.

O problema que tenho é que no formato atual eu acho que a coluna Data de contratação está sendo tratada como uma string, então, na verdade, ela ordena a saída por mês (ou seja, 1/1/01 vem antes de 2/2/98). Existe uma maneira de mapear essa coluna para uma data / hora para que ele seja classificado corretamente?

Import-CSV -delimiter "'t" Output.tab | Where-Object {$_.'First Nae' -like '*And*'} | Sort-Object 'Hire Date' | ft 'Hire Date', 'First Name'
    
por MattB 14.05.2010 / 17:13

3 respostas

4

Você pode adicionar um novo campo (DateTime digitado) ao seu CSV em linha usando o valor da Data de contratação para propagar e, em seguida, usá-lo para a sua classificação. Ainda é possível imprimir a Data de contratação padrão.

Isso deve funcionar para você:

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'

Além disso, você tem um erro de digitação na cláusula Where-Object , o nome incorreto.

    
por 14.05.2010 / 17:44
2

classifique por expressão (e digite cast a coluna da data de contratação}:

... | Sort-Object {[datetime] $ _. 'Data de contratação'} | ...

    
por 16.05.2010 / 01:08
1

Você precisa digitar converter cada objeto no arquivo CSV de cada propriedade para o tipo de objeto desejado. Neste caso, você quer o objeto DateTime definido para esta coluna.

Seria algo parecido com isto:

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

Bom artigo sobre como fazer isso ...

link

Espero que isso ajude!

    
por 14.05.2010 / 17:46

Tags