2017-09-26 15 views
0

2つのCSVを比較する関数を作成していますが、比較部分を取得するとエラーが発生します。 私は両方のいずれかに記載されている要素だけを指摘したいと思います。不足要素の2 CSVを比較する機能

実際のコード

function Compare ($location1, $location2) 
{ 
    #work in progress 
    $CSV1 = Import-Csv -Path $location1 -UseCulture 
    $CSV2 = Import-Csv -Path $location2 -UseCulture 
    $Compared = Compare-Object -ReferenceObject $CSV1 -DifferenceObject $CSV2 | 
       select -ExpandProperty InputObject | 
       sort 
    [void] $CSV1 
    [void] $CSV2 
    return $Compared 
} 

二つのCSVからの抜粋:

スニペットA:

 
a 
b 
c 
d 
e 
f 
g 

スニペットB:これらのテストの目的のためのものである

 
a 
b 
c 
d 
e 
h 
f 
g 
h 
i 
j 

それがうまいかどうかを見るrks、しかし今のところそれは比較を開始しません。

コンソールで2つのCSVが正しく読み込まれます。

答えて

1

私はこのようにそれについて移動します:

私は「名前」と呼ばれる最初の行のColumnNameにを追加しました。そのセットでは、プロパティとしてアクセスできます。 だから、

$CSV1 = $null 
$CSV2 = $null 

$CSV1 = Import-Csv -Path 'C:\temp\pos\reference.csv' 
$CSV2 = Import-Csv -Path 'C:\temp\pos\difference.csv' 

$dif = Compare-Object -ReferenceObject $CSV1 -DifferenceObject $CSV2 -Property Name 

foreach($y in $dif){ 
    if($y.SideIndicator -eq "=>"){ 
    write-output $y.name "Is present in the difference but not in reference." 
    } 
    if($y.SideIndicator -eq "<="){ 
    write-output $y.Name "Is present in reference but not in difference" 
    } 

} 

<# content csv1 (reference.csv) 
Name 
a 
b 
c 
5 
d 
e 
f 
g 
9 
#> 
<#content csv2 (difference.csv) 
Name 
a 
b 
c 
d 
e 
f 
g 
h 
i 
j 
k 
l 
m 
n 
o 
p 
#> 

これは私に出力を与える:

h Is present in the difference but not in reference. 
i Is present in the difference but not in reference. 
j Is present in the difference but not in reference. 
k Is present in the difference but not in reference. 
l Is present in the difference but not in reference. 
m Is present in the difference but not in reference. 
n Is present in the difference but not in reference. 
o Is present in the difference but not in reference. 
p Is present in the difference but not in reference. 
5 Is present in reference but not in difference 
9 Is present in reference but not in difference 
1

Iのコンペアオブジェクトがそのように動作しません怖いです。私が理解していることから、あなたは両方でユニークなアイテムを見つけようとしています。一番簡単な方法は、両方のCSVを一緒に追加し、一意にしたいプロパティにselect-object -Uniqueを行うことです。ここで

($csv1 + $csv2).Name | Select-Object -Unique 

私はそれがcomminあるCSVの指摘することができアムCSV内のデータの列名が「名前」

+0

であると仮定していますか? – Kevin

+0

それはもっと複雑なスクリプトを必要とするでしょう。簡単な方法は、各行に対応するファイル名でcsvファイルに[手動またはプログラムで]別の列を追加することです。それを追加すると、各データは新しく追加された列にその起点を持ちます。 データが両方のファイルに存在する余分なロジックが必要になるか、競合が発生します。 –

+0

これは非常に難しくて戸惑ってしまいますので、これを簡単にする方法はありませんか? – Kevin

関連する問題