Question Mise en forme d'un CSV | Trier par date

Plus d'informations
il y a 1 an 10 mois #32306 par Laurent Dardenne
Je ne vois pas ma proposition de transformation dans ton code...

Tutoriels PowerShell

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

Plus d'informations
il y a 1 an 10 mois - il y a 1 an 10 mois #32307 par Zamboni
Pardon, en effet il est sur un autre onglet PowerShell (ou je récupère le résultat du script précédent) pour segmenter en parties, avant de tout imbriquer dans un script final
(Les #notations serviront à ce que quelqu'un d'autre dans l'entreprise puisse éditer mon code au besoin)
cls
<# ♣ LIGNES A REMPLIR ♣ : 6/ 25/ 26/ 30/ 31

 ♣ A REMPLIR : DOSSIER ou sont stockés les logs. Garder le "\*.rpt"
 Exemple: C:\xxx\yyy\*.rpt                                 #>
$a = Get-Content C:\Users\zambonis\EXL\Logirpt\*.rpt |

<# Épure les logs : Ne garde que les résumés des rapports de de hh:mm
Si besoin de plus d'heures/ modifier l'heure voulue:
 --> -match 'rows selected|hh:mm|hh:mm|hh:mm'
 --> -Pattern "hh:mm|hh:mm|hh:mm"                          #>
Where-Object {$_ -match 'rows selected|23:30'} |
Select-string -Pattern "23:30" -Context 0,1 


# NE PAS TOUCHER : Mise en forme 
$b = $a -replace '>|rows selected.',''  
$c = $b -replace '  no rows selected',' 0'
$d = $c -replace '[ ]+',' ' |

<# ♣ A REMPLIR : Désignez le chemin du DOSSIER du csv.
 - Mettre le même chemin aux 4 liens suivants
 - Garder le ".csv" et les "\temp.txt" à la fin.
Exemples: "C:\xxx\yyy\zzz.csv" et "C:\xxx\yyy\temp.txt"    #>
Set-Content C:\Users\zambonis\EXL\Logicsv\temp.txt
$e = Get-content C:\Users\zambonis\EXL\Logicsv\temp.txt
$f = $e.Substring(1) |

# ♣ A REMPLIR : Nommer le .csv: "c:\xxx\yyy\NOM.csv"
Set-Content C:\Users\zambonis\EXL\Logicsv\test3.csv
#Remove-Item C:\Users\zambonis\EXL\Logicsv\temp.txt

Get-Content C:\Users\zambonis\EXL\Logicsv\test3.csv -ReadCount 2 |
% {$o=1|select-object date,Déconnexions;$o.Date=$_[0];$o.Déconnexions=$_[1] ;$o } |

#Get-Content C:\Users\zambonis\EXL\Logicsv\test3.csv -ReadCount 2 |
#% { New-Object -TypeName psCustomObject -Property @{Date=$_[0];Déconnexions=$_[1]} }

<#
$Objet=1|select Date,Déconnexions
$Objet.ToString()
#chaine vide

"$Objet" #Transformation interne par PS lors d'une substitution |
#@{Date=; Déconnexions=}
#>

Set-Content C:\Users\zambonis\EXL\Logicsv\test4.csv
Dernière édition: il y a 1 an 10 mois par Zamboni.

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

Plus d'informations
il y a 1 an 10 mois - il y a 1 an 10 mois #32308 par Laurent Dardenne
Le cmdlet Set-Content traite du texte, Export-csv traite du texte structuré :
Get-Content C:\Users\zambonis\EXL\Logicsv\test3.csv -ReadCount 2 |
Foreach-Object { New-Object -TypeName psCustomObject -Property @{Date=$_[0];Déconnexions=$_[1]} } |
Export-CSV C:\Users\zambonis\EXL\Logicsv\test4.csv

Sous Powershell on manipule des objets que l'on peut transformer dans un format particulier (CSV,XML,JSON,etc).

Tutoriels PowerShell
Dernière édition: il y a 1 an 10 mois par Laurent Dardenne.
Les utilisateur(s) suivant ont remercié: Zamboni

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

Plus d'informations
il y a 1 an 10 mois - il y a 1 an 10 mois #32309 par Zamboni
Ton dernier script faisait une seule colonne dans Excel, au final j'ai fait autrement en intégrant ton premier script, et en enlevant les "@{date=" et "déconnexion}". Le résultat final correspond à peu près à mes attentes

Ce qui donne une fois fini:
cls
<# 
♣ Ce script analyse tous les rapports, et créé un fichier Excel qui recense les déconnexions de chaque jour  ♣
  Ouvrir le fichier de sortie, dans Excel sélectionner tout le tableau:
  - Onglet accueil/ trier et filtrer -> "du plus ancien au récent"
 
♣ DÉFINISSEZ LES CHEMINS ♣
Le fichier de sortie doit être comme tel:       'C:\XXX\YYY\Nom_fichier.csv'
Le dossier ou sont stockés les rpt doit être :  'C:\xxx\yyy\*.rpt'
Les fichiers temp_a et temp_b sont temporaires: 'c:\xxx\yyy\temp_a.txt'
#>
$FICHIER_DE_SORTIE= 'C:\Users\zambonis\EXL\Logicsv\rapport.csv'
$DOSSIER_DES_RPT = 'C:\Users\zambonis\EXL\Logirpt\*.rpt'
$temp_a = 'C:\Users\zambonis\EXL\Logicsv\temp_a.txt'
$temp_b = 'C:\Users\zambonis\EXL\Logicsv\temp_b.txt'


$a = Get-Content $DOSSIER_DES_RPT |

<# 
Si besoin d'une heure différente que 23:30 et/ou de plusieurs horaires:
 --> -match 'rows selected|hh:mm|hh:mm|hh:mm'
 --> -Pattern "hh:mm|hh:mm|hh:mm"                         
  #>
Where-Object {$_ -match 'rows selected|23:30'} |
Select-string -Pattern "23:30" -Context 0,1 

# Mise en forme 
$b = $a -replace '>|rows selected.',''  
$c = $b -replace '  no rows selected',' 0'
$d = $c -replace '[ ]+',' ' |
Set-Content $temp_a

$e = Get-content $temp_a
$f = $e.Substring(1) |
Set-Content $temp_a 
 
Get-Content $temp_a -ReadCount 2 |
% {$o=1|select-object date,Déconnexions;$o.Date=$_[0];$o.Déconnexions=$_[1] ;$o } |
Set-Content $temp_b

$g = Get-Content $temp_b
$h = $g -replace '@{date=|Déconnexions=|}',''  |
Set-content $FICHIER_DE_SORTIE

Remove-Item $temp_a
Remove-Item $temp_b


Et sur Excel, une fois le tri appliqué

 A                                    B
26/04/2022 23:30             0
27/04/2022 23:30             42

Encore merci, j'y serai encore sans ton idée du Select-String -contexte et ton script du ReadCount.
Ce projet et ton aide m'ont permis de m'améliorer en Powershell.

Bonne journée à toi :) 
Dernière édition: il y a 1 an 10 mois par Zamboni.

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

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