C# Ideenfindung Conditional Replacement/dyn. Textersetzung/Textinterpretation

Raknar

Ensign
Dabei seit
Apr. 2006
Beiträge
136
Hallo,

ich beschreibe erstmal, was eigentlich geleistet werden soll:

Es sollen Kundentexte nach dem Baukastenprizip erstellt werden. Weil es extrem viele Kombinationen und Arten gibt, soll das Ganze per Textersetzung geschehen. Es sollen also Tokens im Text stehen, die ersetzt werden sollen.

Kleines Beispiel, wie es sein könnte:
Code:
Hallo [Person.Forename]

-> Hallo Peter
Das ist noch nicht schwer. Schwieriger werden die Abfragestrukturen. Die könnten in etwa so aussehen:
Code:
{{ IF (Bedingung1) }} 
Text1

{{ ELSEIF(Bedingung2) }}
Text2

{{ ELSEIF    (Bedingung3) }}
Text3

{{ELSE}}
Default-Text

{{ ENDIF }}
Es geht also schon in Richtung Crystal Reports oder T4. Es soll also einfache Sytanx in z.B. Word-Dokumenten stehen. Das wird dann interpretiert und aus einer Datenbank kommen dann die passenden Texte. Am Ende wird daraus ein individuell erstellter Text.
Warum also selbst entwickeln?:
- In der Software wird es einen Editor geben, der das Zusammenstellen/Anpassen für Laien ermöglicht.
- geschulten Leuten kann man obige Syntax (Idee) zumuten
- Sämtlicher Input/Output wird so realisiert (Mail, Doc, PDF, SimpleText, Excel)
- die Logik wird zukünftig noch benötigt

Ich habe schon selbst recherchiert: Link 1 Link 2
Zusammen gehen die beiden in die richtige Richtung, allerdings nur grob.

Deswegen wollte ich hier mal fragen:
- Hat einer so etwas schon mal gemacht? -> Ratschläge?
- Gibt es vielleicht Teilbibliotheken, die etwas davon schon können?

Ich bin also in erster Linie auf der Suche nach Ideen und Konzepten, die dafür sorgen, nicht in die komplett falsche Richtung zu gehen.
Vielen Dank schonmal im voraus :)
 
M

Marguth

Gast
Echt witzig ich mache sowas gerade selbst :D

Ich mache das gerade in etwa so:
Eine Tabelle in der mappe ich keyword (z.b. [Name]) auf eine Expression (z.B. Company.Name).

Beim versenden der Mail habe ich nun eine Methode (PseudoCode):
Code:
SendMessage(string message, object company, Dictionary<string,string> keywords)
{
    foreach(var item in keywords)
    {
         message.Replace(item.Key, GetValueFromExpressionPerReflection(company, item.Value));
    }
}
hoffe das hilft dir ein wenig.

PS: Pseudocode hat einen offensichtlichen Fehler kannst du ihn finden? ;)
 
Zuletzt von einem Moderator bearbeitet:

Raknar

Ensign
Ersteller dieses Themas
Dabei seit
Apr. 2006
Beiträge
136
@ Marguth

Genau das ist bei mir der einfachere Fall. Das Außenherum (Basisklassen, Iterface, Filter...) und die dazugehörigen Unittests steht schon. Den Dictionary-Ansatz habe ich auch genommen. Auch gleich für Serienersetzungen.

Jetzt versuche ich erstmal eine Ersetzungslogik zu bauen, die das Austauschen dynamisch gestaltet.
 
Top