Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
String.Format(...) Extended
TheBrainiac
myCSharp.de - Member

Avatar #avatar-3152.png


Dabei seit:
Beiträge: 795
Herkunft: /dev/null

Themenstarter:

String.Format(...) Extended

beantworten | zitieren | melden

Beschreibung:

Ich habe mir eine kleine Klasse geschrieben, die ähnlich wie String.Format(...) Variablen in einem Text ersetzt. Zusätzlich dazu kann meine Klasse aber auch mit Funktionen umgehen. Anders als bei String.Format(...) werden Variablen in meinem Snippet benannt (und nicht nur durchnummeriert).

Variablen:
"foo = $foo": Die Variable $foo wird durch ihren entsprechenden Wert ersetzt.

Funktionen:
"$(IF $condition 'Wert für True' 'Wert für False')": Die Variable $condition wird durch ihren entsprechenden Wert ersetzt, danach wird die Funktion IF aufgerufen. Ihr werden drei Parameter übergeben (1. Der Wert von $condition, 2. 'Wert für True' und 3. 'Wert für False'). Das Resultat der Funktion wird anstelle des Statement-Textes in den Ergebnis-String eingesetzt.

Wie registriere ich Variablen / Funktionen?
Angenommen, myStringFormatter sei eine Instanz von StringFormatter.

Mittels folgendem Code wird die Funktion REGREPLACE registriert:

myStringFormatter.Functions.Add("REGREPLACE", (args) => Regex.Replace(args[0], args[1], args[2]));

Ein Beispielaufruf würde so aussehen: $(REGREPLACE 'input' 'pattern' 'replace_with')

Die Variable $loggedin wird so registriert:

myStringFormatter.Variables.Add("loggedin", "true");

Fehlerbehandlung
Die Klasse StringFormatter stellt zwei Events zur Fehlerbehandlung zur Verfügung: UnknownFunction und UnknownVariable.

Angenommen, myStringFormatter sei eine Instanz von StringFormatter.

myStringFormatter.UnknownFunction += (s, e) =>
{
    e.ErrorBehaviour = ErrorBehaviour.Ignore;
};

myStringFormatter.UnknownVariable += (s, e) =>
{
    e.ErrorBehaviour = ErrorBehaviour.Replace;
    e.Replacement = e.Identifier;
};

Mittels ErrorBehaviour.Replace wird die Variable/Funktion durch einen e.Replacement ersetzt.

Mittels ErrorBehaviour.Ignore wird die Variable/Funktion durch String.Empty ersetzt

Mittels ErrorBehaviour.Throw, was die Standardeinstellung ist, wird eine Exception erzeugt.

Ein komplexeres Beispiel:

var input = @"Hello, $(IF $loggedIn $username 'Unknown')!
You are $(IF $loggedIn $(IF $(ISMATCH $role '(admin)|(root)') 'a superuser' 'a normal user') 'not registered')!";

var sf = new StringFormatter();

sf.Functions.Add("IF", (args) => Boolean.Parse(args[0]) ? args[1] : args[2]);

sf.Functions.Add("ISMATCH", (args) => Regex.IsMatch(args[0], args[1]).ToString());

sf.Variables.Add("loggedin", "true");
sf.Variables.Add("username", "john_doe");
sf.Variables.Add("role", "root");
                        
Console.WriteLine(sf.Format(input));

Ausgabe wäre:
Hello, john_doe!
You are a superuser!

Wie in der Zeile $(IF $loggedIn $(IF $(ISMATCH $role '(admin)|(root)') 'a superuser' 'a normal user') 'not registered') zu sehen ist, können Funktionen beliebig tief verschachtelt werden.

Schlagwörter: String format formatierung functions funktionen
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von TheBrainiac am .
Attachments
There are 10 types of people in the world:
Those, who think they understand the binary system
Those who don't even have heard about it
And those who understand "Every base is base 10"
private Nachricht | Beiträge des Benutzers