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