Question former des fichiers CSV

Plus d'informations
il y a 10 ans 5 mois #20932 par bob kent
former des fichiers CSV a été créé par bob kent
Bonjour à tous :)

J'ai un petit soucis pour manipuler des fichiers CSV, j'explique mon problème :

J'ai créé un script qui une fois exécuté me sort un CSV sur 2 lignes de type :

session A, session B, session C, session D
Valeur A, Valeur B, Valeur C, Valeur D

Les sessions correspondant sont des types (ne bougent pas, 5 ou 6 max) et les valeurs sont des chiffres (par ex 20 sessions de type A).

Je lance ce script (fréquence toutes les 10 mn) par tâche planifié de 8h à 18h pour compter le nombre de session.
J'ai donc en sortie plein de fichiers avec les 2 lignes (sessions et valeur) que je dois concaténer à la main pour sortir tous ces chiffres dans la journée :S et faire un tableau avec graphique du nombre de session selon les types.
Je précise que j'enregistre ces fichiers avec la date (get-date), heure et mn. Par exemple : fichier_2015_10_22_03_30.csv

Mon projet c'est une moulinette qui permettrait de lire chacun de ces fichiers, d'en prendre les valeurs (A, B, etc...) et de les inscrire dans un fichier avec la date (heure-mn).
Outre le fait que je puisse récupérer la date dans le nom de mon fichier, du fait que cela soit une tache planifié, la date est contenue dans les propriété du fichier (on la vois clairement dans l’explorer de dossier).

Exemple du fichier final (voir également PJ) :

- la 1ere colonne avec le type de session (A, B, C, D)
- les autres colonnes l'heure sur la 1ère ligne et avec les valeurs des sessions.

Je lancerai par exemple cette moulinette en début de soirée lorsque tous mes csv du jour sont prêt.

Problème :

Autant j'ai réussi à faire mes exports dans un CSV, autant je n'arrive pas à comprendre comment construire mon fichier de sortie pour une journée.
Je pense qu'il faut que j'utilise \"import-csv\" mais je vois pas comment ouvrir tous les fichiers du jour.....et en plus construire mon tableau final....

Si vous pouviez me mettre sur la voie ;)

Message édité par: Cartoon17, à: 22/10/15 16:24<br><br>Message édité par: Cartoon17, à: 22/10/15 16:25

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

Plus d'informations
il y a 10 ans 5 mois #20937 par Arnaud Petitjean
Réponse de Arnaud Petitjean sur le sujet Re:former des fichiers CSV
Bonjour Cartoon, sois le bienvenu dans le forum !

C'est dommage que tu aies oublié la pièce jointe, car cela nous aiderait beaucoup pour pouvoir t'aider... :P

Import-CSV est une commande très facile à utiliser. Par contre, là où il faut être très vigilant c'est de ne pas oublier de préciser le délimiteur de champs ! Car 9 fois sur 10 les problèmes sont aussi bêtes que cela ! ;)

Une façon simple de vérifier que ton import s'est bien passé, c'est de faire afficher ta variable dans l'interpréteur de commandes. On voit tout de suite la différence.

A bientôt,:)

Arnaud<br><br>Message édité par: Arnaud, à: 22/10/15 20:06

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

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

Plus d'informations
il y a 10 ans 4 mois #20942 par bob kent
Réponse de bob kent sur le sujet Re:former des fichiers CSV
Merci Arnaud,

J'ai commencé à avancer sur la moulinette B)
J'ai réussi à trouver quelques truc qui m'ont inspiré, j'arrive à sortir dans un CSV les données.
J'ai un petit problème pour sélectionner uniquement les fichiers du jour, au mieux je prend ceux de la veille (j'ai joué avec les -lt -match, etc... sa fonctionne pas)

Ensuite, il ne manquent plus qu'une colonnes avec la date/heure et c'est bon ! (peut être avec le paramètre lastwritetime des fichiers)

[code:1]#récupère les fichiers du jour en filtrant les fichiers voulu, avec le délimiter
$a = Get-ChildItem –Path C:\Temp\script_result\ *.csv | Where{$_.LastWriteTime -ge (Get-Date).AddDays(-2) -and $_.Name -match \&quot;Count\&quot;} | import-csv -Delimiter ','
$Tableau =@()

#boucle pour récupérer les data
ForEach ($b in $a) {

foreach ($c in $b){
#Sélection des données
$sca = $c.'count Active'
$scpa = $c.'count a Active'
$scla = $c.'count b Active'
$scd = $c.'count Disconnected'
$scpd = $c.'count c Disconnected'
$scld = $c.'count d Disconnected'
$sct = $c.'count All'


# Mise en tableau des résultats
$Obj = New-Object Psobject
$Obj | Add-Member -Name \&quot;Active\&quot; -membertype Noteproperty -Value $sca
$Obj | Add-Member -Name \&quot;Active A\&quot; -membertype Noteproperty -Value $scpa
$Obj | Add-Member -Name \&quot;Active B\&quot; -membertype Noteproperty -Value $scla
$Obj | Add-Member -Name \&quot;Disconnected\&quot; -membertype Noteproperty -Value $scd
$Obj | Add-Member -Name \&quot;Disconnected C\&quot; -membertype Noteproperty -Value $scpd
$Obj | Add-Member -Name \&quot;Disconnected D\&quot; -membertype Noteproperty -Value $scld
$Obj | Add-Member -Name \&quot;Total\&quot; -membertype Noteproperty -Value $sct
$Tableau += $Obj
#Export csv des résultats
echo $Tableau | export-csv c:\temp\test.csv -encoding \&quot;unicode\&quot; -notype
}

}[/code:1]

Fichier d'entrée :
drive.google.com/file/d/0B7fuX1idObwEMEZ...Y2s/view?usp=sharing

Fichier de sortie pour l'instant avec ce script :
drive.google.com/file/d/0B7fuX1idObwENnp...YUk/view?usp=sharing

Message édité par: Cartoon17, à: 23/10/15 09:45

Message édité par: Cartoon17, à: 23/10/15 09:49<br><br>Message édité par: Cartoon17, à: 23/10/15 14:27

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

Plus d'informations
il y a 10 ans 4 mois #20952 par bob kent
Réponse de bob kent sur le sujet Re:former des fichiers CSV
J'ai réussi à sélectionner les fichiers du jour.

[code:1]
$day = (get-date).day
$a = Get-ChildItem –Path C:\Temp\script_result\ *.csv | Where{$_.LastWriteTime.day -eq \&quot;$day\&quot; -and $_.Name -match \&quot;Count\&quot;} | import-csv -Delimiter ','[/code:1]

Par contre, je galère franchement pour inclure la propriété \&quot;LastWriteTime\&quot; dans mes boucles foreach...j'ai beau manipuler la requête dans tout les sens cela ne fonctionne pas ...:pinch:

L'idéal serait que la valeur de la propriété \&quot;LastWriteTime\&quot; passe dans mon import-csv<br><br>Message édité par: Cartoon17, à: 26/10/15 15:47

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

Plus d'informations
il y a 10 ans 4 mois #20973 par bob kent
Réponse de bob kent sur le sujet Re:former des fichiers CSV
J'ai résolu mon problème.

J'ai finalement laisser tomber le truc pour passer la valeur Lastwritetime dans la boucle ou le import-csv.
si quelqu'un a un tuyau la dessus je suis preneur, pour info.

J'ai ajouter directement la date dans mes fichiers de départ (que je récupère avec la cmdlet Child Item).

a+

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

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