Question Insérer colonne dans tableau

Plus d'informations
il y a 8 ans 10 mois #23592 par Steve
Bonjour @ toutes / tous,

Je bloque depuis beaucoup trop longtemps sur un problème \"simple\".

J'ai un script qui lance l'utilitaire du.exe (calculer taille d'arborescence. Celui-ci me retourne un fichier csv que récupère, réorganise selon mes besoins d'analyse.
L'idée est de récupérer les tailles d’arborescence, de les récupérer jour par jour et de voir comment évolue le tout.
Je fais une stat de la taille actuelle avec la taille précédente et je peux savoir l'accroissement ou le décroissement.

Mon fichier csv ressemble à ceci :

path Size oldSize up down
e:\ 1267100 1274149 1
e:\truc 772170 770126 0
e:\truc\test 464431 462904 0
e:\truc\test\b 232225 231454 0
e:\t1 192432 192322 0
e:\t1\t2\s 170874 170317 0
e:\t1\t2 135268 135212 0


Ce résultat est la v1 de mon script, tout roule mais l'idée est de remplacer les champs \"size\" et \"oldSize\" en la date du jour du lancement du script.
J'essaie en vain d'insérer une colonne à l'indice 2 ( après \"path\"). C'est assez simple dans d'autre langage et si je ne me trompe pas c'est le tri à bulle ( ou tri par insertion). J'ai fais des recherches et impossible d'appliquer quelque chose de viable.

Voici un exemple du résultat souhaité :

résultat à la date du 08-05-2017 :
path 08-05-2017 07-05-2017 up down
résultat à la date du 10-05-2017 :
path 10-05-2017 09-05-2017 08-05-2017 07-05-2017 ...


Si vous avez une idée, je suis preneur .
Aussi j'avais d'autre idée de \"contournement\" :

Créer un fichier de 31 champs, insérer chaque fois le résultat au champ n ( j'aurai dans ce cas 1 fichier / mois)

Jouer avec le sort sur les dates et tailles et remettre le résultat en csv.

Pouvez-vous m'aider svp ? Bonne journée @ vous

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

Plus d'informations
il y a 8 ans 10 mois #23594 par Laurent Dardenne
Salut,
donne nous un exemple de ton cvs avant et après.
Quelles modifications de structure tu veux faire.

Tutoriels PowerShell

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

Plus d'informations
il y a 8 ans 10 mois #23595 par Steve
Réponse de Steve sur le sujet Re:Insérer colonne dans tableau
Salut Laurent,

Voici la tête du csv :
Exemple :

path;Size;oldSize;up;down
e:\;1267100;1274149;;1
e:\test;772170;770126;0;
e:\test\DOCtest;464431;462904;0;
e:\testBis;96863;106269;;9


Je vais remplacer les champs size et oldSize par la date à laquelle le résultat est prit.

path;09-05-2017;08-05-2017;up;down
e:\;1267100;1274149;;1
e:\test;772170;770126;0;
e:\test\DOCtest;464431;462904;0;
e:\testBis;96863;106269;;9


J'essaie d'insérer une nouvelle colonne qui portera comme nom la date du jour et qui viendra s'insérer après l'entête \"path\" comme suit :

path;10-05-2017;09-05-2017;08-05-2017;up;down
e:\;1297200;1267100;1274149;;1
e:\test;673190;772170;770126;0;
e:\test\DOCtest;768211;464431;462904;0;
e:\testBis;367419;96863;106269;;9


La date la plus récente doit simplement être la premiere colonne après le chemin de fichier.

Que ce soit de le transformer en un object, tableau, j'ai le même problème, je n'arrive pas à insérer une colonne à l'endroit voulu.<br><br>Message édité par: Anoskar, à: 10/05/17 13:44

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

Plus d'informations
il y a 8 ans 10 mois #23598 par Laurent Dardenne
Anoskar écrit:

Que ce soit de le transformer en un object, tableau, j'ai le même problème, je n'arrive pas à insérer une colonne à l'endroit voulu.

Ah, par défaut l'ordre des propriétés d'un objet n'est pas respecté.
Depuis la v3 tu peux faire ceci :
[code:1]

[PSCustomObject]$O=@{
Name = 1
Date = 2
Size = 3
}
$o
# Name Value
# ----
# Date 2
# Name 1
# Size 3
$h=[ordered]@{
Name = 1 #ou $old.Name
Date = 2
Size = 3
}
$o=new-object PSCustomObject -Property $h
$o
# Name Value
# ----
# Name 1
# Date 2
# Size 3
[/code:1]
L'ajout de membre fonctionne, à vérifier si après la reconstruction de chaque objet l'export respecte tjr l'ordre (à priori oui).

Tutoriels PowerShell

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

Plus d'informations
il y a 8 ans 10 mois #23604 par Marc
Réponse de Marc sur le sujet Re:Insérer colonne dans tableau
Bonjour,

tu peut aussi utiliser des DataTable pour gérer l'ordre de tes colonnes.

Le plus dure étant de transformer les PSOject en DataTable.

La DataTable est psychorigide comparé à un PSOject mais dans certain cas elle est plus pratique.
Tout dépend du besoin.

[code:1]
#Création d'un object
$ImportCSV = Import-Csv c:\temp\wp.csv -UseCulture

#Initialisation d'une DataTable
$DataBase = New-Object System.Data.DataTable

#Récupération des noms des colonnes
$columns = $ImportCSV|Get-Member -MemberType NoteProperty

#Création des colonne dans la DataTable
foreach($column in $columns)
{
[void]$DataBase.Columns.Add($column.Name)
}

#Remplissage de la datatable
foreach($line in $ImportCSV) #&lt;-- On prend les lignes du CSV
{
$row = $DataBase.NewRow() #&lt;-- Initialisation d'un objet type DataRow
foreach($column in $DataBase.Columns) #&lt;-- Récupération du nom de chaque colonne
{
$row.$($column.ColumnName) = $line.$($column.ColumnName) #&lt;-- On rempli la ligne DataRow
}
$DataBase.Rows.Add($row) #&lt;-- On ajoute la DataRow dans la DataTable
}


#Enfin ce qui nous intéresse :)
[void]$DataBase.Columns.Add('coucou') #&lt;-- On ajoute une colonne
$DataBase.Columns.SetOrdinal(0) #&lt;-- On la déplace ou l'on veut
[/code:1]<br><br>Message édité par: marcci, à: 11/05/17 10:58

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

Plus d'informations
il y a 8 ans 10 mois #23613 par Steve
Réponse de Steve sur le sujet Re:Insérer colonne dans tableau
Bonjour,

Merci pour vos retour,

J'ai hâte de tester tout cela, je fais le retour dès je l'aurai mis en pratique.

Merci encore !

Passez une bonne journée :)

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

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