我无法让PowerShell正确地转换为int

时间:2012-05-15 14:35:34

标签: loops powershell csv casting

我目前正在导入一个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

2 个答案:

答案 0 :(得分:5)

由于比较运算符在PowerShell中的工作方式,这应该可以解决问题:

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

基本上,PowerShell,当您比较东西时,尝试将右侧转换为左侧类型。如果你先从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 }

......结果似乎没问题。

答案 1 :(得分:0)

看看你与@Shay Levy的对话,我会用:

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

所以你可以尝试类似的东西:

([decimal]::parse($_.SumHoldingPercent ,$culture)) -gt 100