2013-08-16 46 views
5

我做一個文件的獲取內容。有時也有很多線路,但它可能發生,只有一個行(或甚至0)Powershell測試如果陣列在一行

我在做這樣的事情

$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至少包含一條線嗎?

THX對您有所幫助, 添

回答

6

而不是做:

$csv = (gc $FileIn) 

你不得不

$csv = @(gc $FileIn) 

現在輸出將永遠是與文件ha無關的字符串數組不管是否在一條線上。剩下的代碼只需要將$csv作爲一個字符串數組。這種方式比檢查輸出是否是數組等要好,至少在這種情況下。

+0

對於這個建議,我們感到非常高興! – timmalos

+0

我經常這樣做到gci,因爲它的返回值是一個數組或一個FileInfo對象。 – vonPryz

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! 

因此,像這樣能beused

if($csv -is [array]) { 
    # Stuff for array 
} else { 
    # Stuff for string 
}