Question Tri numerique decroissant de fichier csv

Plus d'informations
il y a 1 an 8 mois #32507 par J-L Prout
Je n'arrive pas à mettre en ˜œuvre un tri numérique décroissant de fichier csv. Ça devrait pourtant être simple. Je n'ai pas réussi à trouver de réponse pertinente jusqu'à présent. Je dois avoir un problème avec "-Property" de "Sort-Object". Voici mon script d'essai:


[string]$Rep_temp       = $Env:TEMP                   # Repertoire      des fichiers temporaires
[string] $Fich_temp     = New-Item -Name 'X_arc_ciel.csv'     -Path $Rep_temp -ItemType File
[string] $InterFile_1   = New-Item -Name 'X_arc_ciel_Man.csv' -Path $Rep_temp -ItemType File
[string] $Entete        = 'Rang;Couleur;Compte'
$Entete | Out-File $Fich_temp -Encoding Unicode
[string] $Ligne_1       = '1;Blanc;150'
[string] $Ligne_2       = '2;Rouge;1181'
[string] $Ligne_3       = '3;Bleu;37'
[string] $Ligne_4       = '4;Vert;243'
[string] $Ligne_5       = '5;Jaune;274'
$Ligne_1 | Out-File $Fich_temp -Append -Encoding Unicode
$Ligne_2 | Out-File $Fich_temp -Append -Encoding Unicode
$Ligne_3 | Out-File $Fich_temp -Append -Encoding Unicode
$Ligne_4 | Out-File $Fich_temp -Append -Encoding Unicode
$Ligne_5 | Out-File $Fich_temp -Append -Encoding Unicode

Import-Csv $Fich_temp -Delimiter ';' `
| Sort-Object -Property  @{ Expression = 'Compte'; Ascending = $False } `
| Export-Csv -Path $InterFile_1 -Delimiter ';' -Encoding Unicode -Force

$Lignes = Import-csv $InterFile_1 -Delimiter ';'

:ReLecture

ForEach ( $Objet in $Lignes ) {
  [string] $Rang = $Objet."Rang"
  [string] $Coul = $Objet."Couleur"
  [string] $Cpte = $Objet."Compte"
  Write-Host 'Rang : "' , $Rang , '" - Couleur : "' , $Coul , '" - Compte : "' , $Cpte , '"' -separator ''
}
 

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

Plus d'informations
il y a 1 an 8 mois #32508 par Laurent Dardenne
Salut,
le fichier n'est pas correctement structuré :
$Entete | Out-File $Fich_temp -Encoding Unicode
Il manque le paramètre -Append.

Tutoriels PowerShell

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

Plus d'informations
il y a 1 an 8 mois #32511 par J-L Prout
Cette ligne:

$Entete | Out-File $Fich_temp -Encoding Unicode

est bien la PREMIÈRE ligne du fichier, puisque ce doit être l'en-tête d'un fichier .csv. Pour cette ligne, le paramètre "-Append" est sans intérêt quand le fichier est encore vide.

De toute façon, cela ne résoud pas mon problème de tri NUMÉRIQUE décroissant.

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

Plus d'informations
il y a 1 an 8 mois #32513 par Laurent Dardenne
> le paramètre "-Append" est sans intérêt quand le fichier est encore vide.
Exact, je n'étais pas encore réveillé...

Le problème est dû au faite que Import-csv gère des strings uniquement, il faut modifier le type de la valeur de la propriété 'Compte' :
Import-Csv $Fich_temp -Delimiter ';' |
 foreach-object { 
 $_.Compte=[int]$_.Compte;$_ 
} | Sort-Object -Property  @{ Expression = 'Compte'; Ascending = $False }

Tutoriels PowerShell

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

Plus d'informations
il y a 1 an 8 mois #32514 par Laurent Dardenne
Et la syntaxe du tri :
Sort-Object -Property Compte -Descending
#ou par défaut
Sort-Object -Property Compte  

Tutoriels PowerShell

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

Plus d'informations
il y a 1 an 8 mois #32515 par J-L Prout
Hébin!!! Bravo!!! Mon cher Laurent
Tout cela semble maintenant fonctionner à merveille.
Je me doutais qu'il y avait à régler une question de transtypage.
J'ai aussi retenu le fait que 'Import-csv" ne gère que des chaînes
de caractères.
Grand merci pour ce précieux conseil.

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

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