powershell数组返回意外结果
我有一个对象数组,当我尝试过滤数据时,它没有按预期返回数据 数据: 我的代码:powershell数组返回意外结果,powershell,Powershell,我有一个对象数组,当我尝试过滤数据时,它没有按预期返回数据 数据: 我的代码: $table = @{} $table = import-csv e:\report.csv Foreach($item in $table.GetEnumerator()) { If (($item.date -eq '4/8/2008') -and ($item.batch -le 100) ) { $item } } 我希望它能归还所有物品,但我只得到: Date
$table = @{}
$table = import-csv e:\report.csv
Foreach($item in $table.GetEnumerator())
{
If (($item.date -eq '4/8/2008') -and ($item.batch -le 100) )
{
$item
}
}
我希望它能归还所有物品,但我只得到:
Date Batch
---- -----
04/08/2008 1
04/08/2008 10
我错过了什么
我错过了什么
字符串不是数字这一事实:-)
Import Csv
将所有列值视为字符串,因此您将比较字符串“3”
与100
,而不是数字3
——并且按字母顺序,100
在3
之前(第一个字符“1”
与第一个字符“3”
)
将$item.batch
转换为数字类型:
foreach($item in Import-Csv E:\report.csv)
{
If (($item.date -eq '4/8/2008') -and ([int]$item.batch -le 100) )
{ # Look, here
$item
}
}
。。。或者,翻转操作数,使数值参考值(100
)成为左侧参数:
If (($item.date -eq '4/8/2008') -and (100 -gt $item.batch) )
这将导致PowerShell在比较之前将$item.batch
转换为数字类型
我错过了什么
字符串不是数字这一事实:-)
Import Csv
将所有列值视为字符串,因此您将比较字符串“3”
与100
,而不是数字3
——并且按字母顺序,100
在3
之前(第一个字符“1”
与第一个字符“3”
)
将$item.batch
转换为数字类型:
foreach($item in Import-Csv E:\report.csv)
{
If (($item.date -eq '4/8/2008') -and ([int]$item.batch -le 100) )
{ # Look, here
$item
}
}
。。。或者,翻转操作数,使数值参考值(100
)成为左侧参数:
If (($item.date -eq '4/8/2008') -and (100 -gt $item.batch) )
这将导致PowerShell在比较之前将
$item.batch
转换为数字类型从CSV读取时,所有值都是字符串。如果要进行数字比较,则需要数字类型。您可以简单地强制转换-->[int]$item.batch-le 100
。另一种选择是让左侧为您想要的数据类型-->100-ge$item.batch
当您从CSV读取时,所有值都是字符串。如果要进行数字比较,则需要数字类型。您可以简单地强制转换-->[int]$item.batch-le 100
。另一种选择是让左边是您想要的数据类型-->100-ge$item.batch
我知道这是一件我忽略的简单事情!非常感谢。我知道我忽略了一件简单的事情!非常感谢。