動的メモプロパティ名を使用してCSVファイルからデータをインポートするにはどうすればよいですか?つまり、あらかじめ列の名前を知っているわけではありません。パターンに一致し、スクリプトの実行時にCSVファイルから抽出されます。例えばとしてPowershell:動的変数名で変数を取得
は、CSVファイルを検討:
"Header 1","Header A","Header 3","Header B"
0,0,0,0
1,2,3,4
5,6,7,8
を私は手紙で終わる列のみを抽出したいと思います。 CSVファイルにアクセスするには、
今"Header A"
"Header B"
:これを行うには、私は、ヘッダー行を読んで、そのような正規表現で名を抽出、
$reader = new-object IO.StreamReader("C:\tmp\data.csv")
$line = $reader.ReadLine()
$headers = @()
$line.Split(",") | % {
$m = [regex]::match($_, '("Header [A-Z]")')
if($m.Success) { $headers += $m.value } }
これは、私が気にすべての列名を取得します
$csvData = import-csv "C:\tmp\data.csv"
Import-CSVはヘッダー行ごとにプロパティを持つカスタムオブジェクトを作成します。このようにNotePropertyの名前でフィールドにアクセスすることができます。
$csvData | % { $_."Header A" } # Works fine
これは明らかに列名を事前に知る必要があります。私は抽出して$headers
に格納された列名を使用したいと思います。どうすればいい?
私はそれが列名を知らない別のスクリプトを書きますので、私は次のようにスクリプトを変更することができ、これまで
$csvData | % { $_.$headers[0] } # Error: Cannot index into a null array.
$csvData | % { $np = $headers[0]; $_.$np } # Doesn't print anything.
$csvData | % { $_.$($headers[0]) } # Doesn't print anything.
を試みたいくつかのもの。それは私の唯一の解決策ですか?
ほとんど。あらかじめ索引を知っておく必要がありますが、似たような検索を追加すれば簡単に修正できます: '$ csvData | $($ headers [0])})。})} ' – vonPryz
ありがとうございました。これはまさに私が必要としたものでした。 – vonPryz
@vonPryz - これはまさにあなたが必要としていたものですか?クリスチャン - 犯罪はありません。 – manojlds