2

現在、すべて数字の列を持つCSVファイルをインポートしています。これをintとしてキャストし、100より大きいものだけをプルしようとしています。このCSVファイルを手動で調べたところ、100%を超える値の行が3つあることを確認できました。ただし、これは常に0を返します。何が間違っているのでしょうか。

$percentTooLarge = Import-Csv path\file.csv | Foreach-Object { $_.SumHoldingPercent = $_.SumHoldingPercent -as [int]; $_ } | Where-Object { $_.SumHoldingPercent -gt 100 } | Measure-Object
$numPercentTooLarge = $percentTooLarge.Count
4

2 に答える 2

5

比較演算子がPowerShellで機能する方法のため、これでうまくいくはずです。

$percentTooLarge = Import-Csv path\file.csv | 
    Where-Object { 100 -lt $_.SumHoldingPercent} | 
    Measure-Object

基本的に、PowerShellは、物事を比較するときに、右を左のタイプに変換しようとします。ipcsvの値を最初に入力すると、左側が文字列になります。最初に数値を入力すると、CSVファイルの値が数値に変換されます(型を十分に大きく保つのに十分賢いでしょう;))

私はこのコードでテストしました:

@"
foo,bar,percent
alfa,beta,120.5
beta,gamma,99.9
foo,bar,30.4
works,cool,120.7
"@ | ConvertFrom-Csv | where { 100 -lt $_.percent }

...そして結果はOKのようです。

于 2012-05-16T11:37:20.340 に答える
0

@Shay Levyとの会話を見ると、次のようになります。

[System.Globalization.CultureInfo] $culture = "en-us"

だからあなたは次のようなことを試すことができます:

([decimal]::parse($_.SumHoldingPercent ,$culture)) -gt 100
于 2012-05-15T17:11:22.237 に答える