Array befüllen jedoch Leere und Duplikate entfernen
Hallo,
ich habe nun einiges schon getestet und auch gesucht.
Ich möchte anhand einiger XML Dateien ein Array erstellen das soweit auch funktioniert.
Mir werden aber auch die Leeren IDs mitgenommen das ich eigentlich vermeiden wollte.
Zudem habe ich auch schon versucht duplikate per if-abfrage auszuschließen mit -imatch.
Jedoch jedesmal ohne erfolg.
Wo liegt mein gedankenfehler?
Beste Grüße Markus
ich habe nun einiges schon getestet und auch gesucht.
Ich möchte anhand einiger XML Dateien ein Array erstellen das soweit auch funktioniert.
Mir werden aber auch die Leeren IDs mitgenommen das ich eigentlich vermeiden wollte.
Zudem habe ich auch schon versucht duplikate per if-abfrage auszuschließen mit -imatch.
Jedoch jedesmal ohne erfolg.
$bh = @()
foreach($filebf in Get-ChildItem $target_zwischen_b -file -filter Project*.xml){
$xml = New-Object XML
$xml.Load($filebf.Fullname)
if( $xml.Data.Projektzeile.id -ieq "" -and $xml.Data.Projektzeile.id -imatch $bh){
$bh += $xml.Data.Projektzeile.id
}else{
}
}
echo $bh
echo $bh.count
Wo liegt mein gedankenfehler?
Beste Grüße Markus
Please also mark the comments that contributed to the solution of the article
Content-Key: 64236274787
Url: https://administrator.de/contentid/64236274787
Printed on: May 6, 2024 at 11:05 o'clock
5 Comments
Latest comment
Moin,
Wenn Du $null meinst, dann gilt: "You can have an array that contains one $null value and its count is 1 . But if you place an empty result inside an array then it's not counted as an item. The count is 0 . If you treat the empty $null like a collection, then it's empty." - Wenn Du 0 meinst, dann wäre vermutlich am einfachsten nach deinem foreach soetwas zu machen:
Wenn Du $null meinst, dann gilt: "You can have an array that contains one $null value and its count is 1 . But if you place an empty result inside an array then it's not counted as an item. The count is 0 . If you treat the empty $null like a collection, then it's empty." - Wenn Du 0 meinst, dann wäre vermutlich am einfachsten nach deinem foreach soetwas zu machen:
$Array = @(1, 2, 2, 3, 4, 0, 4, 5, 6, 6, 7)
echo $Array "Einmal mit allem :)"
$Array = $Array | Where-Object { $_ -ne 0 } //oder $null
echo $Array "ohne 0"
$Array = $Array | Select-Object -Unique
echo "Alle einzigartigen Werte"
null
Null als Text oder $null?$bh = foreach($filebf in Get-ChildItem $target_zwischen_b -file -filter Project*.xml){
$xml = New-Object XML
$xml.Load($filebf.Fullname)
$xml.Data.Projektzeile.id
}
$bh = $bh | select -Unique | ?{$_ -ne 'null'}
$bh
Zitat von @MarkusBoehm:
habe es nun etwas umgeschrieben.
damit mir alles herausgefilteret wird:
Viel zu umständlich, kannst du gleich alles in ein Where Object steckendamit mir alles herausgefilteret wird:
$bh = $bh | select -Unique | ?{$_ -ne ""}
$bh = $bh | select -Unique | ?{$_ -ne " "}
$bh = $bh | select -Unique | ?{$_ -ne $null}
$bh = $bh | select -Unique | ?{$_ -notin ('',' ',$null)}
$bh
$bh = $bh | select -Unique | ?{$_ -match '^\d+$'}
-notmatch
-notmatch macht einen Regular Expressions Vergleich!!-notin oder -contains ist dein Freund
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell ...
P.s. die eigentliche Frage des Threads ist beantwortet also bitte als gelöst markieren.