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 :

Probléme pour remplacer = dans une variable


Sujet :

Scripts/Batch

  1. #1
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut Probléme pour remplacer = dans une variable
    Bonjour, j'ai une variable VrTest qui contien une chaine de caractére avec le signe =, je voudrai remplacer le = par +, voila ce que j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set VrTest=%VrTest:==+%
    Mais la commande ne remplace pas le égale, j'ai essayer avec la caractére d'echapement ^:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set VrTest=%VrTest:^==+%
    Mais sa na rien donner.

    Sauriez vous que faire ?

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Tu dois parcourir ta chaîne caractère par caractère, tester chaque caractère et le remplacer quand c'est le mauvais.

  3. #3
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Bonjour et merci beaucoup

    OK mais comment faire ?

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Comme tu fais d'habitude.
    Tu as déjà posté des scripts qui font cela ou des tâches similaires.

  5. #5
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Je ne voi pas.

    Il n'y a pas un autre caractére d'echapement ?

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Pas besoin d'un caractère d'échappement.
    Je te mets le shéma, tu n'auras qu'à le transposer en script

    - attribution de la chaine à une variable chaîne : ChSource
    - attribution de la longueur chaine à une variable numérique : ChLg
    - création d'une seconde variable chaîne (la chaîne à construire) : ChCible
    - parcourt de la chaîne du premier au dernier caractère : de 1 à ChLg (boucle FOR)
    - extraire à chaque incrémentation le caractère concerné (premier, deuxième, nième, jusqu'au dernier (ChLg))
    - comparaison du caractère récupéré au caractère à remplacer
    - si le caractère n'est pas celui à remplacer, l'ajouter à la chaîne à construire
    - sinon ajouter le caractère de remplacement à la chaîne à construire

    Normalement, avec tout ce que tu nous a donné comme scripts ici, ça ne devrait pas te poser de problème

  7. #7
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut
    Et sinon, comme tu n'as pas l'air rétissant aux outils externes, télécharge la commande sed pour windows et tu pourras faire ton remplacement facilement.

  8. #8
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Citation Envoyé par Drizzt [Drone38]
    Et sinon, comme tu n'as pas l'air rétissant aux outils externes, télécharge la commande sed pour windows et tu pourras faire ton remplacement facilement.
    Merci mais j'aurai voulu faire ca sans passer par une commande que je doit télécharger.

  9. #9
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Citation Envoyé par Guardian
    Pas besoin d'un caractère d'échappement.
    Je te mets le shéma, tu n'auras qu'à le transposer en script

    - attribution de la chaine à une variable chaîne : ChSource
    - attribution de la longueur chaine à une variable numérique : ChLg
    - création d'une seconde variable chaîne (la chaîne à construire) : ChCible
    - parcourt de la chaîne du premier au dernier caractère : de 1 à ChLg (boucle FOR)
    - extraire à chaque incrémentation le caractère concerné (premier, deuxième, nième, jusqu'au dernier (ChLg))
    - comparaison du caractère récupéré au caractère à remplacer
    - si le caractère n'est pas celui à remplacer, l'ajouter à la chaîne à construire
    - sinon ajouter le caractère de remplacement à la chaîne à construire

    Normalement, avec tout ce que tu nous a donné comme scripts ici, ça ne devrait pas te poser de problème

    Merci pour ses explication, mais vraiment la je ne voi pas

  10. #10
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut
    Une variante de la méthode de Guardian, peut être que tu verras mieux comment faire (mais je plussoie Guardian tu as toutes les compétences pour réaliser ce script si bien sur les réponses que tu donnes sur le forum sont bien de toi )

    1. Donc mise en variable de ta chaine.
    2. Boucle sur ta chaine avec spérateur = et tu ne récuperes que le premier token ainsi que tout le reste. (donc tokens=1*)
    3. Recopie le premier token concatené au reste dans une seconde variable.
    4. Test si la premiere variable égale la seconde.
      • Si oui --> Exit il n'y a plus d'égal
      • Si non --> Goto début du for.


    Bon courage.

  11. #11
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Citation Envoyé par Drizzt [Drone38]
    Une variante de la méthode de Guardian, peut être que tu verras mieux comment faire (mais je plussoie Guardian tu as toutes les compétences pour réaliser ce script si bien sur les réponses que tu donnes sur le forum sont bien de toi )

    1. Donc mise en variable de ta chaine.
    2. Boucle sur ta chaine avec spérateur = et tu ne récuperes que le premier token ainsi que tout le reste. (donc tokens=1*)
    3. Recopie le premier token concatené au reste dans une seconde variable.
    4. Test si la premiere variable égale la seconde.
      • Si oui --> Exit il n'y a plus d'égal
      • Si non --> Goto début du for.


    Bon courage.
    Franchement j'ai du mal la

    Tout ce que j'ai pu faire, c'est ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "tokens=1* delims==" %%i in ('type %1') do echo %%i

  12. #12
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Ah oui j'ai compris la boucle que je vien de poster récupére tout sauf le égale, c'est bon alors.


    Mais on ne sais jamais s'il existe un caractére d'echapement qui me permette du supprimer le = avec une substitution de variable cela marangerai beaucoup

  13. #13
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Ah non la boucle ne récupére que la premiére partie avent le =, si je rajoute %%j:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "tokens=1* delims==" %%i in ('type %1') do echo %%i%%j
    Il récupére aussi tout se qui se trouve dérière le premier = mais aussi les =

  14. #14
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut
    Oui d'ou la suite de ma solution ...
    Je ne me limite pas à la boucle, chaque execution de ce for enleve le premier =, tu dois donc l'executer jusqu'à ce que il n'y ait plus de différence avant et après.

  15. #15
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Mais l'ennui c'est qu'avec cette solutioon je pourai supprimer les =, mais pas les remplacer.

    Et je je veut remplacer une chaîne qui contien un = mais aussi des lettres et des chiffres ca sera pas bon.

  16. #16
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut
    Ben si ... je vois pas ou est le problème la... Il te suffit entre %%i et %%j d'ajouter ton charactère de remplacement.

    Et j'ai pas compris ta remarque sur ta chaine qui contient des lettres et des chiffres... Elle peut contenir ce que tu veux ta chaine ça change rien.

  17. #17
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Citation Envoyé par Drizzt [Drone38]
    Ben si ... je vois pas ou est le problème la... Il te suffit entre %%i et %%j d'ajouter ton charactère de remplacement.
    Ah oui, j'aurai du y pensser.


    Citation Envoyé par Drizzt [Drone38]
    Et j'ai pas compris ta remarque sur ta chaine qui contient des lettres et des chiffres... Elle peut contenir ce que tu veux ta chaine ça change rien.
    Je veu dire que si je veut remplacer une cheine de caractére contenant le signe = (une chaine de caractéres de plusieurs cractéren donc des chiffres et des lettres), avec la boucle je ne peut pas remplecer toute la chaine.

  18. #18
    Membre émérite Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Points : 2 453
    Points
    2 453
    Par défaut
    Ah tu veux dire remplacer par exemple:
    Chaine initiale : toto1=1tata
    Remplacer 1=1 par 2=2
    Chaine finale : toto2=2tata
    Dans ce cas tu es obligé d'y aller charactère par charactère.
    Edit> Ou simplement tu utilises la syntaxe que tu proposes au début de ce topic une fois les = remplacés.

    Sinon voila ma solution simplifiée qui fonctionne (pas besoin de tester l'égalité, un test de fin de chaine suffit)

    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
    16
    @echo off
    setlocal enableExtensions
    
    set szVar=toto=123=titi
    set cRep=#
    
    :boucle
    for /f "tokens=1* delims==" %%i in ("%szVar%") do (
        if %%j'==' goto exit
        set szVar=%%i%cRep%%%j
    )
    
    goto boucle
    
    :exit
    echo %szVar%
    --> Résultat : toto#123#titi

  19. #19
    Débutant  
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Points : 2 415
    Points
    2 415
    Par défaut
    Merci beaucoup

Discussions similaires

  1. Problème pour rechercher dans une liste excel avec vba
    Par hop51 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/03/2013, 19h00
  2. [C#][Excel] Problème pour écrire dans une cellule
    Par MoscoBlade dans le forum C#
    Réponses: 1
    Dernier message: 24/02/2010, 16h54
  3. Réponses: 3
    Dernier message: 06/05/2009, 17h00
  4. [Débutant]Problème de données dans une variable
    Par stansoad0108 dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 26/06/2008, 14h36
  5. Problème d'adresse dans une variable
    Par mick77 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/06/2007, 12h41

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