2

我目前正在导入一个CSV文件,该文件有一列全是数字。我正在尝试将其转换为 int 并且仅提取大于 100 的值。我手动浏览了此 CSV 文件,并且可以确认有三行的值大于 100%。但是,这总是返回 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 会尝试将 right 转换为 left 的类型。如果您首先输入来自 ipcsv 的值 - left 将是一个字符串。如果您先输入数字 - 它会将 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 }

...结果似乎还可以。

于 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 回答