Author Posts

September 28, 2016 at 5:30 am

I have been trying to compare 2 arrays with the if command and I am having trouble understanding where I am going wrong, I have been using the ForEach to search each line which as far as I can tell is loading properly and then using an if statement I have been using the Where-Object to compare the second array and I do not think the data is coming out right.

Sample
If (!($file2 | Select-Object -Unique {$_.ID -ne $line.ID})

What is the best way to display the output of the above sample (especially the $_.ID) so I can check to make sure it is working it correctly.

Thanks

September 28, 2016 at 8:38 am

Lyn, the result of an if statement is either $true or $false. So it does not make sense to compare arrays with it. You would have to extract each item from each array and compare it to every single item of the other array. But with Compare-Object Powershell does the trick for you as I tried to show for you in your other thread.

September 28, 2016 at 12:56 pm

Hi Olaf,

I understand that one way is to use the compare-object although I did get the Where-object to work with a lot of reading and experimenting. I do appreciate your advice and help.

Below is the final script that worked for me:

# Comparing 2 CSV files and exporting difference to seperate a file
$file1 = Import-Csv ".\SAS1.csv" # SAS file
$file2 = Import-Csv ".\Acer.csv" # Acer File

$arrResult = @()

ForEach ($line in $file1)

{
If (!($file2 | Where-Object {$_.'Unique ID' -eq $line.'Unique ID'}))

{
$arrResult += $line
}
}

$arrResult | Export-Csv ".\NewStudents.csv" -NoTypeInformation

Thanks again for your help Olaf

September 28, 2016 at 1:35 pm

very simple.

$arr1 = 1..10
$arr2 = 1..15

$arr2 | ? {$_ -notin $arr1}

September 28, 2016 at 2:07 pm

@Dan

that only gives you the differences from array 2. If you would like to have the differences from both arrays you would have to do it also wise versa, right?

Like this:

$arr1 = 1..10
$arr2 = 5..15
($arr1 | ? {$_ -notin $arr2}) + ($arr2 | ? {$_ -notin $arr1})
  • This reply was modified 1 year, 12 months ago by  Olaf Soyk. Reason: added example code

September 28, 2016 at 2:38 pm

(compare $arr1 $arr2).inputobject

September 28, 2016 at 2:40 pm

that should make it completely clear for Lyn.
Thanks