Question Eviter doublon fichier csv

Plus d'informations
il y a 14 ans 7 mois #10063 par Laurent Dardenne
Voir aussi ce post , qui contient une fonction New-Hashtable.
Si j'ai le temps je regarderais la méthode la plus efficace des deux, car j'ai un doute sur le coût de l'usage de ScriptBlocks, sur plusieurs centaine d'objets, dans la fonction ConvertTo-Dictionary de Josh Einstein.

L'usage d'une base de données relationnelle dédiée aux traitements de l'infra me semble préférable. Mais cela n'est peut être pas encore entré dans la pratique du \"scripting\" ?

Tutoriels PowerShell

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

Plus d'informations
il y a 14 ans 7 mois #10064 par Arthur
Réponse de Arthur sur le sujet Re:Eviter doublon fichier csv
Salut,

Au pif(:whistle:) c'est pas plus rapide de construire une list avec tous les ordinateurs puis une fois le traitement terminé d'enlever les doublons avec un \"sort -unique\" ?

un peu dans ce genre:

[code:1]$list = New-Object System.Collections.ArrayList($null)
$toto = Get-Process
$list.AddRange($toto)
$list.AddRange($toto)
$list |sort -Unique Processname[/code:1]

Bien évidement ce genre d'approche ne marche pas dans toutes le situations.

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

Plus d'informations
il y a 14 ans 7 mois #10081 par Laurent Dardenne
bilbao écrit:

c'est pas plus rapide de construire une list avec tous les ordinateurs puis une fois le traitement terminé d'enlever les doublons avec un \"sort -unique\" ?

L'inconvénient avec cette approche est qu'on ne peut pas avoir de traitement d'erreur sur les clés dupliquées.
Mais ici comme le besoin est simple, de nombreuses solutions natives en PS feront l'affaire.

De mon côté je suis en train de regarder comment déployer SqlLite via un module Powershell, mais je m'éloigne du sujet sur les doublons :dry:

Tutoriels PowerShell

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

Plus d'informations
il y a 14 ans 7 mois #10084 par Gabriel
Réponse de Gabriel sur le sujet Re:Eviter doublon fichier csv
Laurent, là je suis carrement interessé sur la partie SQLite et powershell. De voir ce que tu fait avec :).

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

Plus d'informations
il y a 14 ans 7 mois #10090 par Laurent Dardenne
tonic8 écrit:

Laurent, là je suis carrement interessé sur la partie SQLite et powershell. De voir ce que tu fait avec :).

Sur Google on trouve qq liens intéressant, sinon, comme je pars du provider ADO dotnet, une recherche en précisant C# renvoi bien plus d'infos.

Pour de faible volume de données, qq dizaine de milliers de ligne, il est fort probable que cela soit plus efficace que l'usage de cmdlet sur des collections indexées.

Dés que j'ai une ébauche je la poste dans le forum contribution.

Tutoriels PowerShell

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

Plus d'informations
il y a 14 ans 6 mois #10095 par Laurent Dardenne
Laurent Dardenne écrit:

Si j'ai le temps je regarderais la méthode la plus efficace des deux, car j'ai un doute sur le coût de l'usage de ScriptBlocks, sur plusieurs centaine d'objets, dans la fonction ConvertTo-Dictionary de Josh Einstein.

L'usage de scriptblock est plus \"lent\" (10 fois plus), on reste tout de même au niveau des ms :whistle:.

[code:1]
function ConvertTo-Dictionary ([ScriptBlock]$KeyExpression,[ScriptBlock]$ValueExpression={$_}) {
begin { $Result = @{} }
process { $Result[(&$KeyExpression)]=(&$ValueExpression) }
end { $Result }
}

function New-HashTable {
# Author: Jeffrey Snover
# Version: 0.1
#Requires -Version 1.0
param(
$Key=$(Throw \"USAGE: New-HashTable -Key <property>\"«»),
[Switch]$NoOverWrite,
[Switch]$MakeArray
)
Begin
{
$hash = @{}
}
Process
{
$Property = $_.$key
if ($NoOverWrite -And $hash.$Property)
{ Write-Error \"$Property already exists\"
}elseif ($MakeArray)
{
if (!$hash.$Property)
{ $hash.$Property = new-object System.Collections.ArrayList
}
[void]$hash.$Property.Add($_)
}else
{
$hash.$Property = $_
}
}
End
{
$hash
}
}


$T=@(
2..251|% {New-Object PsObject -property @{ClientName=\"Srv$_\";IPAdress=\"198.1.1.$_\"}};
2..251|% {New-Object PsObject -property @{ClientName=\"Srv1_$_\";IPAdress=\"198.1.2.$_\"}};
2..251|% {New-Object PsObject -property @{ClientName=\"Srv2_$_\";IPAdress=\"198.1.3.$_\"}};
2..251|% {New-Object PsObject -property @{ClientName=\"Srv3_$_\";IPAdress=\"198.1.4.$_\"}}
)

Measure-Command -Expression {$h=$t|ConvertTo-Dictionary -KeyExpression {$_.ClientName} -ValueExpression {$_}}

Measure-Command -Expression {$h2=$T|new-hashtable -key ClientName }

$T=@(
2..251|% {New-Object PsObject -property @{ClientName=\"Srv2_$_\";IPAdress=\"198.1.3.$_\"}};
2..251|% {New-Object PsObject -property @{ClientName=\"Srv$_\";IPAdress=\"198.1.1.$_\"}};
2..251|% {New-Object PsObject -property @{ClientName=\"Srv3_$_\";IPAdress=\"198.1.4.$_\"}}
2..251|% {New-Object PsObject -property @{ClientName=\"Srv1_$_\";IPAdress=\"198.1.2.$_\"}};
2..251|% {New-Object PsObject -property @{ClientName=\"Srv2_$_\";IPAdress=\"198.1.3.$_\"}};
2..251|% {New-Object PsObject -property @{ClientName=\"Srv3_$_\";IPAdress=\"198.1.4.$_\"}}
2..251|% {New-Object PsObject -property @{ClientName=\"Srv1_$_\";IPAdress=\"198.1.2.$_\"}};
2..251|% {New-Object PsObject -property @{ClientName=\"Srv$_\";IPAdress=\"198.1.1.$_\"}};
)

Measure-Command -Expression {$h=$t|ConvertTo-Dictionary -KeyExpression {$_.ClientName} -ValueExpression {$_}}

Measure-Command -Expression {$h2=$T|new-hashtable -key ClientName }
[/code:1]
A noter qu'avec la fonction ConvertTo-Dictionary, les insertions de doublons sont pénalisantes.<br><br>Message édité par: Laurent Dardenne, à: 21/08/11 19:12

Tutoriels PowerShell

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

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