2016-07-22 5 views
0

Ich habe zwei Powershell-String-Array Arrays (von Import-CSV), die ich vergleichen muss. Sie sind als solche:Powershell Casting-Array-Objekte und Ändern von Datentypen

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" 

Wenn Sie genau hinsehen, werden die Datensätze identisch und entsprechen müssen, wenn das Objekt mit vergleichen.

Also, gibt es eine Möglichkeit, kann ich das erste Objekt in jedem Datensatz auf ein Datum und das dritte Objekt auf eine Zahl, innerhalb der gleichen Array oder Arrays.

Ich kann auch alle Fehler ignorieren, die während des Castings gefunden wurden (leere Daten oder Zahlen).

Vielen Dank !!

PS. Speziell auf der Suche nach so etwas wie

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

Antwort

2

Es klingt wie Sie den Einsatz von -as Betreiber machen wollen, die Daten zu einem Objekt zu werfen.

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

Der Vorteil dabei ist, dass es nicht einen Fehler ausgelöst wird, wenn es fehlschlägt (aber nicht die Daten präsentiert und gerade sein Null).

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

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

Ok sehr sehr nahe !! Nur eine weitere Anfrage - kann ich es als Dezimalzahl mit genau zwei Stellen Genauigkeit darstellen. Problem ist, dass einige Datensätze 50,00 in ihnen haben und wenn sie wiederholen, ist die Menge 50 .. vergleichen Objekt behandelt diese als unterschiedlich beim Vergleich von Dezimalzahlen .. oder tut es? Überprüfung. –

+0

Vielen Dank !! das funktioniert!! –