Question Comparaison 2 CSV => Fichier

Plus d'informations
il y a 10 ans 2 mois #21261 par Niamor
Bonjour, Bonjour !

Je suis étudiant, je débute en PS pourtant je dois réaliser un petit projet.

Je m'explique :

Je souhaite comparer 2 fichier CSV.
- Un fichier ancien
- Un fichier nouveau

Je souhaite \"faire tourner la moulinette\" pour envoyer vers un nouveau CSV et afficher les différences.

Ce que j'ai réussi à faire,(Première étape pour que je comprenne le PS) mais mon problème c'est que mes données dans le fichier nouveau sont dans le désordre.

Il faudrait que je puisse rechercher chaque éléments dans le fichier ancien dans le fichier nouveau et s'il n'existe pas, l'inscrire dans un fichier log pour que je puisse connaitre les éléments manquants ou anciens.

Je vous remercie pour votre aide.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 2 mois #21265 par Laurent Dardenne
Salut,
on ne sait pas s'il s'agit de différence de lignes ou de données d'une ligne ou les deux ;-)

Soit tu traites des chaines de caractères soit des objets (cf. Import-CSV + compare-object) sous réserve que la structure soit identique pour les 2 fichiers.

En passant un csv n'a pas de notion d'ordre.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 2 mois #21271 par Niamor
Réponse de Niamor sur le sujet Re:Comparaison 2 CSV => Fichier
Merci d'avoir répondu

Je me suis mal exprimé le sujet est délicat pour moi.

Je souhaiterais que mon script compare les deux fichiers CSV et s'il ne match pas les mêmes infos, il envoie les différences vers un fichier logs.

Par contre, mon problème \"d'ordre\", c'est que je ne veux pas qu'il compare, cellule par cellule.

J'ai besoin de faire un \"ctrl+F\" pour chaque élément de mon fichier \"old\" pour interroger toutes les données de mon fichier \"new\".

J'espère être plus clair dans mon explication.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 2 mois #21272 par Laurent Dardenne
Rien ne vaut un jeu de test :
[code:1]
#origine
$F1=@(
'un;10; A3',
'deux;20; B1',
'trois;30; C5',
'quatre;40; D0'
)

#Donnée identique dans le désordre
$F2=@(
'quatre;40; D0',
'deux;20; B1',
'trois;30; C5',
'un;10; A3'
)

#Données identiques SAUF la 3 ligne, modification de 'trois' en 'cinq'
$F3=@(
'un;10; A3',
'deux;20; B1',
'cinq;30; C5',
'quatre;40; D0'
)

#Données identiques SAUF la 3 ligne, modification de '30' en '20'
$F4=@(
'un;10; A3',
'deux;20; B1',
'trois;20; C5',
'quatre;40; D0'
)

#origine + ajout d'une ligne
$F5=@(
'cinq,;50; F8',
'un;10; A3',
'deux;20; B1',
'trois;30; C5',
'quatre;40; D0'
)

#origine + ajout d'une ligne
$F6=@(
'un;10; A3',
'deux;20; B1',
'trois;30; C5',
'quatre;40; D0'
'Six;60; Z7'
)

#origine suppression d'une ligne existante et ajout d'une ligne
$F7=@(
'deux;20; B1',
'trois;30; C5',
'quatre;40; D0'
'Six;60; Z7'
)



#pas de différence, contenu identique
Compare-Object $F1 $F2

#2 différences, une ligne par fichier
Compare-Object $F1 $F3

#2 différences, une ligne par fichier
Compare-Object $F1 $F4

#1 différence, une nouvelle ligne
Compare-Object $F1 $F5

#1 différence, une nouvelle ligne
Compare-Object $F1 $F6

#2 différences, une ligne par fichier
Compare-Object $F5 $F6

#2 différences, une ligne par fichier
Compare-Object $F1 $F7
[/code:1]
Recherche dans l'aide pour l'interprétation de la propriété SideIndicator et sur le forum pour des exemples de tri selon cette propriété.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 2 mois #21282 par Niamor
Réponse de Niamor sur le sujet Re:Comparaison 2 CSV => Fichier
[code:1]
$new=import-csv F:\newname.CSV -Delimiter \";\"
$old=import-csv F:\oldname.CSV -Delimiter \";\"

$diff=Compare-Object -ReferenceObject $old -DifferenceObject $new -Property Name -IncludeEqual -passThru
$output = @() |
ForEach {
$curr=$_
switch ($_.Group[0].SideIndicator){
\"=>\" {
$old,$new = $curr.Group[0],$curr.Group[1]
break
}
\"<=\" {
$old,$new = $curr.Group[1],$curr.Group[0]
break
}
\"==\" {
$old,$new = $curr.Group[0],$curr.Group[1]
}
}
New-Object PSObject -Property @{
Name = $_.Name
}
}
if ($diff)
{
$output | select-object Name | Export-Csv -path F:\Difference.csv -UseCulture
} else {
Remove-Item F:\Difference.csv -UseCulture -NoTypeInformation
}
[/code:1]

J'ai quelque chose pour ça pour le moment..

Message édité par: Niamor, à: 15/01/16 11:10<br><br>Message édité par: Niamor, à: 15/01/16 13:42

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 10 ans 2 mois #21289 par Laurent Dardenne
Niamor écrit:

J'ai quelque chose

Je confirme :)
L'idée est là, mais pour le moment c'est de l'assemblage :sick:
Tu parles de ligne et maintenant tu manipules des objets...
Et en voyant cela :
[code:1]
$output = @() |
ForEach {...
[/code:1]
J'ai comme l'impression que tu devrais commencer par le début, je me trompe ?

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.058 secondes
Propulsé par Kunena