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 :

Ajouter un epace dans un nombre [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Janvier 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Janvier 2016
    Messages : 23
    Par défaut Ajouter un epace dans un nombre
    Bonjour à tous et toutes,

    j'ai un petit soucis et je ne vois pas du tout comment m'y prendre alors je viens vous demander de l'aide.
    Voilà, après mettre pris la tête toute la journée pour retirer des espaces des nombres afin de pouvoir réaliser une division, il faut malheureusement que je remette les espaces.

    Voilà mon résultat actuel
    T0047 ;Tuyau 1m;Marque2;jardinage;124500 ;promo
    T00747;Tuyau 1m;Marque2;jardinage;49800 ;promo
    T0047 ;Tuyau 1m;Marque2;jardinage;124500 ;promo
    T00747;Tuyau 1m;Marque2;jardinage;49800 ;promo

    J'aimerai au final avoir ceci
    T0047 ;Tuyau 1m;Marque2;jardinage;12 4500 ;promo
    T00747;Tuyau 1m;Marque2;jardinage;49 800 ;promo
    T0047 ;Tuyau 1m;Marque2;jardinage;124 500 ;promo
    T00747;Tuyau 1m;Marque2;jardinage;49 800 ;promo

    Quelqu'un pourraitme donner un coup de main s'il vous plaît.
    Merci de l'aide que vous m'apporterez.

  2. #2
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut
    et soyez le bienvenue sur DVP
    Si vous pouvez nous reformuler votre requête dés le début et de pour insérer votre code
    Donnez-nous un exemple d'un fichier d'entré, puis le résultat attendu.

  3. #3
    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
    Pourquoi ne pas remplacer l'espace par un point ça te permettrait de faire des calculs sans problèmes :

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @echo off   
    setlocal enabledelayedexpansion
     
    (for /f "tokens=1-6 delims=;" %%a in (sort.txt) do (
       set "$Num=%%e"
       set "$Num=!$Num: =!
       set "$Num=!$Num:~0,-3!.!$Num:~-3!"
       echo %%a;%%b;%%c;%%d;!$Num!;%%f
    ))>sortie.csv

    Ensuite si tu veux faire des calculs en virgule flottante directement :

    Code bat : 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
    @echo off&cls
    ::On cree le calculateur virgule flottante VBS
    if not exist "Math.vbs" echo Wscript.echo replace(eval(WScript.Arguments(0)),",",".")>Math.vbs
     
    setlocal enabledelayedexpansion
    ::On envoie une division par 2 sur tout les articles ==> call:Math %%b / 2
     
    for /f "tokens=2,5 delims=;" %%a in (sortie.csv) do (
      call:Math %%b/2
      Echo %%a =^> !$Result!
      echo . . .
    )
     
    echo fini
    pause
    exit/b
     
    :Math
    Echo Traitement de l'operation : [%*]
    for /f %%x in ('cscript //nologo Math.vbs "%*"') do set $result=%%x

    On peu encore simplifier en prenant directement un argument sur le bat, que tu lançeras avec en argument l'opération mathématique a effectué :

    exemple :

    Calcul.bat /2
    Calcul.bat *3.35


    Le code :

    Calcul.bat

    Code bat : 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
     
    @echo off&cls
    ::On cree le calculateur virgule flottante VBS
    if not exist "Math.vbs" echo Wscript.echo replace(eval(WScript.Arguments(0)),",",".")>Math.vbs
     
    setlocal enabledelayedexpansion
    ::On envoie une division par 2 sur tout les articles ==> call:Math %%b / 2
     
    for /f "tokens=2,5 delims=;" %%a in (sort.txt) do (
      call:Math %%b%1
      Echo %%a =^> !$Result!
      echo . . .
    )
     
    echo fini
    pause
    exit/b
     
    :Math
    Echo Traitement de l'operation : [%*]
    for /f %%x in ('cscript //nologo Math.vbs "%*"') do set $result=%%x


  4. #4
    Membre averti
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Janvier 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Janvier 2016
    Messages : 23
    Par défaut Plus de détails sur mon problème
    Bonjour sachadee & hackoofr

    Excusez-moi, j'avais pas vu qu'on pouvait mettre des balises pour le code.
    Mais je vais y penser maintenant

    Je vous donne mon code d'origine depuis le début

    Je part d'un document au départ de ce format dans le document objet.txt
    "T0047" ;"Tuyau 1km";"Marque2";"jardinage";"75000";"promo"
    "T00747";"Tuyau 1m";Marque2";"jardinage";"30000";"promo"

    je fais un script qui retire les guillemets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off
    setlocal enabledelayedexpansion
    for /F "delims=" %%a in (objet.txt) do (
            set a=%%a
            set a=!a:"=!
            echo !a!
     	echo !a! >>resultat.txt
    )

    Je retire les espaces qui sont présents dans la colonne e (cinquième) sinon çà me réalise pas la division du script 3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off
    setlocal enabledelayedexpansion
    for /F "delims=; tokens=1-6" %%a in (resultat.txt) do (
            set a=%%e
    	set a=!a: =!
            echo %%a;%%b;%%c;%%d;!a!;%%f
     	echo %%a;%%b;%%c;%%d;!a!;%%f>>resultat2.txt
    )


    :: on ne peut pas diviser par 0.6 donc on multiplie par 1666 puis divise par 1000
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @echo off
    setlocal enabledelayedexpansion
    for /F "delims=; tokens=1-6" %%a in (resultat2.txt) do (
            set a=%%e
            :: set /a a=!a!/0.6
    	set /a a=!a!*16666/10000
    
    
            echo %%a;%%b;%%c;%%d;!a!;%%f
    	echo  %%a;%%b;%%c;%%d;!a!;%%f >>resultat3.txt
    )

    Au final pour l'instant j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     T0047 ;Tuyau 1km;Marque2;jardinage;124995;promo
     T00747;Tuyau 1m;Marque2;jardinage;49998;promo
    NB Si je ne retire pas les espace de la colonne e j'ai ce résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    T0047 ;Tuyau 1m;Marque2;jardinage;75 ;promo
    T00747;Tuyau 1m;Marque2;jardinage;30 ;promo

    Je voudrais avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    T0047 ;Tuyau 1m;Marque2;jardinage;124 500 ;promo
    T00747;Tuyau 1m;Marque2;jardinage;49 800 ;promo


    J'ai essayé le code que vous m'avez proposé.
    J'ai juste modifié le fichier cible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off   
    setlocal enabledelayedexpansion
    (for /f "tokens=1-6 delims=;" %%a in (resultat.txt) do (
       set "$Num=%%e"
       set "$Num=!$Num: =!
       set "$Num=!$Num:~0,-3!.!$Num:~-3!"
       echo %%a;%%b;%%c;%%d;!$Num!;%%f
    ))>resultat2.txt
    Et j'ai le résultat suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     T0047 ;MAGASIN_1;T;Tuyau 1km;Marque2;jardinage;75;promo
     T00747;MAGASIN_1;T;Tuyau 1m;Marque2;jardinage;30;promo

    Maintenant si je remplace les espaces par des points par le code ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off
    setlocal enabledelayedexpansion
    for /F "delims=; tokens=1-8" %%a in (resultat.txt) do (
            set a=%%e
    	set a=!a: =.!
            echo %%a;%%b;%%c;%%d;!a!;%%f;%%g;%%h
     	echo %%a;%%b;%%c;%%d;!a!;%%f;%%g;%%h >>resultat2.txt
    )
    j'obtiens ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    T0047 ;Tuyau 1m;Marque2;jardinage;124500 ;promo
    T00747;Tuyau 1m;Marque2;jardinage;49800 ;promo
    ya toujours pas les espaces

    Je continue de chercher une solution à mon problème.
    Merci et @+

  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
    Voilà en prenant ton fichier initial objet.txt :

    "T0047";"Tuyau 1km";"Marque2";"jardinage";"75000";"promo"
    "T00747";"Tuyau 1m";"Marque2";"jardinage";"30000";"promo"
    Il te suffit de mettre l'operation desiré dans la variable $OP (ici *0.6). Tu ne t'occupes plus des strings. Ton fichiers est traité avec les strings et ils sont remis en fin de code.

    Code bat : 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
    @echo off
    ::On cree le calculateur virgule flottante VBS
    if not exist "Math.vbs" echo Wscript.echo Replace(FormatNumber(eval(WScript.Arguments(0)),3),",",".")>Math.vbs
     
    Set "$OP=*0.6"
     
    setlocal enabledelayedexpansion
     
    for /f "tokens=1-6 delims=;" %%a in (sort.txt) do (
       set "$Num=%%~e"
       set "$Num=!$Num: =!
       set "$Num=!$Num:~0,-3!.!$Num:~-3!"
       call:Math !$Num!%$OP%
       echo "%%~a";"%%~b";"%%~c";"%%~d";"!$result!";"%%~f"
    )
     
    echo FIN
    Exit/b
     
    :Math
    Echo Traitement de l'operation : [%*]
    for /f %%x in ('cscript //nologo Math.vbs "%*"') do set "$result=%%x




    En sortie :

    Traitement de l'operation : [75.000*0.6]
    "T0047";"Tuyau 1km";"Marque2";"jardinage";"45.000";"promo"
    Traitement de l'operation : [30.000*0.6]
    "T00747";"Tuyau 1m";"Marque2";"jardinage";"18.000";"promo"
    FIN

  6. #6
    Membre averti
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Janvier 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Janvier 2016
    Messages : 23
    Par défaut Merci
    Merci beaucoup sachadee

    C'est bien le résultat que je voulais.
    Le seul problème c'est que sur mon ordi çà prends environ 10 secondes par lignes à traiter.

    Je vais voir si je trouver un moyen que çà aille un peu plus vite.
    Sinon galère pour traiter plus de 12 000 par jours.

    @+

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

Discussions similaires

  1. Ajouter une virgule décimale dans un nombre
    Par esisa1 dans le forum PL/SQL
    Réponses: 2
    Dernier message: 21/12/2011, 15h43
  2. [RegEx] ajouter un retour chariot à un nombre dans un texte
    Par serna dans le forum Langage
    Réponses: 2
    Dernier message: 06/09/2010, 17h26
  3. ajouter un chiffre dans un nombre
    Par hhammah dans le forum PL/SQL
    Réponses: 3
    Dernier message: 22/07/2010, 15h58
  4. Réponses: 4
    Dernier message: 07/08/2008, 13h40
  5. [système] Comment ajouter un item dans le context menu de Windows ?
    Par ddmicrolog dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 29/06/2005, 17h03

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