Question
Modification d'une colonne d'un fichier CSV
- Clarisse
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 5
- Remerciements reçus 0
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
Ok, mais le pipeline concerne du code qui émet des données, dans ton cas la variable $cvsFile est une donnée, ce que tu veux faire ne peut donc pas fonctionner de cette manière.je dois ajouter ce qui me permettrait d'enregistrer les modifications de chaque ligne.
Il te faut ici utiliser une résultat intermédiaire :
[code:1]$NewLine=$line.Substring(2,40)
[/code:1]
Tu devrais prendre le temps d'apprendre les bases de Powershell, car là tu es mal partie
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Clarisse
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 5
- Remerciements reçus 0
J'ai dû me \"plonger\" dans powershell parce qu'on me l'a demandé (je suis apprentie, y avait un besoin, fallait que je le réalise) il y a quelques mois et qu'il fallait un résultat assez rapide. Je m'en suis sortie (difficilement, certes). J'apprends un peu sur le tas, dirons-nous, mais il est évident que je n'ai pas encore tout compris.
Etant donné que ce qu'on me demande ne me semble pas très compliqué (jusqu'à présent), je me dis que ça peut le faire et que je dois pouvoir m'en sortir...
Je me doute bien que le mieux serait de me poser avec un bon livre et des exos, mais, même les livres pour débutants ne me semblent pas toujours très... accessibles.
Bref.
Là, le script que je veux (que j'aimerais !) faire (et réussir), on ne me l'a pas imposé. J'essaye de débloquer une situation dans laquelle je galère puis plusieurs semaines, et ce script pourrait m'aider à contourner un problème... après, il est clair que si j'avais vu une autre solution, m'évitant de scripter, je l'aurais utilisée...
Merci pour votre indication.
Donnée telle quelle, je ne sais pas trop quoi en faire, mais je vais bien finir par trouver.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
- Messages : 6311
- Remerciements reçus 68
J'ai bien compris, je voulais juste m'en assurer.Le problème étant que je n'ai pas vraiment eu le temps de me pencher sur les bases du PS
Je comprends parfaitement le manque de temps, ceci dit pour automatiser des traitements afin de gagner du temps, il faut déjà accepter d'en perdre...
Clarisse écrit:
De connaitre les bases est déjà suffisant.J'apprends un peu sur le tas, dirons-nous, mais il est évident que je n'ai pas encore tout compris.
Clarisse écrit:
Oui, jusqu'à la prochaine foisque je dois pouvoir m'en sortir...
Clarisse écrit:
Celui-ci est un bon début.mais, même les livres pour débutants ne me semblent pas toujours très... accessibles.
Cela dépend aussi d'où tu parts en scripting
Une solution à valider :
[code:1]
$FichierCSV = 'C:\Users\user\Documents\folder\fichier.csv'
#L'index d'une chaine débute à zéro
$Max=40-1
#lit les données
#Construit un tableau d'objet
$Datas = Import-csv $FichierCSV -Delimiter \";\"
#Transforme une donnée puis l'écrit dans un CSV
#Boucle sur les données contenus dans le tableau d'objet
$Datas|
Foreach-Object{
$objetCourant=$_
$objetCourant.Colonne.Substring(0,$max)
#émet l'objet modifié dans le pipeline
Write-Output $objetCourant
}|
Export-csv $FichierCSV -Delimiter \";\"
[/code:1]
Reste à préciser le nom de la propriété (colonne) à modifier.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
- Messages : 1778
- Remerciements reçus 21
Merci Laurent pour ton aide sur l'apprentissage des bases.Clarisse écrit:
Il te faut ici utiliser une résultat intermédiaire :
[code:1]$NewLine=$line.Substring(2,40)
[/code:1]
Tu devrais prendre le temps d'apprendre les bases de Powershell, car là tu es mal partie
Clarisse sur ce point regarde les tutos de Laurent ! Dans ça signature.
Donc la deuxième colonne de ton fichier csvCe que je veux, c'est garder tout ce qu'il y a entre les \";\".
Or, dans mon fichier, je n'ai que le \"2\" avant le \";\"
a partir de ton code ça donne ceci :
[code:1]$csv = 'C:\Users\user\Documents\folder\fichier.csv'
$csvfile = Import-csv $csv -Delimiter \";\"
Foreach ($line in $csvfile) {
$line.colonne.Substring(2,40) | out-file 'C:\Users\user\Documents\folder\fichier2.csv' -Append
} [/code:1]
mais je pense que cette version sera plus rapide a s'executé, à toi de faire un test :
[code:1]$csv = 'C:\Users\user\Documents\folder\fichier.csv'
$csvfile = Import-csv $csv -Delimiter \";\"
Foreach ($line in $csvfile) {
$line.colonne.Substring(2,40) >> 'C:\Users\user\Documents\folder\fichier2.csv'
} [/code:1]
Pour finir ta formation sur ce script,
Import-Csv découpe déjà chaque ligne en fonction du délimiteur que tu lui a donné ! (soit le point-virgule)
Donc le résultat dans fichier2.csv ne devrait pas être bon !
plusieurs solutions à ce problème :
solution 1 :
- lire d'abord le fichier avec get-content puis utilisé la boucle foreach déjà faite mais sans le mot clé \"colonne\"
solution 2 :
- lire avec import-csv puis utilisé la boucle foreach déjà faite avec le mot clé \"colonne\" mais sans le substring
- pour cette option, il faut que le fichier csv contienne une ligne entête sinon il te faut l'ouvrir comme ceci :
[code:1]$csvfile = Import-csv $csv -Delimiter \";\" -Header @(\"col1\", \"colonne\", \"col3\"«»)[/code:1]
il y d'autre solutions possible, par exemple en utilisent un tableau intermédiaire que tu enregistre a la fin (sans doute le plus rapide) comme exemple de Laurent
mais pour le moment je m'arrête la !
PS : je vois que Laurent avais déjà répondu être temps
tu aura donc deux version d'explication pour ton script !
Pas toujours simple de répondre pendant le travail (et oui je travail aussi !!!)<br><br>Message édité par: 6ratgus, à: 1/06/15 17:30
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Modification d'une colonne d'un fichier CSV