Question Comparaison de deux fichiers CSV

Plus d'informations
il y a 11 ans 2 mois #18759 par Laurent Dardenne
J'ai un peu de mal à vous suivre, mais je note ceci :
si la collection ne doit pas contenir de doublons, mieux vaut adapter le type, par exemple HashSet.

Celle-ci permet également des comparaisons entre collections plus rapide que compare-object, mais il me reste à étudier la comparasion sur une propriété d'objet.
Je ne comprend pas pourquoi vous ne placez pas l'objet directement dans la collection.

Dans la boucle, $User.FirstName peut être mis en 'cache' avant la seconde boucle, il y aura moins d'accès indexè sur la donnée.

Faute de jeux de test, je ne sais pas si l'ajout d'un membre FullName peut accélérer ce traitement.

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 2 mois #18760 par Philippe

Je ne comprend pas pourquoi vous ne placez pas l'objet directement dans la collection.

j'ai fait ceci :
[code:1][System.Collections.ArrayList]$Names = Import-Csv -Path C:\names.csv -Delimiter \",\"
[/code:1]
ce qui crée une collection contenant des objets [code:1]$Names.GetType()

IsPublic IsSerial Name BaseType

----
True True ArrayList System.Object


$Names|gm

TypeName : System.Management.Automation.PSCustomObject

Name MemberType Definition
----

Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Firstname NoteProperty System.String Firstname=Dupontaaaa
LastName NoteProperty System.String LastName=Pierre0 [/code:1]
mais on gagne zéros seconde en temps de traitement par rapport a du 100% objet

d'ou l'usage de [code:1]$names = New-Object System.Collections.ArrayList
Get-Content -Path C:\names.csv | Foreach-Object { $names.Add(($($_.split(\",\"«»)[0]), $($_.split(\",\"«»)[1]))) | out-null}

[/code:1]qui permet de gagné 25%(et 2 fois plus avec le break) de temps sur les une ou deux heures de traitement

si la collection ne doit pas contenir de doublons, mieux vaut adapter le type, par exemple HashSet.

la il y a une erreur de d'analyse
les doublons n'est pas le probleme mais leurs créations
le script genere 120 milles fois 5 milles utilisateurs moins 1
soit beaucoup trop de doublon

Dans la boucle, $User.FirstName peut être mis en 'cache' avant la seconde boucle, il y aura moins d'accès indexè sur la donnée.

la je peut pas dire mais j'ai déjà trop de temps la dessus

si tu veut faire des testes j'ai généré les fichiers avec ceci :[code:1]$ArrayList = New-Object System.Collections.ArrayList
$ok = 0
$ArrayList.Add((\"Firstname\",\"LastName\"«»))
foreach ($i in 97..122) {
foreach ($j in 97..122) {
foreach ($k in 97..122) {
foreach ($l in 97..122) {
#write-host \"$([char]$i)$([char]$j)$([char]$k)$ok\"
$ArrayList.Add((\"Dupont$([char]$i)$([char]$j)$([char]$k)$([char]$l)\", \"Pierre$ok\"«»)) | out-null
$ok++
if ($ok -ge 120000) {break}
}
if ($ok -ge 120000) {break}
}
if ($ok -ge 120000) {break}
}
if ($ok -ge 120000) {break}
}
$ok
$ofs=','
$ArrayList | Foreach-object {\"$_\" } | Set-Content \"c:\names.csv\"

$ArrayList = New-Object System.Collections.ArrayList
$ok = 0
$ArrayList.Add((\"EmailAddress\",\"FirstName\",\"LastName\",\"LastLogin\",\"FirstLogin\"«»))
foreach ($i in 97..122) {
foreach ($j in 97..122) {
foreach ($k in 97..122) {
foreach ($l in 97..122) {
#write-host \"$([char]$i)$([char]$j)$([char]$k)$ok\"
$ArrayList.Add((\"pdupont@email.com\", \"Dupont$([char]$i)$([char]$j)$([char]$k)$([char]$l)\", \"Pierre$ok\",20141221,20141220)) | out-null
$ok++
if ($ok -ge 5000) {break}
}
if ($ok -ge 5000) {break}
}
if ($ok -ge 5000) {break}
}
if ($ok -ge 5000) {break}
}
$ok
$ArrayList.count
$ofs=','
$ArrayList | Foreach-object {\"$_\" } | Set-Content \"c:\users.csv\"[/code:1]et tu a le script dans les précédants post

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

Plus d'informations
il y a 11 ans 2 mois #18764 par Laurent Dardenne
Le précédent jeux de données renvoi des noms et prénoms identiques il me semble.
J'ai donc récupérer deux jeux à partir d'un site.

Essaie ceci et dis moi si le principe répond à ton besoin :
[code:1]
#Generateur www.mockaroo.com/
# autres sites : c2.com/cgi/wiki?TestDataGenerator
$Users= Import-csv \"c:\temp\users.csv\" -Delimiter ',' |
Foreach {
$FullName=\"{0} {1}\"-F $_.FirstName,$_.LastName
Add-member -InputObject $_ -membertype NoteProperty -Name FullName -Value $FullName -PassThru
}

$Names= Import-csv \"c:\temp\names.csv\" -Delimiter ',' |
Foreach {
$FullName=\"{0} {1}\"-F $_.FirstName,$_.LastName
Add-member -InputObject $_ -membertype NoteProperty -Name FullName -Value $FullName -PassThru
}

$o=compare-object $Names $users -Property Fullname -IncludeEqual|group-object SideIndicator
$o
$o[0]
$o[0].group
[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 8/01/15 10:51

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 2 mois #18767 par alex
Réponse de alex sur le sujet Re:Comparaison de deux fichiers CSV
Bonjour,

Merci de vous être tant investi pour m'aider, je vous en suis vraiment reconnaissant.

J'ai utilisé le script de 6ratgus et il correspond parfaitement à mes besoins.

Merci encore de votre aide.

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

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