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

C# Discussion :

Utiliser StringBuilder ou autre?


Sujet :

C#

  1. #1
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut Utiliser StringBuilder ou autre?
    Bonjour,

    Je me pose une question à la quelle je ne trouve pas de réponses tout seul

    J'ai un fichier html qui contient des parties fixes et des parties a compléter. Je veut faire le complément dans un programme en C# .Net seulement je ne sait pas qu'elle est la meilleur solution.

    Voici par exemple le contenu du fichier html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <div id="name">{Name}</div>
    <div id="name">{Number}</div>
    <div id="name">{Mail}</div>
    Je charge donc mon fichier html en mémoire, mais qu'est il préférable d'utiliser ensuite pour remplacer les {...} par le texte final à renseigner ?

    StringBuilder ? String.Format ? Stream... ?

    Merci pour vos lumière

  2. #2
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Les expressions régulières ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par The_badger_man Voir le message
    Les expressions régulières ?
    +1.
    En passant par la méthode statique Replace de la classe Regex.

  4. #4
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Ah bon Regex plus rapide qu'un StringBuilder?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par cerede2000 Voir le message
    Ah bon Regex plus rapide qu'un StringBuilder?
    Personne n'a dit que Regex est plus rapide que StringBuider.
    On a juste dit que pour que t'arrive à faire ce que tu veux, tu peux passer par Regex qui offre plus de fonctionnalité (recherche en fonction de ton patron, renplacement de chaines de caractères etc...) et ne fais pas exactement la même chose que StringBuilder qui a juste été mis en place dans le framework pour pallier au fait que la classe String est immuable. je cite ce que dis MSDN à ce sujet :
    Un objet String est dit immuable (en lecture seule) parce que sa valeur ne peut pas être modifiée une fois qu'il a été créé.Les méthodes qui semblent modifier un objet String retournent en fait un nouvel objet String contenant la modification.Utilisez la classe System.Text.StringBuilder s'il s'avère nécessaire de modifier le contenu réel d'un objet chaîne.
    Si tu penses que dans ton code tu est amené à faire de nombreuses concaténations alors utilises la classe StringBuilder pour palier au problème de mémoire (pas de performance) posé par la classe String et ensuite tu utilises la méthode Replace de ton objet StringBuilder pour remplacer les chaines de caractères {Name}, {Number} et {Mail} par leur valeur appropriée.

    Si tu penses que le remplacement de tes chaines de caractères {Name}, {Number} et {Mail} ne nécessite pas de patron (n'est pas complexe) alors évite la méthode Replace de la classe Regex qui peut s'avérer un peu lent par rapport à la méthode Replace de ton StringBuilder.

  6. #6
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Super réponse! Merci

    En effet aucun patron complexe mais seulement comme je l'ai mit dans mon exemple remplacer une chaine {truc} par une chaine final Machin. Absolument pas besoin de Regex

    Il faut juste que je puisse remplacer dans la chaine qui vient de mon fichier html tout ce qui serais sous la forme {truc}, un peu comme un template finalement. Le but étant d'obtenir un fichier html qui à la place de {truc}, {bidule}... entre les balise aura un texte finale

    StringBuilder serais donc le bon choix si j'ai tout comprit

    PS: A la limite serait il possible de remplace tout d'un coup. Style un tableau qui contient les chaines {truc}, {bidule}, {chose} et un autre qui contient l'équivalence à mettre en place ?

  7. #7
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Les expressions régulières ne sont pas vraiment utiles pour ce type de remplacement. L'avantage d'un StringBuilder c'est que ça t'évitera de générer des chaînes intermédiaires inutiles (comme dit plus haut, les string étant immutables chaque modification d'un objet string génère un nouvel objet string).

    Pour ton remplacement, construit un dictionnaire (clé = texte à remplacer, valeur = texte à mettre) et tu le parcours ensuite en remplaçant à chaque fois.

  8. #8
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Bien merci pour vos réponse. Donc pour récapituler StringBuilder.Replace en bouclant sur mon Dictionary qui contient les données à remplacer ainsi que les nouvelles données

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/11/2006, 16h46
  2. "la webcam est utilisée par une autre application!" ah bon???
    Par cortex024 dans le forum Périphériques
    Réponses: 2
    Dernier message: 04/05/2006, 12h13
  3. variables d'un formulaire et les utiliser ....dans un autre
    Par soltani.slim dans le forum Access
    Réponses: 4
    Dernier message: 22/06/2005, 15h29
  4. Comment lire un fichier DB en cours d'utilisation par 1 autr
    Par jbat dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/03/2004, 11h06
  5. [Débutant(e)] JSP utilisation static....une autre
    Par tcgenrecom dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 01/03/2004, 15h27

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