If command issue

This topic contains 6 replies, has 3 voices, and was last updated by  Olaf Soyk 1 year ago.

  • Author
    Posts
  • #54674

    lyn wood
    Participant

    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

  • #54682

    Olaf Soyk
    Participant

    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.

  • #54684

    lyn wood
    Participant

    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

  • #54685

    Dan Potter
    Participant

    very simple.

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

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

    • #54689

      Olaf Soyk
      Participant

      @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 ago by  Olaf Soyk. Reason: added example code
  • #54693

    Dan Potter
    Participant

    (compare $arr1 $arr2).inputobject

    • #54694

      Olaf Soyk
      Participant

      that should make it completely clear for Lyn.
      Thanks

You must be logged in to reply to this topic.