IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

import-csv et replace [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut import-csv et replace
    Bonjour,
    Je cherche a remplacer le contenu d'un fichier texte .
    Les valeurs a rechercher (old) et les nouvelles valeurs associées (new) sont stockées dans un fichier csv (séparateur la virgule)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    old,new
    ValeurA1,ValeurB1
    ValeurA2,ValeurB2
    ValeurA3,ValeurB3
    le code ci-dessous ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $data = import-csv moncsv.csv
    foreach ($line in $data){
    $line.old
    $line.new
    get-content -path .\datas\fic1.txt | foreach {$_ -replace $line.old, $line.new}  > test3.txt
    }
    Les valeurs ne sont pas modifiées, alors qu' write-host de $line.old et $line.new est bon ...

    Le code ci-dessous fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $data = import-csv moncsv.csv
    foreach ($line in $data){
    $line.old
    $line.new
    get-content -path .\datas\fic1.txt | foreach {$_ -replace "ValeurA1", "ValeurB1"}  > test3.txt
    }
    Comment dois-je faire pour que les variables soient prises en compte

    Merci

  2. #2
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    salut,

    essaye ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... $_ -replace $($line.old), $($line.new)
    il faut comprendre le méchanisme d''expansion des variables dans powershell, voici un petit exemple explicatif:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PS D:\> $PSObj = New-Object PSObject -Property @{a=1}
    PS D:\> "$PSObj.a"
    @{a=1}.a
    PS D:\> "($PSObj.a)"
    (@{a=1}.a)
    PS D:\> "$($PSObj.a)"
    1
    PS D:\>

  3. #3
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut Walid,
    Citation Envoyé par I'm_HERE Voir le message
    voici un petit exemple explicatif:
    Il manque les explications, c'est surtout un exemple qui affiche qq chose.
    Il me semble que tu présupposes que les lecteurs peuvent interpréter le résultat et de là comprendre le mécanisme.
    Un exemple , chapitre 1.2.

  4. #4
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    Merci de votre aide mais cela ne fonctionne toujours.

    Merci Mr Dardenne, par ailleurs j'ai utilisé votre tutorial sur log4net

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par totoche Voir le message
    Merci de votre aide mais cela ne fonctionne toujours.
    Pas ?
    On t'a donné l'info, Walid le premier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      foreach {
       $_ -replace $($line.old), $($line.new)
    }
    A priori le parseur de PS attend des chaînes...
    Ceci dit, il me semble qu'inverser ta boucle serait préférable.
    Tu peux aussi consulter cette fonction.
    Citation Envoyé par totoche Voir le message
    Merci Mr Dardenne, par ailleurs j'ai utilisé votre tutorial sur log4net
    Tu peux aussi remercier Walid
    Citation Envoyé par totoche Voir le message
    par ailleurs j'ai utilisé votre tutorial sur log4net
    Je devrais le mettre à jour, car il y a 1 ou 2 trucs qui ne fonctionnent pas, et si j'avais le temps j'ajouterais 2-3 bricoles.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Import CSV sous Excel, garder les 0 inutile
    Par ePoX dans le forum Excel
    Réponses: 4
    Dernier message: 26/01/2009, 16h25
  2. [ACCESS 2003] - Importation *.csv
    Par guiguikawa dans le forum Access
    Réponses: 3
    Dernier message: 29/06/2006, 16h19
  3. Importer CSV dans MySQL
    Par The_freeman dans le forum Administration
    Réponses: 6
    Dernier message: 14/02/2006, 22h18
  4. import csv décimale
    Par gIch dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 13/12/2005, 12h46
  5. Importation CSV vers base de données
    Par Brice Yao dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/06/2005, 13h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo