1

比較する必要がある 2 つの CSV ファイルがあります。両方とも、次のように、追加の区切りフィールド (「|」文字で区切られた) を含む (または含まない) 場合があります。

(new.csv)
Title,Key,Value
Jason,Son,Hair=Red|Eyes=Blue
James,Son,Hair=Brown|Eyes=Green
Ron,Father,Hair=Black
Susan,Mother,Hair=Black|Eyes=Brown|Dress=Green

(old.csv)
Title,Key,Value
Jason,Son,Hair=Purple|Eyes=Blue
James,Son,Hair=Brown|Eyes=Green
Ron,Father,Hair=Purple
Susan,Mother,Hair=Black|Eyes=Brown|Dress=Blue

2 つのファイルを比較しようとすると、問題が発生します...

$fileNew = "new.csv"
$fileOld = "old.csv"
$fileDiffOutputFile = "diff.txt"

$csvNewLog = (Import-CSV ($fileNew))
$csvOldLog = (Import-CSV ($fileOld))

$varDifferences = Compare-Object $csvOldLog $csvNewLog -property Title,Value

$varDifferences | Group-Object -Property Title | % {New-Object -TypeName PSObject -Property @{ NewValue=($_.group[0].Value); Title=$_.name; OldValue=($_.group[1].Value) } } | Out-File $fileDiffOutputFile -Append

次の出力が得られます。

(diff.txt)
OldValue                   Title                      NewValue                 
--------                   -----                      --------                 
Hair=Purple|Eyes=Blue      Jason                      Hair=Red|Eyes=Blue       
Hair=Purple                Ron                        Hair=Black               
Hair=Black|Eyes=Brown|D... Susan                      Hair=Black|Eyes=Brown|...

上記のスーザンの場合のように、一部の値は必然的に列の最大長を超えて拡張されます。

したがって、私の質問には、考えられる解決策がいくつかあります。

  1. 区切られた値の文字列全体ではなく、変更された値のみを引き出すように値を分離する簡単な方法はありますか?
  2. そうでない場合、代わりに文字列全体 (区切り文字列の変更されていない値の部分を含む) を表示する形式を取得することは可能ですか?
4

1 に答える 1

1

最後の行に a を含めると、format-table -wrapそうですか?

$fileNew = "new.csv"
$fileOld = "old.csv"
$fileDiffOutputFile = "diff.txt"

$csvNewLog = (Import-CSV ($fileNew))
$csvOldLog = (Import-CSV ($fileOld))

$varDifferences = Compare-Object $csvOldLog $csvNewLog -property Title,Value

$varDifferences | Group-Object -Property Title | % {New-Object -TypeName PSObject -Property @{ NewValue=($_.group[0].Value); Title=$_.name; OldValue=($_.group[1].Value) } } | Format-Table -wrap | Out-File $fileDiffOutputFile -Append
于 2016-03-17T19:40:23.950 に答える