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

mho*_*321 2 csv powershell loops 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
Run Code Online (Sandbox Code Playgroud)

Bar*_*ekB 5

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

$percentTooLarge = Import-Csv path\file.csv | 
    Where-Object { 100 -lt $_.SumHoldingPercent} | 
    Measure-Object
Run Code Online (Sandbox Code Playgroud)

基本上,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 }
Run Code Online (Sandbox Code Playgroud)

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