Reverse von String.Format? [Duplikat]

8

Wie kann ich ein String.Format -Format verwenden und seine Ausgabe in seine Eingaben umwandeln?

Zum Beispiel:

%Vor%

Ich weiß, dass ich hierfür reguläre Ausdrücke verwenden kann, aber ich möchte die gleiche Formatzeichenfolge verwenden, sodass ich nur eine Codezeile statt zwei eingeben muss.

    
strager 02.10.2009, 20:59
quelle

3 Antworten

1

Hier ist ein Code von jemandem, der ein Scanf-Äquivalent in C # versucht:

Ссылка

    
BobbyShaftoe 02.10.2009 21:07
quelle
0

Ich glaube nicht, dass es etwas In-Box zur Unterstützung gibt, aber in C # können Sie ein Array von Objekten direkt an jede Methode übergeben, die params -markierte Array-Parameter wie String.Format() verwendet. Ansonsten glaube ich nicht, dass es einen Weg für C # & amp; das .NET Framework, um zu wissen, dass die Zeichenfolge X aus der magischen Formatzeichenfolge Y erstellt wurde, und die Zusammenführung rückgängig machen.

Daher kann ich nur daran denken, dass Sie Ihren Code so formatieren können:

%Vor%

Nicht ideal, und wahrscheinlich nicht ganz das, wonach Sie suchen, aber ich denke, es ist der einzige Weg.

    
John Rudy 02.10.2009 21:04
quelle
0

Sie müssen es selbst implementieren, denn es ist nichts eingebaut, um es für Sie zu tun.

Zu diesem Zweck schlage ich vor, dass Sie den tatsächlichen Quellcode für die .Net-String-Format-Implementation erhalten (tatsächlich ist der entsprechende Code in StringBuilder.AppendFormat() ). Es ist frei verfügbar und verwendet eine Zustandsmaschine, um die Saite sehr performant zu bewegen. Sie können diesen Code nachahmen, um auch Ihre formatierte Zeichenfolge zu durchlaufen und diese Daten zu extrahieren.

Beachten Sie, dass es nicht immer möglich ist, rückwärts zu gehen. Manchmal kann die formatierte Zeichenkette Zeichen haben, die den Formatspezifizierern entsprechen, was es für das Programm schwierig macht, zu wissen, wie das Original aussah. Wenn ich darüber nachdenke, haben Sie vielleicht mehr Glück, wenn Sie die ursprüngliche Zeichenfolge verwenden, um sie in einen regulären Ausdruck umzuwandeln, und verwenden Sie diese dann, um die Übereinstimmung herzustellen.

Ich würde auch empfehlen, Ihre Methode in InvertFormat() umzubenennen, da ReverseFormat so klingt, als würden Sie diese Ausgabe erwarten:

  

.) s (woc 2 evah .reports und eman yM

    
Joel Coehoorn 02.10.2009 21:04
quelle

Tags und Links