2013-08-16 16 views
5

Robię get-content na pliku. Czasami istnieje wiele linii, ale może się zdarzyć, że jest tylko jedna linia (lub nawet 0)Powershell Sprawdź, czy tablica w jednej linii

robiłem coś takiego

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

ale tylko jedną linię, GC powrócić ciąg i $ csv [0] zwraca pierwszy znak heksadecymalny zamiast całego wiersza, a następujący podział nie powiódł się.

Czy można zrobić coś takiego:

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

I to zrobić tylko wtedy, gdy $ CSV zawiera co najmniej linię?

Thx za pomoc, Tim

Odpowiedz

6

Zamiast robić:

$csv = (gc $FileIn) 

trzeba było

$csv = @(gc $FileIn) 

Teraz wyjście zawsze będzie tablica ciągów znaków niezależnie od pliku ha jedną linię, czy nie. Reszta kodu będzie musiała traktować $csv jako tablicę łańcuchów. Ten sposób jest lepszy, niż sprawdzenie, czy wyjście jest tablicą itp., Przynajmniej w tej sytuacji.

+0

Wow thx za poradę! – timmalos

+0

Często robię to dla gci, ponieważ jego wartością zwracaną jest tablica lub pojedynczy obiekt FileInfo. – vonPryz

10

Istnieje type operators można używać do testowania typ zmiennej. -is jest tym, czego potrzebujesz. Jak tak,

$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! 

więc coś takiego może beused

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