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

Contribuez Discussion :

[SRC] String Format


Sujet :

Contribuez

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert éminent

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Par défaut [SRC] String Format
    Dernièrement j'ai (re)découvert en Java cette écriture-ci:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String chaine = String.Format("Hello %s !", "World");

    Qui donne comme résultat:

    Hello World !
    Je me suis dit: "Géééééniiiaaaal! On peut ajouter des paramètres à la chaine!!!". Alors je me suis renseigné et j'ai remarqué que ce n'était rien de nouveau sous le soleil, étant donné que c'est la méthode String.Format.
    Un truc classique qui formate les valeurs passées en paramètres et qui tire son origine sans doute du printf du C.

    Prout, j'étais fort déçu.
    Puis, j'ai cherché la version de String.Format en Javascript. Pas trouvée.

    Donc, je m'y suis mis. D'où m'a demande sur les RegExp à laquelle javatwister a aimablement répondu. Merci à lui, d'ailleurs.
    Bref, j'ai défini mes tags:

    Chaine de caractères: %s, %sl, %su, %sx
    Entier: %n, %nbase
    Float: %f, %.chiffres, %f,chiffres
    Date: %d('format')
    Avec la regexp suivante:

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    var reg_exp_total = /%s\w?|%n\d*|%f[\.,]\d+|%d\('[^\)]+'\)/g;

    C'est là que le code de javatwister m'intéressait beaucoup. Premièrement, on compte le nombres d'occurences:

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    var occurences = chaine.match(reg_exp_total).length;

    Ensuite on boucle sur les occurences et on "retire" de la chaine la partie dont on vient de s'occuper:

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    chaine2 = chaine;
    var reg_exp = /%s\w?|%n\d*|%f[\.,]\d+|%d\('[^\)]+'\)/;
    var r = chaine2.match(reg_exp); // 1ère correspondance trouvée
    var q += r.index+r[0].length; // incrémentation de "q";
    chaine2 = chaine.substring(q);// on retranche les premiers caractères de chaine2, jusqu'à q;

    Pendant ce temps-là, j'ai fait un traitement sur la chaine selon le tag trouvé et le formatage voulu.
    Y a plus qu'à remplacer le tag par le formatage:

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    chaine3 = chaine;
    chaine3 = chaine3.replace(reg_exp, param);

    Petit à petit, chaine2 diminue et chaine3 grandit tandis que chaine reste la même afin de garder la position des tags.
    Pour le formatage en lui-même, je fais un switch sur le tag trouvé et j'applique des méthodes fort connues comme:

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    toLowerCase();
    toUpperCase();
    parseInt();
    parseFloat();
    toFixed();

    Puis je m'occupe des dates. Donc la date est décrite ainsi:

    Nous sommes le %d('$dd/$mm/$yyyy').
    J'utilise le même principe avec pour regexp ceci (elle est sûrement à retravailler):

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var reg_exp_total = /\$dd\b|\$ddd|\$mm\b|\$mmm|\$yy\b|\$yyyy|\$hh|\$PM|\$mi\b|\$ss|\$milli/g;

    J'appelle la même méthode en lui précisant que je manipule une date (le paramètre à passer est un objet Date).
    D'où certains if-else un peu partout afin d'obtenir une seule fonction pour les deux types de cas.
    Ici, j'utilise les méthodes de l'objet Date:

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    getDate();
    getDay();
    getMonth();
    getYear();
    getFullYear();
    getHours();
    getMinutes();
    getSeconds();
    getMilliseconds();

    Et le tour est joué.
    Bien entendu, le script peut-être complété et amélioré. Il y a moyen de faire planter le programme ou d'obtenir des choses affreuses, mais le principe est là.
    Je vous ai mis une page de test avec un exemple déjà lancé. Vous pouvez lancer vos propres exemples sauf si vous désirez manipuler les dates, vu qu'il faut un objet Date.


    Edit: Ajout du code de SpaceFrog pour la page de test.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [C#]String.Format avec un Array
    Par backseatgreg dans le forum C#
    Réponses: 11
    Dernier message: 27/11/2005, 17h22
  2. [c#] string.Format argggggg
    Par the_bmo dans le forum C#
    Réponses: 6
    Dernier message: 04/11/2005, 16h06
  3. [VB.NET] StringBuilder Vs String.Format
    Par maitrebn dans le forum Windows Forms
    Réponses: 6
    Dernier message: 19/10/2004, 18h58
  4. [C#] String.Format
    Par alexischmit dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/05/2004, 11h58
  5. [VC++ .NET] String::Format({?}, ...
    Par benoitB dans le forum MFC
    Réponses: 2
    Dernier message: 15/12/2003, 13h22

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