joes1609
Goto Top

Vergleich Array mit Multiarray

Hallo,

habe da mal ein Problem.
Ich will werte aus einem Array mit Werten aus einem Mult-array vergleichen.

Wenn ich zwei Arrays vergleiche, bekomme ich das korrekte Ergebnis:
$a1=@(3,11,25,31,37,19)
$b1=@(8,15,16,20,37,31)
$c1 = $a1 | Where {$b1 -Contains $_}
$ofs = ', '  
"Enthalten sind $c1  
"  

Enthalten sind 31, 37

Nun soll aber $a1 ein Multiarray sein und für jeden Eintag verglichen werden.

$a1=@((3,11,25,31,37,19),(9,10,12,16,23,27))
$b1=@(8,15,16,20,37,31)
$c1 = $a1 | Where {$b1 -Contains $_}
$ofs = ', '  
"Enthalten sind $c1  

Da sollte folgenes bei herauskommen:
Enthalten sind 31, 37
Enthalten sind 16

Da kommt aber kein Ergebnis bei heraus.
Muss bestimmt mit foreach gelöst werden, weiß aber nicht wie.

Danke im Voraus.

Gruß Jörg

Content-ID: 384546

Url: https://administrator.de/contentid/384546

Ausgedruckt am: 23.11.2024 um 19:11 Uhr

colinardo
colinardo 26.08.2018 aktualisiert um 13:14:32 Uhr
Goto Top
Servus Joerg,
Muss bestimmt mit foreach gelöst werden, weiß aber nicht wie.
Jepp
$a1=@((3,11,25,31,37,19),(9,10,12,16,23,27))
$b1=@(8,15,16,20,37,31)

$a1 | %{
    "Enthalten sind: $(($_ | ?{$_ -in $b1}) -join ',')"  
}
Grüße Uwe
joes1609
joes1609 26.08.2018 um 13:25:37 Uhr
Goto Top
Vielen Dank
joes1609
joes1609 26.08.2018 um 14:13:46 Uhr
Goto Top
Und wie sieht es aus, wenn ich die Daten aus einer Textdatei einlese will ?

c:\temp\test.txt
3,11,25,31,37,19
9,10,12,16,23,27

$a1=@(Get-content c:\temp\test.txt -Delimiter ',')
$b1=@(8,15,16,20,37,31)

$a1 | %{
"Enthalten sind: $(($_ | ?{$_ -in $b1}) -join ',')"
}

Gibt folgendes Ergebnis

Enthalten sind:
Enthalten sind:
Enthalten sind:
Enthalten sind: 31,
Enthalten sind: 37,
Enthalten sind:
Enthalten sind:
Enthalten sind:
Enthalten sind: 16,
Enthalten sind:
Enthalten sind:
colinardo
colinardo 26.08.2018 aktualisiert um 17:15:57 Uhr
Goto Top
Und wie sieht es aus, wenn ich die Daten aus einer Textdatei einlese will ?
Ähnlich nur das du eben für jede Zeile der Datei die gespliteten Strings erst von einem String in eine Zahl wandeln musst, du kannst ja nicht Birnen mit Bananen vergleichen face-wink: Im Beispiel wird sie jeweils nur im where-object für den Vergleich in eine Zahl gewandelt sie kommt ja eh nur als Ausgabe in einen String also kann sie es auch bleiben.
$b1=@(8,15,50,20,37,31)
gc 'C:\temp\test.txt' | %{  
    "Enthalten sind: $(($_.split(',') | ?{[decimal]$_ -in $b1}) -join ',')"  
}

p.s.
Bitte nutze in Zukunft Code-Tags für deinen Quellcode: <code> Quellcode </code>. Merci.
joes1609
joes1609 26.08.2018 um 17:37:27 Uhr
Goto Top
Dankeschön, passt.
Werde mich an Code-Tags halten.