Question Exporter un tableau a plusieurs dimensions en CSV

Plus d'informations
il y a 12 ans 7 mois #15641 par SP
Bonjour,

Je souhaiterai exporter un tableau a plusieurs dimensions stocké dans une variable ($tlConcatTab) vers un fichier CSV ($OutputFile).
J'ai vu la fonction Export-Csv mais je n'arrive pas l'utliser.

J'ai essayer :

[code:1]
$tlConcatTab | Export-Csv -Path $OutputFile
[/code:1]

[code:1]
Export-Csv -Path $OutputFile -InputObject $tlConcatTab[/code:1]

Les deux générent des résultats totalement improbable qui ne contient meme pas les données.

Auriez-vous une solution ?

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

Plus d'informations
il y a 12 ans 7 mois #15642 par Matthew BETTON
Bonjour,

Qu'y a t'il dans '$tlConcatTab' ou comment as tu généré son contenu ?

Quel est le format de '$tlConcatTab' ?

[code:1]

PS> $tlConcatTab

PS > $tlConcatTab | Get-member

[/code:1]

Sans cela... Comment t'aider ?

@ +

Matthew BETTON

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

Plus d'informations
il y a 12 ans 7 mois #15644 par SP
Le contenu de $tlConcatTab

[code:1]Name Value
----
2 {192.168.40.23, 5500, SWE13, Tech Room...}
1 {192.168.40.22, 5500, SWE12, Tech Room...}
0 {Device, Model, Sysname, Syscontact...} [/code:1]

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

Plus d'informations
il y a 12 ans 7 mois #15681 par SP
J'ai pas trouvé comment utilisé la cmd export-csv.
Néanmoins j'ai fait autrement pour transformer mon tableau $global:tlConcatTab (System.Object.Hashtable) au format CSV $Export (System.Array.Object).

[code:1]$global:tlConcatTab[0] | ForEach-Object -process {
if ($TitleLine -eq $null) {$TitleLine = \"ID,$_\"} else {$TitleLine = \"$TitleLine,$_\"}
}
$Export = @(\"$titleLine\"«»)
$global:tlConcatTab.Keys | Sort-Object | Select-Object -Skip 1 | %{
$Export += (@($_) + $global:tlConcatTab.$_) -join \",\"
}
$Export | Out-File $OutputFile[/code:1]

Mes noms de colonne étant dans mon tableau, je fais un traitement avant avec $TitleLine (System.Object.String).

[code:1]$TitleLine
ID,Device,Model,Sysname,Syscontact[/code:1]

Je rajoute la colonne \"ID\" qui correspond a \"Name\" dans $global:tlConcatTab.

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

Plus d'informations
il y a 12 ans 7 mois #15682 par SP
J'ai pas trouvé comment utilisé la cmd export-csv.
Néanmoins j'ai fait autrement pour transformer mon tableau $global:tlConcatTab (System.Object.Hashtable) au format CSV $Export (System.Array.Object).

[code:1]$global:tlConcatTab[0] | ForEach-Object -process {
if ($TitleLine -eq $null) {$TitleLine = \"ID,$_\"} else {$TitleLine = \"$TitleLine,$_\"}
}
$Export = @(\"$titleLine\"«»)
$global:tlConcatTab.Keys | Sort-Object | Select-Object -Skip 1 | %{
$Export += (@($_) + $global:tlConcatTab.$_) -join \",\"
}
$Export | Out-File $OutputFile[/code:1]

Mes noms de colonne étant dans mon tableau, je fais un traitement avant avec $TitleLine (System.Object.String).

[code:1]$TitleLine
ID,Device,Model,Sysname,Syscontact[/code:1]

Je rajoute la colonne \"ID\" qui correspond a \"Name\" dans $global:tlConcatTab.

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

Plus d'informations
il y a 12 ans 7 mois #15691 par Matthew BETTON
sp973 écrit:

Le contenu de $tlConcatTab

[code:1]Name Value
----


2 {192.168.40.23, 5500, SWE13, Tech Room...}
1 {192.168.40.22, 5500, SWE12, Tech Room...}
0 {Device, Model, Sysname, Syscontact...} [/code:1]


Si tu utilises Export-Csv sur ce type d'objet, tu obtiendras 2 colonnes nommées Name et Value.

A priori '$tlConcatTab' est une collection d'objet. Chaque objet dispose des propriétés 'Name' et 'Value'.

La propriété 'Value' contenant un tableau de valeurs, son export dans un fichier csv ne se fait pas simplement.

Mais cela reste envisageable :)

Un exemple :

[code:1]

$tab = @()
$tlConcatTab | Foreach-Object{
$Values = \"\"
Foreach($v in $_.Value){ $Values += \"$v`n\" }
$tab += New-Object PSObject -Property @{ Name = $_.Name ; Value = $Values}
}
$tab | Export-Csv -Path $OutputFile

[/code:1]

Une autre écriture :

[code:1]
$tlConcatTab | Foreach-Object{
$Values = \"\"
Foreach($v in $_.Value){ $Values += \"$v`n\" }
New-Object PSObject -Property @{ Name = $_.Name ; Value = $Values}
} | Export-Csv -Path $OutputFile
[/code:1]

ou bien encore, sur une seule ligne :

[code:1]
$tlConcatTab | Foreach-Object{ $Values = \"\" ; Foreach($v in $_.Value){ $Values += \"$v`n\" } ; New-Object PSObject -Property @{ Name = $_.Name ; Value = $Values)} | Export-Csv -Path $OutputFile
[/code:1]

Dans cet exemple, je récupère chaque valeur du tableau représenté par la propriété Value. J'utilise le '`n' ('new line') comme séparateur.

Si j'ouvre le csv dans Excel, chaque cellule de la colonne 'Value' contient plusieurs lignes et sur chaque ligne on retrouve les valeurs du tableau contenu dans la propriété 'Value'.

Pour faire le test

[code:1]
$tlConcatTab = @()
$tlConcatTab += New-Object PSObject -Property @{Name = 2 ; Value = @('192.168.40.23', '5500', 'SWE13')}
$tlConcatTab += New-Object PSObject -Property @{Name = 1 ; Value = @('192.168.40.22', '5500', 'SWE12')}
$tlConcatTab += New-Object PSObject -Property @{Name = 0 ; Value = @('192.168.40.21', '5500', 'SWE11')}

$tlConcatTab |
Foreach-Object{ $Values = \"\" ; Foreach($v in $_.Value){ $Values += \"$v`n\" } ; New-Object PSObject -Property @{ Name = $_.Name ; Value = $Values}} |
Select-Object Name, Value |
Export-Csv -Path D:\Test.csv -Delimiter \";\" -NoTypeInformation -Encoding UTF8

Invoke-Item D:\Test.csv

[/code:1]

Dans excel, se rendre sur chaque cellule et / ou penser à élargir les lignes pour observer que toutes les valeurs sont bien présentes.

Attention : Si le fichier csv est ouvert au notepad, on ne voit pas les retours chariot, mais ils sont là. Ils sont visibles dans d'autres éditeurs, comme par exemple Notepad++ ...

@ +

Matthew BETTON<br><br>Message édité par: Matthew BETTON, à: 22/08/13 13:50

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

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