2016-07-22 4 views
0

私は、比較する必要がある配列の2つのpowershell文字列配列(import csvから)を持っています。 彼らのようなある:あなたがよく見るとPowershellは配列オブジェクトをキャストし、データ型を変更します

Array 1/File 1 
"Date","Descrption","Amount" 
"05/12/2016","Desc1","-40.00" 
"05/15/2016","Desc2","-50.00" 

Array 2/File 2 
"Date","Description","Amount" 
"5/12/2016","Desc1","-40" 
"5/15/2016","Desc2","-50" 

、レコードが同一であり、比較するオブジェクトを使用する場合と一致する必要があります。

したがって、各レコードの最初のオブジェクトを日付にキャストし、3番目のオブジェクトを数値と同じ配列内にキャストする方法はありますか。

キャスト中に見つかったエラー(空の日付または数字)も無視できます。

ありがとうございました!

PS。具体的には、オブジェクトにデータをキャストするオペレータ - 絵を利用したいようですね

import-object file1.csv | for-each object { cast $_.Date as date, ignore errors, cast $_Amount as number, ignore errors } 

答えて

2

ような何かを探しています。

Import-Csv 'File1.csv' | ForEach { 
    [pscustomobject]@{ 
     Date = $_.Date -as [datetime] 
     Description = $_.Description 
     Amount = $_.Amount -as [int] 
    } 
} 

これは、エラーが発生した場合でもエラーをスローしない(ただし、データは表示せず、Nullにする)という利点があります。

'06/07/2015' -as [datetime] 
'Wont Work' -as [datetime] 

10.00 -as [int] 
'Wont Work' -as [int] 
+0

非常に非常に近い!さらにもう1つのリクエスト - ちょうど2桁の精度で10進数としてキャストできますか?問題は、いくつかのレコードには50.00があり、それらが繰り返されるときの量は50であるということです。オブジェクトは小数点を比較するときにこれらを異なるものとして扱いますか?確認する。 –

+0

ありがとうございました!これは動作します! –

関連する問題