3

勤務先の従業員に関する情報を含む2つの.CSVファイルがあります。最初のファイル(ActiveEmploye.csv)には、2500エントリの約70の異なるフィールドがあります。もう1つ(EmployeEmail.csv)には、4つのフィールド(FirstName、LastName、Email、FullName)と700のエントリがあります。両方のファイルに共通のFullNameフィールドがあり、各ファイルを比較するために使用できるのはこれだけです。私がする必要があるのは、ActiveEmploye.csvの対応する従業員に(EmployeEmail.csvからの)電子メールアドレスを追加することです。また、メールアドレスをお持ちでない方は、このフィールドを空白のままにすることができます。

数日前にインターネットで見つけたJoin-Object関数を使用しようとしましたが、最初のcsvファイルには、関数が処理できるフィールドが多すぎます。

どんな提案でも大歓迎です!

4

2 に答える 2

0

これは、複数のフィールドを左に結合するために使用した@BartekBの代替方法であり、処理時間の点でより良い結果が得られました。

Import-Csv EmployeeEmail.csv | ForEach-Object -Begin {
    $Employees = @{}
} -Process {
    $Employees.Add($_.FullName,$_)
}

Import-Csv ActiveEmployees.csv |
    Select *,@{Name="email";Expression={$Employees."$($_.FullName)"."email"}} |
        Export-Csv Joined.csv -NoTypeInformation

これにより、$Employees の FullName の配列インデックスをクエリし、その要素の名前付きメンバーの値を取得できます。

于 2013-07-23T17:19:26.360 に答える