Duplicaté possible: strong>
Analyse de la chaîne formatée. P>Comment puis-je utiliser un fichier
string.format code> et transformer sa sortie à ses entrées? p>Par exemple: P>
string formatString = "My name is {0}. I have {1} cow(s)."; string s = String.Format(formatString, "strager", 2); // Call the magic method... ICollection<string> parts = String.ReverseFormat(formatString, s); // parts now contains "strager" and "2".
3 Réponses :
Je ne crois pas qu'il y ait quelque chose dans la case pour soutenir cela, mais en C #, vous pouvez transmettre une gamme d'objets directement à n'importe quelle méthode prise code> paramètres params code> stocké des paramètres, tels que Par conséquent, la seule chose que je puisse penser, c'est que Vous pouvez formater votre code ainsi: p> String.format () code>. Autre que cela, je ne crois pas qu'il y ait une solution pour C # et la framework .NET pour savoir que String X a été construit à partir de chaîne de format magique Y et annuler la fusion. object[] parts = {"strager", 2};
string s = String.Format(formatString, parts);
// Later on use parts, converting each member .ToString()
foreach (object p in parts)
{
Console.WriteLine(p.ToString());
}
Vous devrez le mettre en œuvre vous-même, car il n'y a rien de construit pour le faire pour vous. p>
à cette fin, je vous suggère d'obtenir le code source réel pour la stratégie .NET.Format.Format (réellement, le code correspondant est dans Notez qu'il ne sera pas toujours possible d'aller en arrière. Parfois, la chaîne formatée peut avoir des caractères correspondant aux spécificateurs de format, ce qui rend difficile l'impossibilité pour le programme de savoir à quoi ressemblait l'original. Comme j'y pense, vous pourriez avoir une chance mieux de marcher sur la chaîne d'origine pour la transformer en une expression régulière, puis utilisez-la pour faire le match. P>
Je recommanderais également de renommer votre méthode à .) S (WOC 2 EVAH .REGARTS SI EMAN YM P>
blockQuote> stringbuilder.appendormat () code>). Il est librement disponible et il utilise une machine d'état pour marcher sur la corde de manière très performante. Vous pouvez imiter ce code pour aussi marcher votre chaîne formatée et extraire ces données. P>
invertFormat () code>, car Reverseformat sonne comme si vous attendez cette sortie: p>
Cette mise en œuvre est une "bière libre" libre ou "si vous essayez jamais de l'utiliser dans le code réel, je poursuivrai votre cul de cette planète gratuitement" gratuitement?
Bière gratuite, mais comme vous le modifiez considérablement de construire quelque chose de nouveau, vous devriez être en sécurité.
Voici quelques codes de quelqu'un qui tente d'un équivalent de scanf en C #: p>
Dupe: Stackoverflow.com/questions/1410012/Parsing-Formaté-string
Ma faute; Je ne savais pas que c'était une dupe. Merci Mehrdad, je vote de fermer maintenant.
C'est une dupe, mais ma question n'était pas répondue là-bas.
Strager: C'est parce qu'il n'y a pas de réponse intégrée pour cela. :) Peu importe ce que vous êtes en mode de kloveging quelque chose ensemble (une la mes réponses) ou de construire une toute nouvelle classe personnalisée pour fournir les deux côtés de la fonctionnalité.
Votre question est répondue. Aucun algorithme ne peut le faire dans le cas générique. Pensez-y comme 2 + 2 = 4. S'ils vous donnent 4 et +, comment pouvez-vous déduire si les opérandes d'entrée étaient 2 et 2 ou 1 et 3? Vous ne pouvez pas.
@Mehrdad, c'est un mauvais exemple, imo. Je peux facilement faire cela en utilisant des expressions régulières. Je me demande s'il y a une possibilité possible de le faire sans entretenir deux parties (le format et la réégycle).
@Stager: C'est une expression régulière que vous embarquez pour votre cas spécifique. Il n'est pas possible de le faire en général en théorie i>: vous pouvez analyser sans ambiguïté une production ambiguë dans une grammaire. Vous pouvez toujours convertir un arbre de syntaxe en une production de grammaire, mais l'inverse n'est pas vrai si la grammaire est ambiguë, c'est-à-dire qu'il y a plus d'une façon de générer le même mot.
Aucune idée de la façon dont cela n'a pas répondu à toutes ces années. Peut-être que cela existent alors. De toute façon, il est fait comme cette chaîne en formatage de la chaîne = "Mon nom est% s. J'ai% d vache (s)."; Vous utilisez% s pour les chaînes et% d pour int
Vous pouvez réaliser cela assez facilement en utilisant deux groupes de capture de regex: Stackoverflow.com/questions/906493/...