2013-08-16 38 views
5

Tôi thực hiện việc nhận nội dung trên một tệp. Đôi khi có rất nhiều dòng, nhưng nó có thể xảy ra chỉ có một dòng (hoặc thậm chí 0)Kiểm tra Powershell nếu mảng trong một dòng

tôi đang làm một cái gì đó giống như

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

Nhưng với chỉ một dòng, gc trả về một chuỗi và $ csv [0] trả về ký tự đầu tiên của chuỗi thay vì dòng hoàn chỉnh và phân tách sau không thành công.

Có thể làm điều gì đó như:

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

Và để làm được điều đó chỉ khi $ csv chứa ít nhất một dòng?

Thx giúp đỡ của bạn, Tim

Trả lời

6

Thay vì thực hiện:

$csv = (gc $FileIn) 

bạn phải

$csv = @(gc $FileIn) 

Bây giờ đầu ra sẽ luôn luôn được một chuỗi các chuỗi không phân biệt tệp ha ving một dòng hay không. Phần còn lại của mã sẽ chỉ cần xử lý $csv dưới dạng một chuỗi các chuỗi. Bằng cách này là tốt hơn so với việc phải kiểm tra xem đầu ra là một mảng vv, ít nhất là trong tình huống này.

+0

Wow thx rất nhiều cho lời khuyên này! – timmalos

+0

Tôi thực hiện điều này thường xuyên với gci, vì giá trị trả về của nó là một mảng hoặc một đối tượng FileInfo duy nhất. – vonPryz

10

type operators người ta có thể sử dụng để kiểm tra kiểu của một biến. -is là thứ bạn cần. Giống như vậy,

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

Vì vậy, một cái gì đó như thế này có thể beused

if($csv -is [array]) { 
    # Stuff for array 
} else { 
    # Stuff for string 
} 
Các vấn đề liên quan