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 une chaine de caractères par une valeur incrémentée [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Autre
    Inscrit en
    Décembre 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2021
    Messages : 6
    Par défaut Remplacer une chaine de caractères par une valeur incrémentée
    Bonjour à tous,

    J'ai l'habitude d'utiliser des petits batchs windows pour me débrouiller et arriver où je veux dans le cadre de mon travail (renommage de fichier avec dates, modifications simples de contenu...).

    Ici, pour faire la passerelle entre deux systèmes, je dois modifier un fichier CSV.
    Le système amont ne me permet pas de présenter une colonne numérotée de 1 en 1.

    Du coup, j'ai pensé à remplir une colonne dans le fichier Export.csv par les caractères "INCREMENTATION".
    Je viens chercher et remplacer cette chaine via un petit batch et récupérer un fichier output.csv.

    Mais là je sèche depuis 2 jours.

    Voici mon code :

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    set $fichier=Export.csv
    set $chaine=INCREMENTATION
    set $remplace=zaza
    set $nb=0
     
    if exist output.csv del output.csv
     
    setlocal EnableDelayedExpansion
     
    for /f "delims=" %%a in ('type %$fichier%') do (
    	set /a nb+=1
    	set $remplace=!nb!
    	set $ligne=%%a
    	set $ligne=!$ligne:%$chaine%=%$remplace%!
    	echo !$ligne!>>output.csv)
     
    pause

    J'ai bien compris en cherchant un peu partout qu'il est difficile de changer une variable dans une boucle FOR.
    J'ai compris aussi que pour récupérer une variable il fallait la mettre entre point d'exclamation.
    J'ai compris aussi qu'il fallait déclarer la variable incrémentée par Set /a car on va faire un petit calcul dessus

    De ce fait, j'ai bien en sortie un remplacement de "INCREMENTATION" par "zaza", la valeur initiale de la variable $remplace.
    nb, qui doit s'incrémenter, ne remplace pas "zaza" car effectivement ,

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    set $remplace=!$nb!

    n'a pas d'effet.
    De même, je n'arrive pas à visualiser à chaque boucle la valeur de nb pour savoir si tout va bien là aussi.

    Du coup je voulais savoir si vous aviez un avis sur mon approche (fais-je fausse route en voulant aborder le problème ainsi ?) et une solution et/ou des conseils à me proposer.

    Bonne journée à tous et surtout, joyeux Noël!

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Même si tu t'en sort très bien en batch, je te conseil de commencer à faire tu PowerShell bien plus puissant, rapide, flexible et robuste.
    En batch des fois (souvent) ça devient très compliqué de faire des choses simples, ce n'est pas ce que j’attends d'un langage de développement.

    Voici pour ta question
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    @echo off
    cls
     
    setlocal EnableDelayedExpansion
     
    set "$fichier=Export.csv"
    set "$chaine=INCREMENTATION"
    set /a $nb=0
     
    if exist "output.csv" del "output.csv"
     
    for /f "delims=" %%a in ('type %$fichier%') do (
    	set /a nb+=1
    	set "$ligne=%%~a"
     
    	REM Faire un remplacement (inutile dans notre cas). L'usage des %, %% et ! est spécifique au bloc de modification/contexte de chaque variable
    	REM call set "$ligne=!$ligne:%$chaine%=%%nb%%!"
     
    	REM Afficher un remplacement
    	call echo !$ligne:%$chaine%=%%nb%%!
     
    )>>"output.csv"
     
    pause

  3. #3
    Membre régulier
    Homme Profil pro
    Autre
    Inscrit en
    Décembre 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2021
    Messages : 6
    Par défaut
    Hello Ericlm128,

    Merci beaucoup pour ton aide.
    Et meilleurs voeux par la même occasion!

    Je teste ta solution demain et passerai le sujet en "résolu" si ça fonctionne chez moi.

    Pour le PowerShell, je ne connais pas du tout.
    A la base, j'utilise des petits batchs car il n'y a rien à installer en pré-requis pour que ça fonctionne sous windows.
    Et effectivement, pour le peu que j'ai lu en cherchant un peu, ça marchera aussi "d'origine" avec le PowerShell.

    A très bientôt et encore merci pour cette réponse.

  4. #4
    Membre régulier
    Homme Profil pro
    Autre
    Inscrit en
    Décembre 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2021
    Messages : 6
    Par défaut
    Hello Ericlm128,

    Merci beaucoup, je viens d'essayer et ça fonctionne nickel!

    Bonne journée à toi.

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

Discussions similaires

  1. [XL-97] remplacement de chaine de caractères par une autre
    Par Oh!Tofocus dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/10/2009, 00h58
  2. Réponses: 18
    Dernier message: 10/08/2009, 10h14
  3. [E-02] Remplacer une partie de chaine de caractère par une autre
    Par lucarno dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/09/2008, 22h19
  4. Remplacer chaine de caractères par une autre chaine
    Par unmaxdemily dans le forum SAS Base
    Réponses: 2
    Dernier message: 25/06/2008, 09h11
  5. JSP : comment remplacer une chaine de caractères par une autre
    Par techquos dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/12/2006, 09h37

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