我在文件上做了一个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至少包含一行时才这样做?
谢谢你的帮助, 添
答案 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
视为字符串数组。这种方式比必须检查输出是否是数组等更好,至少在这种情况下。