2013-08-16 6 views
5

ファイルにget-contentを実行します。時にはラインがたくさんあるが、それは起こることができる私はPowershell 1行に配列があるかどうかをテストします

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

しかし、唯一の1行を持つようなものをやっていた

のみ1行(あるいは0)がある、GCは、文字列と$を返しますcsv [0]は完全な行の代わりに文字列の最初の文字列を返し、次のSplitは失敗します。

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

と$ csvファイルは、少なくとも行が含まれている場合にのみこれを行うには:

はそれのような何かを行うことは可能ですか?あなたの助けのための

Thxを、 ティム

答えて

6

の代わりにやってbeusedことができるので、同じように、

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

は:

$csv = (gc $FileIn) 

をあなたは今、出力は常になります

$csv = @(gc $FileIn) 

に持っていましたファイルhaに関係なく文字列の配列1行にするかどうか。残りのコードは、$csvを文字列の配列として扱うだけです。このような状況では、出力が配列などであるかどうかを確認するよりも、この方法が優れています。

+0

このアドバイスではたくさんのことがありました! – timmalos

+0

戻り値は配列または単一のFileInfoオブジェクトであるため、これはgciに対して頻繁に行います。 – vonPryz

10

type operators 1は、変数の型をテストするために使用することができますがあります。 -isは必要なものです。したがって、このような何かが

if($csv -is [array]) { 
    # Stuff for array 
} else { 
    # Stuff for string 
} 
関連する問題