2

奇妙な問題があります。これは私の CSV です。

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

したがって、配列を表示すると、次の 2 つの値が取得されます。デクスターとゴードン、および 3 番目の null 値です。

しかし、空の値も取得します

次のコードは 3 を返します

$Serveur.count

なんで?

ご協力いただきありがとうございます

4

3 に答える 3

8

空の値を除外したい場合は、次のようにすることができます

$Serveur = $Serveur |  ? { $_ } | sort -uniq
于 2013-07-17T19:22:27.270 に答える
3

(私のような)誰かが配列から空の要素を削除する必要があるが、並べ替えを行わない場合:

$Serveur = $Serveur | Where-Object { $_ } | Select -Unique
于 2015-05-17T11:08:31.550 に答える
2

3 つの要素を持つ配列があるため、カウントは 3 です。行から取得した要素;;;;;;;;$nullではなく、空の文字列 ( "") であるため、有効な要素としてカウントされます。配列から空の要素を省略したい場合は、CBが提案したようにそれらを除外します。

より一般的な注意として、+=演算子を使用しないことをお勧めします。各操作では、配列全体が新しい配列にコピーされますが、パフォーマンスが低下することは間違いありません。ここでも完全に不要です。フィールドの値を単にエコーし、出力全体を変数に割り当てます。

$csv = 'C:\Users\aasif\Desktop\myfile.csv'
$Serveur = Import-Csv $csv -Delim ';' | % { $_.Serveur } | ? { $_ } | sort -uniq
于 2013-07-17T21:45:04.987 に答える