String nach vordefinierten Variablen mit Regex durchlaufen und ersetzen

  • Allgemein

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    String nach vordefinierten Variablen mit Regex durchlaufen und ersetzen

    Hi Forum,

    Ich schreibe mir gerade ein kleines Mailprogramm. Funktioniert soweit auch sehr gut. Nun möchte ich mir eigene Vorlage für meine Mails anlegen und diese dann an mehrere Empfänger senden und mit einträgen aus der Datenbank füllen.

    Ihr müsst euch folgenden Messagetext vorstellen:
    Hallo liebe $#name#$,

    ich möchte euch gerne am $#feierdatum#$ einladen.

    Gruß euer $#gastgeber#$


    Ich möchte alle verwendeten Variablen die in #$ $# mit den daten aus der Datenbank bzw. einer List ersetzen und dann die Mail versenden.

    Das ganze sollte sehr performant sein da eine Email schonmal ca. 30 Variablen enthalten kann.

    Es wäre klasse ob mir jemand hier einen Lösungsansatz geben kann, ob ich das mit Regex oder mit Replace oder sonstwas richtig liege.

    Gruß Dustin
    Willkommen im Forum. :thumbup:
    Für einen strukturierten Brief ist RegEx ein wenig zu viel.
    Mach es einfach so:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Brief As String
    3. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    4. Brief = "Hallo liebe $#name#$," & Environment.NewLine
    5. Brief &= "ich möchte euch gerne am $#feierdatum#$ einladen." & Environment.NewLine
    6. Brief &= "Gruß euer $#gastgeber#$"
    7. End Sub
    8. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    9. Brief = Brief.Replace("$#name#$", "Martina")
    10. Brief = Brief.Replace("$#feierdatum#$", "6. Mai 2013")
    11. Brief = Brief.Replace("$#gastgeber#$", "Dustin")
    12. MessageBox.Show(Brief)
    13. End Sub
    14. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke dir für deine Antwort.

    Meinst du mit Replace wäre der richtige weg? Denn ich habe ca. 100 mögliche Variablen. Ich müsste den text dann 100 mal mit replace durchlaufen, ist das nicht sehr langsam?

    Wäre es nicht besser ich würde es die Nachricht durch suchen nach den Variablen die ich brauche und dann replace anwenden? Wie bekommen ich es hin das ich die Variablen die in eine Nachricht vorkommen erst in ein Array packe und dann aufgrund des Arrays die Nachricht mit Replace durchlaufe.

    Gruß Dustin

    Dustin1981 schrieb:

    ist das nicht sehr langsam?

    Ich denke, RegEx ist langsamer. Das sollte aber egal sein, da Du nicht 100.000 Briefe pro Millisekunde verschickst.
    Mach Dir eine ordentliche Datenbank / DataTable für Deine einmaligen Synonyme (Datum, Unterschrift und Co) und mach Dir eine zweite für die Adressaten und deren Daten.
    Dann nimmst Du die Brief-Hülse, ersetzt alle einmaligen Synonyme, speicherst zwischen und gehst dann die Adressaten der Reihe nach durch. Pro Adressat also ein Brief.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!