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 :

Splitter suivant plusieurs critères


Sujet :

JavaScript

  1. #1
    Invité
    Invité(e)
    Par défaut Splitter suivant plusieurs critères
    Bonjour, je dois décoder (splitter) 1 messages entrants... IoT. J'ai un gros souci avec les loops à partir de // now need to get the bases dans le messages. Sachant qu'il peut y avoir + de 7 bases... et que c'est variable (donc inutile d'écrire un script avec les valeurs numériques ci-dessous).

    Le message est le suivant :
    //IWAP02,zh_cn,0,7,460,0,9520|3671|13,9520|3672|12,9520|3673|11,9520|3674|10,9520|3675|9,9520|3676|8,9520|3677|7#
    J'ai trouvé le commencement du code js à écrire mais arrivé avant 9520 ça ne fonctionne plus...
    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
    let answer = {} 
    let elements = msg.payload.split(",")  // this gives an array containing the bits
    answer.command = elements[0]                      
    answer.languageNotice = elements[1]              
    answer.flag = elements[2]                          
    node.warn(`flag is: ${answer.flag}`)              
    answer.baseCount = elements[3]                  
    // you can work out how to put the node.warn statements in yourself
    answer.mcc = elements[4]                          
    answer.mnc = elements[5]                         
    // now need to get the bases
    let i;
    answer.bases = []
    for (i=6, i<5+answer.baseCount, i++) {
      let baseElements = elements[i].split("|")
      answer.push({lac: baseElements[0], cid: baseElements[1], dbm: baseElements[2]})
    }
    // the rest needs to go in here
    msg.payload = answer
    return msg

    QQ'un a 1 idée? Merciiii !!!!!
    Dernière modification par NoSmoking ; 13/02/2019 à 16h49. Motif: (MP) Merci d'utiliser les balises [CODE][/CODE], bouton # de l'éditeur

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut


    Une solution possible, mais donne un Array contenant des Array en nombre variable selon le contenu du texte entré.

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    const dataStr = "IWAP02,zh_cn,0,7,460,0,9520|3671|13,9520|3672|12,9520|3673|11,9520|3674|10,9520|3675|9,9520|3676|8,9520|3677|7#";
     
    let str = dataStr.slice(0, -1); // pour éliminer lé # final
     
    let arrStr = str.split('|');
     
    let arrItem = [];
     
    for ( const item of arrStr){
        arrItem.push(item.split(','));
    }
     
    //debug
    console.table(arrItem); // ce qui donne un array d'array avec des dimensions variables
     
    /*
    Array(15)
    0: (7) ["IWAP02", "zh_cn", "0", "7", "460", "0", "9520"]
    1: ["3671"]
    2: (2) ["13", "9520"]
    3: ["3672"]
    4: (2) ["12", "9520"]
    5: ["3673"]
    6: (2) ["11", "9520"]
    7: ["3674"]
    8: (2) ["10", "9520"]
    9: ["3675"]
    10: (2) ["9", "9520"]
    11: ["3676"]
    12: (2) ["8", "9520"]
    13: ["3677"]
    14: ["7"]
    length: 15
    __proto__: Array(0)
    */

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    Pas tout compris mais si tu veux splitter sur plusieurs séparateurs possibles...
    tu peux le faire avec une reg

    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Citation Envoyé par SpaceFrog
    tu peux le faire avec une reg

    .splt(/,|[|]/)
    +1 de ma part pour mon ami @SpaceFrog

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    const dataStr = "IWAP02,zh_cn,0,7,460,0,9520|3671|13,9520|3672|12,9520|3673|11,9520|3674|10,9520|3675|9,9520|3676|8,9520|3677|7#";
     
    let str = dataStr.slice(0, -1); // pour éliminer lé # final
     
    let arrItem = str.split(/,|[|]/);
     
    console.log(arrItem);
     
    /*
    0: "IWAP02"
    1: "zh_cn"
    2: "0"
    3: "7"
    4: "460"
    5: "0"
    6: "9520"
    7: "3671"
    8: "13"
    9: "9520"
    10: "3672"
    11: "12"
    12: "9520"
    13: "3673"
    14: "11"
    15: "9520"
    16: "3674"
    17: "10"
    18: "9520"
    19: "3675"
    20: "9"
    21: "9520"
    22: "3676"
    23: "8"
    24: "9520"
    25: "3677"
    26: "7"
    length: 27
    */

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ingénieux!!!... j'savais pas qu'on pouvais simplement faire du split comme ça. Je viens d'apprendre !!!
    Dernière modification par NoSmoking ; 14/02/2019 à 19h32.

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    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 858
    Points : 6 556
    Points
    6 556
    Par défaut
    On peut même l'écrire comme ça: let arrItem = str.split(/[,|]/);.

    Mais tu peux aussi procéder en utilisant l'array destructuring.
    Avec cette technique, les éléments restants, quelque soit leur nombre, vont s'accumuler sous forme d'un tableau dans la dernière variable bases que tu n'as plus qu'à mapper pour obtenir ce que tu souhaites:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let [cmd, langNtc, flg, baseCnt, mcc, mnc, ...bases] = msg.payload.slice(2, -1).split(',');
     
    let answer = {
        command: cmd, languageNotice: langNtc, flag: flg,
        baseCount: baseCnt, mcc: mcc, mnc: mnc,
        bases: bases.map(i => { return i = i.split('|'), { lac: i[0], sid: i[1], dbm: i[2] } })
    }
    Pour éviter de polluer ton espace avec des noms de variables inutiles, tu peux encapsuler le tout dans une fonction anonyme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    let answer = (function (s) {
        let [cmd, langNtc, flag, baseCnt, mcc, mnc, ...bases] = s.split(',');
        return {
            command: cmd, languageNotice: langNtc, flag: flag,
            baseCount: baseCnt, mcc: mcc, mnc: mnc,
            bases: bases.map(i => { return i = i.split('|'), { lac: i[0], sid: i[1], dbm: i[2] } })
        }
    })(msg.payload.slice(2, -1));
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 661
    Points
    66 661
    Billets dans le blog
    1
    Par défaut
    en effet je ne sais pas ce qui m'a pris de mettre un or vu que je mettais déjà le pipe dans une classe ...
    Je crois que c'est SharePoint qui m'abrutit ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/06/2010, 11h36
  2. Réponses: 3
    Dernier message: 02/04/2009, 12h47
  3. Réponses: 21
    Dernier message: 18/11/2008, 14h36
  4. [TDBChart]Comment mettre les valeurs DANS les barres
    Par SubZero2 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 26/09/2008, 08h43

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