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 :

Fonction vs slice pour gérer espace et zero


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 320
    Points : 79
    Points
    79
    Par défaut Fonction vs slice pour gérer espace et zero
    Bonjour,

    J'ai besoin de gérer un " " (espace) pour les heures <10 et un "0" (zéro) pour les minutes <10.
    les heures vont de 1 à 3 caractères, les minutes sont sur 2 caractères.

    Actuellement je gère ça comme ceci :
    Code JS : 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
    function space(val) {
        if (val < 10) {
            val = " " + val;
        }
        return val;
    }
     
    function genIteNext (ttwCurr) {
        var ttwCurr = ttwCurr.match(/.*?([0-9]{1,3}):([0-9]{2})/);
        var ttwNext = [];
        if ((parseFloat(ttwCurr[2]) + 10) < 60) {
            ttwNext = "T+" + space (parseFloat(ttwCurr[1])) + ":" + ("0" + (parseFloat(ttwCurr[2]) + 10)).slice(-2);
        } else {
            ttwNext = "T+" + space (parseFloat(ttwCurr[1]) + 1) + ":" + ("0" + (parseFloat(ttwCurr[2]) - 50)).slice(-2);
        }
        return ttwNext;
    }

    J'aimerais 'uniformiser' les méthodes utilisées pour gérer le " " (espace) et le "0" (zéro)

    Je peux facilement remplacer le ("0" + (...)).slice(-2) par la même méthode que pour gérer l'espace (une fonction)
    ce qui donnerait ceci :
    Code JS : 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 space(val) {
        if (val < 10) {
            val = " " + val;
        }
        return val;
    }
     
    function zero(val) {
        if (val < 10) {
            val = "0" + val;
        }
        return val;
    }
     
    function genIteNext (ttwCurr) {
        var ttwCurr = ttwCurr.match(/.*?([0-9]{1,3}):([0-9]{2})/);
        var ttwNext = [];
        if ((parseFloat(ttwCurr[2]) + 10) < 60) {
            ttwNext = "T+" + space (parseFloat(ttwCurr[1])) + ":" + zero ((parseFloat(ttwCurr[2]) + 10));
        } else {
            ttwNext = "T+" + space (parseFloat(ttwCurr[1]) + 1) + ":" + zero ((parseFloat(ttwCurr[2]) + 10) % 60);
        }
        return ttwNext;
    }

    En revanche je n'arrive pas à gérer le " " (espace) pour les heures avec slice du faite qu'il n'est pas fixe à un nombre de caractère (je crois que ce n'est pas possible de le faire), si vous avez la solution je suis preneur

    Donc j'ai essayé de concaténer les fonctions space et zero pour faire quelque chose de "propre et bien écrit" mais je prend des murs en permanence
    Comment vous feriez ça ?
    Merci

  2. #2
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    ta variable en entrée : ttwCurr

    on peut avoir un échantillon représentatif des valeurs qu'elle peut avoir ??
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 320
    Points : 79
    Points
    79
    Par défaut
    C'est de ce type:
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    var ttwCurr = "T+ 0:00";

    Voici mon jsbin
    https://jsbin.com/fifofev/edit?js,console

  4. #4
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    Quelque chose dans ce genre ?

    Code JavaScript : 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
     
        function plus_10_Minutes (tempsDepart) {
          var
            refTempTab = tempsDepart.match(/.*?([0-9]{1,3}):([0-9]{2})/),
            val_H      = parseInt(refTempTab[1]),
            val_M      = parseInt(refTempTab[2]) + 10,
            val_Ms     = (val_M).toString()
          ;
     
          if (val_M >= 60) {
            val_H++;
            val_M -= 60;
            val_Ms = (val_M).toString();
          }
     
          return ( 'T+ '+ val_H + ':'+ '0'.repeat(2 - val_Ms.length) + val_Ms );
        }
     
        var t2 = plus_10_Minutes("T+ 0:50");  // de T+ 0:00 à T+999:50
     
        console.log(t2);
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 320
    Points : 79
    Points
    79
    Par défaut
    Merci psychadelic,
    J'ai tester ton code, le formatage de l'heure ne fonctionne pas correctement mais c'est pas grave j'ai repris ton idée de stocker les heures et les minutes dans une variable (ça rend le code beaucoup plus lisible et j'y avais pas pensé), j'ai également remplacer parseFloat par parseInt qui semble plus approprié (merci) et j'ai laissé tomber le slice(-2) je l'ai remplacé par une fonction zero comme dit plus haut dans le topic
    J'vais essayer de concatener ces 2 fonctions ( space et zero ) pour "optimiser" les répétitions mais sinon cette méthode me convient. Simple à comprendre, pour le débutant que je suis, et fonctionnelle donc c'est pas si mal

    Ps : Pas besoin de m'avertir les modos, je passerais le post en résolu au moment opportun

  6. #6
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    oui, j'ai volontairement ommis le premier cas avec des espaces parce que ton truc n'est pas clair :

    tu indique : // de T+ 0:00 à T+999:50 ou pour le cas des heures il y a 1 espace pour un faire un total de 2 et zéro espac pour un total de 3 signes, alors je vois pas vraiment la logique.


    si tu veux suivre une logique de 3 signes il faut juste mettre un espace à la place du zéro :
    comme je l'avais fait dans mon code pour la présentation des heures :
    return ( 'T+ '+ val_H + ':'+ '0'.repeat(2 - val_Ms.length) + val_Ms );
    ce qui donnerai pour une logique avec 3 signes :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var val_Hs = (val_H).toString();
    return ( 'T+' +  ' '.repeat(3 - val_Hs.length) + val_Hs ); + ':'+ '0'.repeat(2 - val_Ms.length) + val_Ms );

    mais si tu tiens absolument à avoir une fonction générique pour les 2 cas :

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        function presentationChiffre(val, nbreDigits, CharRemplissage) {
          nbreEnStr = val.toString();
          nbreDigits = Math.max(nbreDigits, nbreEnStr.length);
          return ( CharRemplissage.repeat(nbreDigits - nbreEnStr.length) + nbreEnStr );
        }
    }

    donc :
    Code JavaScript : 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
        function presentationChiffre(val, nbreDigits, CharRemplissage) {
          nbreEnStr = val.toString();
          nbreDigits = Math.max(nbreDigits, nbreEnStr.length);
          return ( CharRemplissage.repeat(nbreDigits - nbreEnStr.length) + nbreEnStr );
        }
     
        function plus_10_Minutes(tempsDepart) {
          var
            refTempTab = tempsDepart.match(/.*?([0-9]{1,3}):([0-9]{2})/),
            val_H = parseInt(refTempTab[1]),
            val_M = parseInt(refTempTab[2]) + 10
          ;
     
          if (val_M >= 60) {
            val_H++;
            val_M -= 60;
          }
     
          return ('T+' + presentationChiffre(val_H, 2,' ') + ':' + presentationChiffre(val_M, 2, '0') );
        }
     
        console.log("T+ 0:30  +10mn ==> " + plus_10_Minutes("T+ 0:30") );
        console.log("T+ 0:50  +10mn ==> " + plus_10_Minutes("T+ 0:50") );
        console.log("T+ 5:40  +10mn ==> " + plus_10_Minutes("T+ 5:40") );
        console.log("T+ 9:40  +10mn ==> " + plus_10_Minutes("T+ 9:40") );
        console.log("T+ 9:50  +10mn ==> " + plus_10_Minutes("T+ 9:50") );
        console.log("T+45:20  +10mn ==> " + plus_10_Minutes("T+45:20") );
        console.log("T+99:50  +10mn ==> " + plus_10_Minutes("T+99:50") );

    résultat =
    T+ 0:30 +10mn ==> T+ 0:40
    T+ 0:50 +10mn ==> T+ 1:00
    T+ 5:40 +10mn ==> T+ 5:50
    T+ 9:40 +10mn ==> T+ 9:50
    T+ 9:50 +10mn ==> T+10:00
    T+45:20 +10mn ==> T+45:30
    T+99:50 +10mn ==> T+100:00
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 320
    Points : 79
    Points
    79
    Par défaut
    Désolé psychadelic, j'ai pas eu la notification par mail et donc j'ai pas vu que tu m'avais répondu ...

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

Discussions similaires

  1. fonction select() pour gérer le temps pour un réseau
    Par albertopisto dans le forum Réseau
    Réponses: 6
    Dernier message: 25/07/2011, 18h27
  2. [Free Pascal] Quelles fonctions utiliser pour gérer le son
    Par labper dans le forum Free Pascal
    Réponses: 3
    Dernier message: 22/03/2011, 19h01
  3. Réponses: 3
    Dernier message: 14/05/2009, 17h15
  4. Fonction pour suppression espace pour wc -l
    Par francis_tom dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 13/04/2008, 14h00
  5. Une unité pour gérer des très grands nombres
    Par M.Dlb dans le forum Langage
    Réponses: 2
    Dernier message: 09/09/2003, 12h07

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