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

JavaScript Discussion :

Calcul dans une String


Sujet :

JavaScript

  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2003
    Messages
    37
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Technicien maintenance
    Secteur : Services � domicile

    Informations forums :
    Inscription : Octobre 2003
    Messages : 37
    Par d�faut Calcul dans une String
    Bonjour,
    J'ai une variable du type :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    100 brebis galeuse. 5 moutons oranges. 3 vaches bleues.
    Je dois faire un calcul identique pour tous les chiffres. Quel est le meilleur moyen? Dois je d�composer dans un premier temps la variable ?
    Mon r�sultats dois �tre :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    800 brebis galeuse. 40 moutons oranges. 24 vaches bleues.

  2. #2
    Mod�rateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    Bonjour,
    Dois je d�composer dans un premier temps la variable ?
    Exactement, c'est la premi�re chose � faire avant tout calcul.

  3. #3
    Expert confirm�
    Avatar de ProgElecT
    Homme Profil pro
    Retrait�
    Inscrit en
    D�cembre 2004
    Messages
    6 132
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 69
    Localisation : France, Haute Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Retrait�
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 6 132
    Par d�faut
    Salut

    Code HTML : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <html lang="fr"> <!-- BaseModel.html -->
    	<head>
    		<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    		<title>Ici mon titre</title>
     
    		<style>
                            /* TAGs comentaire dans la partie style */
                    </style>
     
    		<script>
                            'use strict'; // force la déclaration des variables
                            function Calcul(quoi,multiplicateur) {
                                    let LeStr = quoi;
                                    const multi = multiplicateur;
                                    let LesStrt = LeStr.split(" ");
                                    LeStr = "";
                                    for (let i = 0; i< LesStrt.length; i++) {
                                            if (isNaN(LesStrt[i])){
                                                    LeStr  += LesStrt[i]+ " ";
                                                    }else{
                                                    LeStr += Number(LesStrt[i] * multi) + " ";
                                            }
                                    }
                                    document.getElementById("visualise").innerHTML = LeStr;
                            }//----------------------fin de la function model -----------------------------------
                            
                    </script>
    	</head>
    	<body>
    		<button onclick='Calcul("100 brebis galeuse. 5 moutons oranges. 3 vaches bleues.",8);'>Go exemple 1</button>
    		<button onclick='Calcul("10 tortues. 9 Lapins. 7 poissons pas rouges.", 16);'>Go exemple 2</button>
    		<div id="visualise"></div>
     
    	</body>
    </html>
    Il y a s�rement mieux.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont d�pann�s.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Ah oui diviser avec l�espace comme s�parateur et tester � chaque fois si on a un nombre ou pas me parait bien...

    Apr�s si la string est toujours r�guli�re j'avais pens� diviser par avec le point, ensuite diviser chaque r�sultat par l'espace et alors le premier �l�ment de chaque r�sultat contient le chiffre � multiplier...

  5. #5
    Invit�
    Invit�(e)
    Par d�faut
    bj,

    un peu plus concis : )
    Code js : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    var s = '100 brebis galeuse. 5 moutons oranges. 3 vaches bleues.'
    console.log(s.replace(/\d+/g, el=>el*8))
    output:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    800 brebis galeuse. 40 moutons oranges. 24 vaches bleues.

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Ah oui bien vu !

  7. #7
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par d�faut
    Erreur dans le message.

  8. #8
    Expert confirm�
    Avatar de ProgElecT
    Homme Profil pro
    Retrait�
    Inscrit en
    D�cembre 2004
    Messages
    6 132
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 69
    Localisation : France, Haute Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Retrait�
    Secteur : Communication - M�dias

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 6 132
    Par d�faut
    Salut

    Chez moi la r�ponse de galerien69 donne le bon r�sultat.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont d�pann�s.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  9. #9
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par d�faut
    Ben j'ai test� ici : https://jsbin.com/hovolucejo/edit?js,console
    et on obtient : "800 brebis galeuse. 40 moutons oranges. 24 vaches bleues."

  10. #10
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par d�faut
    En effet. Me suis tromp�.

  11. #11
    Mod�rateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    Le passage par une regExp est tentant mais donnera de faux r�sultats en l'�tat actuel !
    exemple :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    var txt = "5 Tee-shirt taille 3. 5 Ampoules 25W. 5 moutons.";

  12. #12
    Invit�
    Invit�(e)
    Par d�faut
    hi nosmoking,

    ici on peut s'en sortir en disant que seuls les nombres non suivis de majuscules sont � multiplier.
    on remanque __en revanche__ que les nombres d�cimaux ne sont pas reconnus.
    mais apres il faut savoir ce que on peut avoir en entr�e, sinon on s'en sortira jamais (ou alors avec quelques cheveux en moins )

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    var s = "5 Tee-shirt taille 3. 2.5 Ampoules 25W. 5 moutons 3A.";
    console.log(s.replace(/\d+(?![A-Z]|\d)/g, el=>el*8))
    output:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    40 Tee-shirt taille 24. 16.40 Ampoules 25W. 40 moutons 3A.

  13. #13
    Invit�
    Invit�(e)
    Par d�faut
    Bonjour,

    je suis curieux de savoir qui a la formule de galerien69, qui r�pond parfaitement � la probl�matique expos�e.



    N.B. C'est le genre de r�ponse que j'avais aussi en t�te, avant de voir qu'elle avait �t� propos�e.
    Sauf que je n'avais pas la syntaxe el=>el*8... qui est diff�rente du PHP... et que je n'ai pas trouv�e (??)
    Derni�re modification par Invit� ; 08/10/2018 � 22h30.

  14. #14
    Invit�
    Invit�(e)
    Par d�faut
    Hello jreaux62

    La syntaxe a pour nom fat arrow. Cest juste (ici) du sucre syntaxique pour la forme function(el){return el*8}

    Ya des propri�t�s sympatiques avec this (je pense que c'est plutot pour �a qu'elle a �t� cr��e) mais bon...pour un oneliner, faut bien se faire plaisir

  15. #15
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2003
    Messages
    37
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Technicien maintenance
    Secteur : Services � domicile

    Informations forums :
    Inscription : Octobre 2003
    Messages : 37
    Par d�faut
    Citation Envoy� par galerien69 Voir le message
    Code js : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    var s = '100 brebis galeuse. 5 moutons oranges. 3 vaches bleues.'
    console.log(s.replace(/\d+/g, el=>el*8))
    Merci bcp
    J'�tais bien parti sur du replace.
    Solution rapide qui fonctionne tr�s bien, est ce que j'ai la possibilit� de ne pas prendre en compte la valeur 1. Si >= 2 on remplace.

  16. #16
    Invit�
    Invit�(e)
    Par d�faut
    hi Makinator,

    m�me chose (t'aurais pu t'en sortir tu as d�crit la r�gle toi m�me)
    Code js : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    var s = '1 brebis galeuse. 5 moutons oranges. 3 vaches bleues.'
    console.log(s.replace(/\d+/g, el=>el>1?el*8:el))

    output
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    1 brebis galeuse. 40 moutons oranges. 24 vaches bleues.

  17. #17
    Mod�rateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    Pour moi la solution la plus aboutie reste celle propos�e par ProgElecT, � laquelle je ferais quelques am�nagements mineurs (voir code ci-apr�s).

    La plus concise est incontestablement celle utilisant les rexExp, formul�e en ES6 ou non, mais avec les contraintes d�j� expos�es comme par exemple :
    • pas de chiffre dans le texte
    • pas de nombre avec d�cimale
    Je reste persuad� que cela doit �tre faisable, mais ne comptait pas sur moi pour vous la r�aliser avec mon niveau regExp 1 sur une �chelle de 1 � 10.

    La version � ProgElecT � que j'aurais �crite.
    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
    17
    18
    19
    20
    21
    22
    23
    24
    function calcul(quoi, multi) {
      console.log("Entrée : ", quoi);
      multi = multi || 1;
      var sep = ". ";
      var tabTmp;
      // décomposition en sous chaine
      var lesStrt = quoi.split(sep);
      var i;
      var nb = lesStrt.length;
      for (i = 0; i < nb; i += 1) {
        // décomposition en sous sous chaine
        tabTmp = lesStrt[i].split(" ");
        console.log(i, "->", tabTmp);
        // test et traitement de la valeur du 1st indice
        // nota: ne pas utiliser Number.isNaN sous cette forme
        if (!isNaN(tabTmp[0])) {
          tabTmp[0] *= multi;
        }
        // reconstruction sous chaine
        lesStrt[i] = tabTmp.join(" ");
      }
      // affichage chaine compléte, mieux faire un return de la valeur
      document.getElementById("visualise").textContent = lesStrt.join(sep);
    }
    Nota : vous pouvez mettre des let en lieu et place de var si vous n'avez pas de navigateur IE a supporter


    Le principal �tant que Makinator trouve la r�ponse � son besoin qui ne m'appara�t pas tr�s clairement � la lecture de ses deux discussions sur le m�me th�me.

  18. #18
    Invit�
    Invit�(e)
    Par d�faut
    @NoSmoking

    1- OK, �a correspond � TA contrainte :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    var txt = "5 Tee-shirt taille 3. 5 Ampoules 25W. 5 moutons.";
    Avec var sep = ". ";, �a marche effectivement.

    2- Mais si on met des virgules (ou des tirets, ou autre), �a ne fonctionne plus :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    var txt = "5 Tee-shirt taille 3, 5 Ampoules 25W, 5 moutons.";
    3- Donc l� encore, il est ESSENTIEL de d�finir CLAIREMENT la STRUCTURE des donn�es � traiter.


    @galerien69
    Merci ! J'aurais appris quelque chose : Fonctions fl�ch�es
    Derni�re modification par Invit� ; 09/10/2018 � 12h22.

  19. #19
    Expert confirm� Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activit� : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par d�faut
    Citation Envoy� par NoSmoking Voir le message
    • pas de chiffre dans le texte
    • pas de nombre avec d�cimale
    Avec ES6, on peut d�sormais utiliser des tests arri�re (lookbehinds) dans les patterns, donc:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    txt = txt.replace(/(?<!\S)(?:[2-9]\d*|1\d+)(?!\S)/g, m => m*8);
    (?<!\S): non pr�c�d� d'un caract�re qui n'est pas un caract�re blanc = pr�c�d� d'un caract�re blanc ou au d�but de la cha�ne.
    (?!\S): non suivi d'un caract�re qui n'est pas un caract�re blanc = suivi d'un caract�re blanc ou de la fin de la cha�ne.

    [2-9]\d*|1\d+ suffit � remplir la condition n>1. On pourrait aussi �crire (?:[2-9]|1\d)\d*.

  20. #20
    Mod�rateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    @jreaux62 :
    1- OK, �a correspond � TA contrainte :
    Non cela correspond � ma lecture du besoin client qui est je te l'accorde bien light dans le cas pr�sent.

    2- Mais si on met des virgules (ou des tirets, ou autre), �a ne fonctionne plus :
    Il suffit simplement pour plus de portabilit� de passer en param�tre le s�parateur.

    3- Donc l� encore, il est ESSENTIEL de d�finir CLAIREMENT la STRUCTURE des donn�es � traiter.
    L� je suis bien d'accord avec toi.

    @CosmoKnacki :
    Quand j'ai �cris
    Je reste persuad� que cela doit �tre faisable,
    devine � qui je pensais

Discussions similaires

  1. mettre un entier dans une string
    Par kinder29 dans le forum SL & STL
    R�ponses: 14
    Dernier message: 14/02/2005, 11h54
  2. Recuperer un champ calcul� dans une variable....
    Par vijeo dans le forum MS SQL Server
    R�ponses: 4
    Dernier message: 21/12/2004, 14h57
  3. [DOM] sauver dans une String
    Par hocinema dans le forum Format d'�change (XML, JSON...)
    R�ponses: 3
    Dernier message: 28/09/2004, 21h44
  4. calcul dans une requ�te
    Par blaz dans le forum Langage SQL
    R�ponses: 8
    Dernier message: 22/12/2003, 10h31
  5. [Syntaxe] mettre des ' dans une string ?
    Par souch dans le forum D�buter
    R�ponses: 4
    Dernier message: 14/08/2003, 16h26

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