Question Modification d'une colonne d'un fichier CSV

Plus d'informations
il y a 10 ans 9 mois #19815 par Clarisse
Et bien, d'après ce que j'ai compris, je dois ajouter ce qui me permettrait d'enregistrer les modifications de chaque ligne.

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

Plus d'informations
il y a 10 ans 9 mois #19816 par Laurent Dardenne
Clarisse écrit:

je dois ajouter ce qui me permettrait d'enregistrer les modifications de chaque ligne.

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.

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.

Plus d'informations
il y a 10 ans 9 mois #19830 par Clarisse
Le problème étant que je n'ai pas vraiment eu le temps de me pencher sur \"les bases\" du PS (enfin, juste ce qu'il fallait pour réussir ce qu'on me demandait de faire)

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.

Plus d'informations
il y a 10 ans 9 mois #19831 par Laurent Dardenne
Clarisse écrit:

Le problème étant que je n'ai pas vraiment eu le temps de me pencher sur les bases du PS

J'ai bien compris, je voulais juste m'en assurer.
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:

J'apprends un peu sur le tas, dirons-nous, mais il est évident que je n'ai pas encore tout compris.

De connaitre les bases est déjà suffisant.
Clarisse écrit:

que je dois pouvoir m'en sortir...

Oui, jusqu'à la prochaine fois :ohmy:

Clarisse écrit:

mais, même les livres pour débutants ne me semblent pas toujours très... accessibles.

Celui-ci est un bon début.
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.

Plus d'informations
il y a 10 ans 9 mois #19833 par Philippe
Laurent Dardenne écrit:

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 :)

Merci Laurent pour ton aide sur l'apprentissage des bases.

Clarisse sur ce point regarde les tutos de Laurent ! Dans ça signature.


Ce 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 \";\"

Donc la deuxième colonne de ton fichier csv

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.

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