2011-08-03 14 views
2

私はこのようになりますPowerShellでCSVファイルを処理しています:PowerShellの<プロパティ名でシンボル

<TICKER>,<DTYYYYMMDD>,<TIME>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL> 
AUDJPY,20010102,230100,64.30,64.30,64.30,64.30,4 
AUDJPY,20010102,230300,64.29,64.29,64.29,64.29,4 
<snip> 

を、私は、ファイルを処理するためにImport-Csvを使用していますが、私は<DTYYYYYMMDD>値より大きい返す見つけたい20110101.よりも私はこの試みた:

foreach($file in ls $PriceFolder\*.txt) {Import-Csv $file | Where-Object {$_.<DTYYYYMMDD> -ge 20110101}}

を私は

このエラーが出ます私はそれが<シンボルのためだと推測しますか?これをどうすれば解決できますか?

答えて

2

1)標準のフィールド名ではなく、変数に格納して$ _。$ varとして参照するには、{}を使用します。 2)(データは.CSVから文字列として読み取られる問題を回避するために、[INT]に値をキャストし、この例では、これはおそらく問題ではなく、..)

この作品:

Import-Csv test.csv | Where-Object {[int]$_.{<DTYYYYMMDD>} -ge 20010102} 
+0

ありがとうございました。私が処理しているファイルは、400万行以上あります。それを処理する最速の方法は何ですか?私がしたいのは、 ''の列が20110101より大きい新しいファイルに行をコピーするだけです。この方法を使うとかなり遅くなります。 'Out-File'を使うべきですか? 'Import-Csv'は最良の方法ですか? –

+1

この回答を見てください:http://stackoverflow.com/questions/6386793/how-to-use-powershell-to-reorder-csv-columns/6387587#6387587 –

+0

あなたのデータが些細でない場合は、例えば、Microsoft.VisualBasic.FileIO.TextFieldParserを使用してください。 –

2

あなたがプロパティ名を引用することができます:ちょうどMrKWatkins'答えにコメントとして

$_.'<DTYYYYMMDD>' 
0

を、あるケースでは、単一引用符は動作しますが、二重引用符は、(少なくともバージョン2.0で)動作しません:

シングル引用:

(dir | Select-Object {$_.Name})[0].'$_.Name'  # GOOD: correctly gives name 

ダブル引用:

(dir | Select-Object {$_.Name})[0]."$_.Name"  # BAD: returns nothing 

編集:単一引用符がないのに対し、二重引用符は、変数の展開を可能にします。詳細はthis answerを参照してください。

関連する問題