2016-12-12 3 views
0

J'ai deux fichiers CSV dont j'ai besoin de les comparer, puis sortir un nouveau fichier qui aura les nouvelles valeurs de la prophétesse qui change et marquera (highlight) ces propriétés d'une certaine manière. J'ai déjà le fichier résultant avec toutes les valeurs et toutes les propriétés, mais je ne sais pas comment marquer les propriétés spécifiques qui ont changé. Y a-t-il un moyen de faire cela, c'est powershell?Csv diff utilisant powershell et montrant (en surbrillance) les changements sur le nouveau fichier

Voici un échantillon de mon code:

[CmdletBinding()] 
    param(
     [Parameter(Mandatory=$true)] 
     $file1, 
     [Parameter(Mandatory=$true)] 
     $file2 
    ) 
    $content1 = Import-Csv -Path $file1 
    $content2 = Import-Csv -Path $file2 
    $props = $content1 | Get-Member -MemberType NoteProperty | Select-Object -ExpandProperty Name 
    $comparedLines = Compare-Object $content1 $content2 -Property $props -PassThru | Where-Object {$_.SideIndicator -eq "=>" } 

    $comparedLines | Export-csv -Path C:\FullPUF\Difference.csv –NoTypeInformation 

Répondre

1

Donc, si je comprends bien, $content2 est le fichier le plus récent, non?

Si tel est le cas, alors $comparedlines contiendra toutes les valeurs qui ont changé. Si c'est vrai, alors nous sommes en affaires, parce que Doug Finke a écrit un module PowerShell absolument génial appelé importExcel qui va rendre cela trivialement facile. Mais d'abord, comment ai-je fait ça?

J'avais besoin de fichiers à tester, et je n'avais pas votre fichier source, donc je ne pouvais pas deviner les valeurs. Je viens de faire un simple fichier CSV avec une valeur Nom et Position, et j'ai changé les numéros de Position entre Content1 et Content2.

enter image description here

Comment résoudre ce problème, d'abord, téléchargez Import-Excel en ce moment. Si vous êtes sur la version PowerShell 4.0 ou supérieur, vous pouvez l'installer à partir de PowerShell comme ceci:

Find-Module ImportExcel | Install-Module 

Ce module a le concept de règles de filtrage ConditionalText. Vous pouvez en créer un nouveau comme ça.

1..5 | Export-Excel C:\temp\test.xslx -Show` 
    -ConditionalText (New-ConditionalText -ConditionType GreaterThan 3) 

Cette sortie de volonté et d'afficher une nouvelle feuille de calcul avec les numéros 1 à 5 dans, et mettre en évidence les plus élevés que 3.

Nous pouvons aussi lignes de surbrillance ContainsText qui correspond à une valeur que nous connaître. Donc, nous prenons la valeur de $ comparisonLines en utilisant ForEach-Object, et créons une règle New-ConditionalText pour mettre en évidence la ligne si elle contient l'une des propriétés.

$highlight =$comparedLines | % {New-ConditionalText -ConditionalType ContainsText $_.Name} 

Ensuite, nous allons faire écho le contenu de content2 $, et utiliser Export-Excel pour créer un nouveau fichier .xslx et appliquer une règle de mise en forme conditionnelle à elle.

$content2 | Export-Excel r:\test.xlsx -show -ConditionalText ($highlight) 

Et la sortie

enter image description here

Vous aurez probablement besoin de jouer avec le code un tout petit peu, et de modifier pour l'adapter à ce que vos colonnes sont appelés, mais comment vous pouvez exporter un csv et mettre en évidence les différences en utilisant PowerShell. Sauf qu'il n'y a pas de surlignage ou de format de texte dans un fichier .csv, vous devez donc utiliser une feuille de calcul Excel à la place. Lemme savoir si vous avez besoin de moi pour creuser plus profond partout :)

+0

Nous vous remercions de votre suggestion FoxDeploy. Comme vous l'avez dit, $ content2 est le fichier le plus récent, ce qui signifie que $ content1 est l'ancien fichier.Et les lignes qui ont changé entre-temps sont dans $ compareLines. Maintenant, dans mon scénario je ne sais pas quelles propriétés spécifiques ont changé de l'ancien fichier dans le nouveau fichier, et je voudrais avoir un moyen de comprendre cela dynamiquement. Donc, dans le fichier de sortie, je voudrais avoir la cellule spécifique colorée s'il y avait un changement de l'ancien fichier au nouveau, Quelque chose de similaire à votre fichier résultat mais avec la cellule où le changement est arrivé (qui est dans la propriété Rank) – Moyeto

+0

Pour vous aider, j'ai besoin de copies de vos fichiers d'entrée. En l'état, je pense que cela vous amène dans la bonne direction, et est probablement digne d'être marqué «Réponse», n'est-ce pas? :) – FoxDeploy