Powershell测试阵列是否在一行中

时间:2013-08-16 07:38:14

标签: arrays powershell split

我在文件上做了一个get-content。有时会有很多行,但只有一行(甚至是0)

就会发生

我正在做类似

的事情
$csv = (gc $FileIn)
$lastID = $csv[0].Split(' ')[1] #First Line,2nd column

但只有一行,gc返回一个字符串,而$ csv [0]返回字符串的第一个字符而不是完整的行,并且以下的Split失败。

是否可以执行以下操作:

$lastID = (is_array($csv)?$csv[0]:$csv).Split(' ')[1]

只有当$ csv至少包含一行时才这样做?

谢谢你的帮助, 添

2 个答案:

答案 0 :(得分:10)

可以使用type operators来测试变量的类型。 -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
}

答案 1 :(得分:8)

而不是:

$csv = (gc $FileIn)

你必须

$csv = @(gc $FileIn)

现在输出将始终是一个字符串数组,而不管文件是否有一行。其余代码只需要将$csv视为字符串数组。这种方式比必须检查输出是否是数组等更好,至少在这种情况下。