7
votes

VBScript: Quel est le moyen le plus simple de formater une chaîne?

J'ai le format suivant: Valeur1 est {0} et valeur2 est {1}.

Je dois remplacer les nombres entre les supports avec des chaînes. Cela se fait facilement dans la plupart des langues à l'aide de String.Format ou quelque chose le long de ces lignes. Comment puis-je faire cela en utilisant uniquement VBScript? P>

J'ai essayé: p>

Replace (strFormat, "{0}", value1)  
Replace (strFormat, "{1}", value2)


0 commentaires

5 Réponses :


0
votes

Pourquoi pas? Ce code fonctionne ici:

value1 = "1"
value2 = "2"

strFormat = "Value1 is {0} and Value2 is {1}."
strFormat = Replace (strFormat, "{0}", value1)  
strFormat = Replace (strFormat, "{1}", value2)

MsgBox strFormat


0 commentaires

12
votes

remplacer (straformat, "{0}", valeur1)

Basé sur votre code Snip, je suppose que vous croyez que remplacer les mutates strformat directement. Cela ne fonctionne pas comme ça; Vous attribuez le résultat à la variable d'origine comme ceci: xxx

Vous pouvez également attribuer à une autre variable pour stocker les résultats modifiés, comme celui-ci: < / p> xxx


2 commentaires

Hehe merci. C'est toujours quelque chose de simple.


Il n'a pas besoin une autre variable , mais juste pour mettre à jour la chaîne d'origine.



1
votes

Voici une belle petite fonction qui fonctionne quelque chose comme la fonction .NET String.Format. Je l'ai fait rapidement, l'ajout d'une manutention erronée est à vous. Je l'ai fait dans VB6 et ajouté une référence à Microsoft VBScript Expressions 5.5 xxx

Exemple:

strongat ("Bonjour {0}. J'aimerais que vous rencontriez {1}. Ils travaillent tous les deux pour {2}. {0} a travaillé pour {2} depuis 15 ans.", "Bruce", "Chris", " Kyle ")

Retours:

Bonjour Bruce. J'aimerais que vous rencontriez Chris. Ils travaillent tous deux pour Kyle. Bruce a travaillé pour Kyle depuis 15 ans.


1 commentaires

Quelques ajustements peuvent être effectués pour VBScript, mais cette fonction semble être polyvalente qu'une simple fonction de remplacement.



11
votes

Je voulais quelque chose de similaire et je n'aime aucune de ces réponses car ils signifiaient plusieurs lignes pour chaque valeur (Ignorer la réponse de Beaner est pour la mauvaise langue!) J'ai donc créé les éléments suivants:

Test '1', 'three', '2' and 1 again!
Test '4', 'six', '5' and 4 again!


3 commentaires

C'est imho la meilleure réponse; Simple et réutilisable. Je l'ai presque précipité, mais j'ai ensuite eu des ennuis. Chose est, votre exemple modifie SourceString . Ce n'est pas bon lorsque SourceString contient une chaîne de format que vous allez réutiliser. Appels ultérieurs vers StringFormat (SourceString, ...) ne fonctionnera pas car SourceString contient le résultat de l'appel précédent. Je vais éditer votre réponse pour résoudre ce problème.


Édité. J'ai changé le nom du paramètre SourceString à formatrine . Par exemple. .NET'S String.format a le nom format pour le premier paramètre. Maintenant, je peux uppoter!


Le seul problème possible avec cette solution est que ces arguments contenant des formats de numéro d'argumentation ultérieurs seront remplacés.



4
votes

comme aucun des réponses jusqu'à présent aborde le problème de la mise en forme (par opposition Pour interpoler / épeler des chaînes dans les chaînes):

Cette classe simple: xxx

harnais formatage .NET pour VBScript via COM. Maintenant, vous pouvez faire: xxx

Si vous êtes intéressé par le script de test / démonstration pour faire des expériences de votre propre: xxx

Pour en savoir plus sur la mise en forme de .NET, commencez par StringBuilder.AppendFormat Méthode (chaîne, objet) et Types de formatage .

voir ici et ici pour que les idées comprennent (pas copier et coller) une telle classe dans votre script.


0 commentaires