Question Tri des doublons dans un fichier CSV.

Plus d'informations
il y a 12 ans 2 semaines #17111 par Dwelatha
Bonjour à tous,

J'aimerai avoir votre aide concernant le tri de doublons dans un fichier csv d'une centaine de lignes maximum.

Mon fichier comporte les entêtes suivantes:

Dernière communication,GUID,Nom du système

03/03/14 18:48:28,0848BBA6-D010-45B9-8979-2B7FD90F431B,POSTE1
04/03/14 15:38:54,1D6E5669-5E64-4658-A140-BF45914E035C,POSTE1
24/02/14 16:10:49,4F80CE89-5BF0-4DC5-BC05-3C018A558F21,POSTE1
04/03/14 14:28:41,ADDF222B-807D-4A32-AE27-4CF20933FF5B,POSTE1
19/02/14 16:04:43,3B0C4D8B-CA35-467B-9B9B-7789309F68BA,POSTE2
04/03/14 14:38:20,38FB8723-AA89-434B-A8E1-09A8A83D88D1,POSTE2
27/02/14 17:36:24,02FF2A5E-A46F-4006-BEE2-01F336FCE0D0,POSTE2

Le but de ce tri serait de conserver les dates de communications les plus anciennes afin de les rediriger dans un autre csv ou tout simplement dans un fichier texte.

Exemple: garder les information en gras.

Dernière communication,GUID,Nom du système

03/03/14 18:48:28,0848BBA6-D010-45B9-8979-2B7FD90F431B,POSTE1
04/03/14 15:38:54,1D6E5669-5E64-4658-A140-BF45914E035C,POSTE1
24/02/14 16:10:49,4F80CE89-5BF0-4DC5-BC05-3C018A558F21,POSTE1
04/03/14 14:28:41,ADDF222B-807D-4A32-AE27-4CF20933FF5B,POSTE1
19/02/14 16:04:43,3B0C4D8B-CA35-467B-9B9B-7789309F68BA,POSTE2
04/03/14 14:38:20,38FB8723-AA89-434B-A8E1-09A8A83D88D1,POSTE2
27/02/14 17:36:24,02FF2A5E-A46F-4006-BEE2-01F336FCE0D0,POSTE2

Savez vous comment puis je procéder ?
Tout en sachant que je ne maitrise pas le PowerShell :)

Vous remerciant par avance pour votre aide.
Dwelatha.

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

Plus d'informations
il y a 12 ans 2 semaines #17112 par Laurent Dardenne
Salut,
Dwelatha écrit:

Savez vous comment puis je procéder ?

Regrouper les dates sans les heures puis trier les dates avec les heures :
[code:1]
$Old=@()
$new=@()

$O=import-csv c:\temp\datas.csv|
select-object @{Name='DernièreCommunication';E={$_.DernièreCommunication -as [datetime]}},guid,NomDuSystème|
select-object *,@{name='date';e={$_.DernièreCommunication.Date}}|
Group-Object -Property Date|
foreach {
$L=@($_.Group|Sort DernièreCommunication)
$old +=$L[0]
if ($L.count -gt 1)
{$new +=$L[1..$($L.count-1)] }
}

$old
Write-Host ('-'*40)
$new
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 6/03/14 09:24

Tutoriels PowerShell

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

Plus d'informations
il y a 12 ans 2 semaines #17125 par Dwelatha
Bonjour Laurent,

Merci pour votre réponse.
Je jette à œil a votre proposition de code et essaye de m'en inspirer.

Je ne manquerai pas de revenir vers vous en cas de souci ;)

Merci encore.
Dwelatha.

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

Plus d'informations
il y a 12 ans 2 semaines #17126 par Laurent Dardenne
Pour info j'ai corrigé une coquille dans le code:
[code:1]
{$new +=$L[1..$($L.count-1)] }
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 12 ans 2 semaines #17137 par Dwelatha
J'ai pu faire quelques tests et modifier le code que vous m'avez fourni pour mes propres besoins.

[code:1]$Old=@()
$new=@()
$Dcom = \&quot;Dernière Communication\&quot;
$Guid = \&quot;GUID de l'agent\&quot;
$Name = \&quot;Nom Du Système\&quot;

$Input = import-csv .\doublons.csv -delim \&quot;,\&quot;|
select-object @{Name=$Dcom;expression={$_.$Dcom -as [datetime]}},$Guid,$Name |
select-object *,@{name='Date';expression={$_.$Dcom.Date}}|
Group-Object -Property Date|

