2013-07-17 48 views
1

我有一個奇怪的問題,這是我的CSV:空值PowerShell的數組

Serveur;Carte;Cordon;IP;Mac;Vmnic ;Vmnic mac;Connect;Port 
Dexter;eth1;405;172.16.5.117;00:24:e8:36:36:df;Vmnic0;00:50:56:56:36:df;sw-front-1;A1 
Dexter;eth2;14;192.168.140.17;00:24:e8:36:36:e1;Vmnic1;00:50:56:56:36:e1; sw_eq_ds_1;3 
;;;;;;;; 
Gordon;eth1;404;172.16.5.124;b8:ac:6f:8d:ac:b4;Vmnic0;00:50:56:5d:ac:b4;; 
Gordon;eth2;35;192.168.140.114;b8:ac:6f:8d:ac:b6;Vmnic1;00:50:56:5d:ac:b6;; 
Gordon;eth3;254;192.168.33.10;b8:ac:6f:8d:ac:b8;Vmnic2;00:50:56:5d:ac:b8;; 

於是我進口它與下面的代碼的數組:

$Serveur = @() 

Import-Csv C:\Users\aasif\Desktop\myfile.csv -Delimiter ";" |` 
    ForEach-Object { 
     $Serveur += $_.Serveur 
    } 

,並刪除重複值我這樣做:

$Serveur = $Serveur | sort -uniq 

所以,當我顯示我的數組,我得到這兩個值:德克斯特和戈登和第三空值

但我也得到一個空值

下面的代碼返回3

$Serveur.count 

爲什麼?

感謝您的幫助

+1

我得到三個值,其中一個是空的。 當你說「當我顯示我的陣列時,你究竟在做什麼? – Jimbo

回答

7

如果你想排除你可以像這樣

$Serveur = $Serveur | ? { $_ } | sort -uniq 
2

你有3個元素的數組空值,因此計數爲3你從那裏得到的元素行;;;;;;;;不是$null,而是一個空字符串(""),因此它計爲有效元素。如果您想要從陣列中省略空元素,請將其過濾掉,建議使用C.B.

在更一般的說明中,我建議不要使用+=運算符。每個操作都將整個數組複製到一個新的數組中,而這個數組肯定會執行得不好。這裏也完全沒有必要。簡單地echo字段的值和輸出作爲一個整體分配回一個變量:

$csv = 'C:\Users\aasif\Desktop\myfile.csv' 
$Serveur = Import-Csv $csv -Delim ';' | % { $_.Serveur } | ? { $_ } | sort -uniq 
1

如果某人(像我)需要除去從陣列空元素,但沒有排序:

$Serveur = $Serveur | Where-Object { $_ } | Select -Unique