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)
由于比较运算符在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)
......结果似乎没问题.