foreach {
$L=@($_.Group|Sort $Dcom)
$old +=$L[0]
if ($L.count -gt 1)
{$new +=$L[1..$($L.count-1)] }
}
$new
Write-Host ('-'*40)
Write-Host 'Ancienne communication'
$old[/code:1]

Cela fonctionne dans l'ensemble mais j'ai quelques questions :)
Dans ma console powershell, je me retrouve donc avec les éléments suivants en sortie.

- En vert, les informations étant correctement reportés comme étant la plus vieille date de communication.
- En orange, les informations devant être considérées comme ancienne également mais pour lesquelles le code ne fonctionne pas apparemment.
- En violet, les informations étant ok concernant la date de communication la plus récente.

Dernière Communication GUID de l'agent Nom du système Date


----
06/03/2014 10:16:38 8F1F0810-CF83-4F40-AD1A-E99A73830C4D POSTE1 06/03/2014 00:00:00
06/03/2014 10:52:27 8DB63758-64C1-42A6-B15A-7CEAB3B909C7 POSTE1 06/03/2014 00:00:00
06/03/2014 11:08:03 30126CF9-468B-4D51-AE0F-E28EAEC7C418 POSTE2 06/03/2014 00:00:00

06/03/2014 11:44:04 077F3E1D-2E27-44E9-8285-F59244427A45 POSTE3 06/03/2014 00:00:00
06/03/2014 12:35:49 98498F7E-1251-4607-9364-1732E8217891 POSTE4 06/03/2014 00:00:00
06/03/2014 12:37:53 FFAA71C5-BEC0-4073-A79E-2049177DC445 POSTE3 06/03/2014 00:00:00
06/03/2014 14:00:11 99D948A6-0862-4B15-9206-45933E1AB63D POSTE5 06/03/2014 00:00:00
06/03/2014 14:00:57 7F2DC6F3-6EC0-4795-8BEC-A0AA59238C3F POSTE5 06/03/2014 00:00:00
03/03/2014 22:43:05 9AFD43F8-2E45-486A-BA99-E44A587A7F26 POSTE6 03/03/2014 00:00:00
Ancienne communication
06/03/2014 10:13:19 A7E53BD2-6E91-4C73-AAFD-3CA0F4085252 POSTE6 06/03/2014 00:00:00
24/02/2014 10:43:53 EC86E11D-CE5F-46F0-BC12-5725EF372A42 POSTE2 24/02/2014 00:00:00
03/03/2014 17:49:13 AF7457CC-BB07-4FB6-84A9-2E4D27782A76 POSTE4 03/03/2014 00:00:00


Questions:

1/ Je remarque que le champs date est tout le temps à J/M/Année 00:00:00 est ce normal ?

2/ Lorsque la communication diffère de quelques secondes sur le même jour, le tri n'a pas l'air de s'effectuer et je n'arrive pas à comprendre pourquoi.

Pour résumer, cela fonctionne pour les postes 2 et 4.
Il y une inversion concernant le poste 6.
Les postes 1, 3 et 5 ne semble pas être trier car sur le même jour mais à des heures différentes.

Espérant être clair.
Je vous remercie par avance pour votre aide.

Dwelatha.

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

Plus d'informations
il y a 12 ans 2 semaines #17138 par Laurent Dardenne
Dwelatha écrit:

Cela fonctionne dans l'ensemble mais j'ai quelques questions :)

Cet ensemble ne peut répondre qu'aux spécifications énoncées et celles-ci manquaient de précisions.
Dwelatha écrit:

1/ Je remarque que le champs date est tout le temps à J/M/Année 00:00:00 est ce normal ?

Oui, j'ai interprété le pb, car le critère de tri n'était pas spécifié. Le champ Date sert uniquement à regrouper les dates d'un jour donné sans tenir compte de la partie heure.
Dwelatha écrit:

2/ Lorsque la communication diffère de quelques secondes sur le même jour, le tri n'a pas l'air de s'effectuer et je n'arrive pas à comprendre pourquoi.

idem, à specs floues, résultats flous.
Dwelatha écrit:

Je vous remercie par avance pour votre aide.

Sur forum d'entraide, on aide sur des questions technique précise :
Dwelatha écrit:

Espérant être clair.

On ne peut plus.

Tutoriels PowerShell

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

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