2016-11-30 11 views
-1

これは本当に奇妙な問題です。おそらく、本当に愚かな解決策があります。foreachループで配列ヘッダーを呼び出すことができません

しかし、私はその後、私はcsvファイルを検索するために使用したいのです対象の単語の配列を、持っているCSV

$csv = import-csv c:\users\hello.csv 

をインポートする - との一致がCSVであるかどう - 隣接する列を移入CSVでここ

は配列です:

$newhandles 
hi 
hello 

- 私はそれの内側のif文でforeachループを実行する場合 - それは、ヘッダーの1つを認識しません。

foreach ($newhandle in $newhandles) 
{if ($csv.name -eq $newhandle) {$csv.redundant = $newhandle}} 

しかし、それは私にこのエラーを与える:

The property 'redundant' cannot be found on this object. Verify that the property exists 
and can be set. 
At line:1 char:69 
+ ... andles) {if ($csv.name -eq $newhandle) {$csv.redundant = $newhandle}} 
+            ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
+ FullyQualifiedErrorId : PropertyAssignmentException 

私はプロパティが存在することがわかっている - 私はそれを直接呼び出す場合ので - それは、3つの空のスロットを示して - と私はそれに直接何かを呼び出す場合 - 要素が入力されます。

> $csv[0].redundant = 'hi' 

> $csv[0] 


name  : hi 
description : don't settle 
system  : sight 
redundant : hi 
tags  : 

どのようなアイデアですか?

+0

を試し働く理由ですシムplyは$ csv.Name全体を参照します。手動で$ csv.Nameを入力するとどうなりますか? – LotPings

答えて

1

このforeachループ使用してみてください:あなたは($のcsv.redundant).GetType()をチェックすると

foreach ($rec in $csv){ 
if($newhandles -contains $rec.name){ 
$rec.redundant = $rec.name 

} 

} 

を、あなたはそれが代わりにあなたがしたいプロパティの配列を返すことがわかりますが、あなたが割り当てるとき[0]が、もしあなたの中に$のcsvへの値は[0]あなたは、正確なプロパティにアクセスしている.redundantと手動

+0

ahh - 実際のCSVでforeachを実行して、各プロパティにアクセスできるように各ITSレコードに分割する必要があります。なぜ$ newhandlesが$ rec.nameを含むのですか? $ rec.name -contains $ newhandlesの場合はそうではありませんか? (それほど重要なことではありません。ありがとう。 –

0

を試験したとき、それは手動で追加チェックするとき、この

import-csv "c:\users\hello.csv" | select * , @{N="redundant";E={if ($newhandles -contains $_.Name) {$_.Name} else {$null}}} -ExcludeProperty redundant 
関連する問題