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 :

Remplacer valeurs dans un fichier depuis un fichier csv [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 7
    Par défaut Remplacer valeurs dans un fichier depuis un fichier csv
    Bonjour, je suis débutant en script et j'aimerais de l'aide car je ne trouve pas la solution tout seul ( c'est surement très simple pour vous)

    Il faut que je remplace certaines chaines de caractères dans un fichier texte par des valeurs présentes dans un fichier csv.

    Mon fichier csv se présente comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    amodif,modif
    ##AGENCE##,test
    ##IPPUBLIC##,192.0.0.0
    ##MASQUE##,255.0.0.0
    ##IPLAN##,172.0.0.0
    Il faut donc que je remplace les variables ##IPPUBLIC## ..etc présentes dans mon autre fichier par les valeurs situées après la virgule..

    J'ai un script ( qui ne fonctionne pas) mais qui ne dois pas être loin de la solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $import = Import-Csv "C:\...\fichier.csv"
    [int]$valeur = 0
    [string]$outfinal = "C:\...\fichierFinal.nsrpc"
    [string]$in = "C\...\FichierDeBase.nsrpc"
    [string[]]$test = Get-Content $in
    
    Function replace{
    Foreach ($line in $import)
    {
    ForEach-Object {$test = $test-Replace($import[$valeur].amodif, $import[$valeur].modif)}
    $test = $outfinal
    $valeur++}
    }
    
    replace
    Actuellement sa me supprime les valeurs ##IPPUBLIC## .. etc mais ne les remplace pas par les valeurs souhaitées..

    Si vous avez une solution plus simple bien sur je suis prenneur!

    Merci d'avance !

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 7
    Par défaut
    Je suis toujours bloqué et ouvert à toute solutions ou idées

  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,
    je n'ai pas trop compris ton pb.
    tu veux substituer des chaines à partir d'un fichier ou modifier le contenu d'un fichier texte ?

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 7
    Par défaut
    Bonsoir, je souhaite remplacer les chaines de caractères ##IPPUBLIC##, ##MASQUE##, ##AGENCE##..etc
    Ces chaines sont dans un fichier texte ( avec pleins de commande et de configurations mais peut importe), et je veux que mon script, en fonction du fichier csv que je fournis, remplace ces chaines par les valeurs après la virgule dans le csv.

    Remplacer des chaines de caractères par des autres je sais le faire, mon problème est de les remplacer par les informations du fichier csv et donc d'aller les chercher dedans..

    J'espère que tu as compris !

    Sinon pour le faire en 2 étapes il faudrait que je puisse stocker chaque valeurs de mon fichier csv (collone amodif) dans des variables (de manière automatique) pour ensuite faire une simple commande -Replace et remplacer les chaines ##IPPUBLIC##, ##AGENCE##...etc par le contenue de mes variables..

    Merci d'avance!

    Cordialement,

    Anthony

  5. #5
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Une solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $log =(Import-Csv test.csv -header ("amodif","modif"))
    $TxtFile='C:\Users\toto\test.txt'
    
    foreach ($row in $log){
      $Test = [IO.File]::ReadAllText($TxtFile)
      $Sortie=$test -Replace $row.amodif,$row.modif | Out-file $TxtFile
    }
    Ça va te remplacer toutes les valeurs dans test.txt



  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 7
    Par défaut
    Bonjour, pour le remplacement sa marche du tonnerre merci !!!

    J'ai juste un dernier petit soucis, il faut que je prenne mon test.txt en entrée mais qu'une fois les modifications faites je puisse l’enregistrer avec un autre nom et dans un autre chemin, histoire de garder mon fichier "de base" pour les prochaines utilisations du script

    J'ai fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $log =(Import-Csv test.csv -header ("amodif","modif"))
    $TxtFile='C:\Users\toto\test.txt'
    $TxtOut='C:\Users\toto\test2.txt'
    
    foreach ($row in $log){
      $Test = [IO.File]::ReadAllText($TxtFile)
      $Sortie=$test -Replace $row.amodif,$row.modif | Out-file $TxtOut
    }
    Mais sa ne marche pas, sa enregistre bien en test2.txt mais sans les modifications, et donc sans mon remplacement..

    Merci encore !

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/11/2008, 11h03
  2. Réponses: 5
    Dernier message: 24/10/2008, 10h43
  3. Insérer du texte dans un GtkTextView depuis un fichier
    Par cassa dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 01/05/2007, 15h35
  4. Insérer des données dans une BD depuis un fichier .bat
    Par kurkaine dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 24/11/2006, 08h31
  5. Réponses: 3
    Dernier message: 26/04/2006, 11h52

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