Arrays Powershell测试一行中的阵列

Arrays Powershell测试一行中的阵列,arrays,powershell,split,Arrays,Powershell,Split,我在文件上做了一个获取内容的操作。有时有很多行,但也可能只有一行(甚至0) 我在做类似的事情 $csv = (gc $FileIn) $lastID = $csv[0].Split(' ')[1] #First Line,2nd column 但是只有一行,gc返回一个字符串,$csv[0]返回字符串的第一个字符,而不是完整的行,下面的拆分失败 是否可以执行以下操作: $lastID = (is_array($csv)?$csv[0]:$csv).Split(' ')[1] 只有在$csv至

我在文件上做了一个获取内容的操作。有时有很多行,但也可能只有一行(甚至0)

我在做类似的事情

$csv = (gc $FileIn)
$lastID = $csv[0].Split(' ')[1] #First Line,2nd column
但是只有一行,gc返回一个字符串,$csv[0]返回字符串的第一个字符,而不是完整的行,下面的拆分失败

是否可以执行以下操作:

$lastID = (is_array($csv)?$csv[0]:$csv).Split(' ')[1]
只有在$csv至少包含一行时才能这样做

谢谢你的帮助, Tim

有一种方法可以用来测试变量的类型
-is
是您需要的。这样,

$foo = @()        # Array
$bar = "zof"      # String
$foo -is [array]  # Is foo an array?
True              # Yes it is
$foo -is [string] # Is foo a string?
False             # No it is not
$bar -is [array]  # How about bar
False             # Nope, not an array
$bar -is [string] # A string then?
True              # You betcha!
所以像这样的东西可以用

if($csv -is [array]) {
    # Stuff for array
} else {
    # Stuff for string
}
而不是做:

$csv = (gc $FileIn)
你必须

$csv = @(gc $FileIn)

现在,无论文件是否有一行,输出都将始终是字符串数组。代码的其余部分只需将
$csv
视为字符串数组。至少在这种情况下,这种方法比必须检查输出是否是数组等要好。

我经常对gci这样做,因为它的返回值是数组或单个FileInfo对象。