Autor Beitrag
implicit
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Do 11.06.09 16:26 
Hi Leute,

Ich braeuchte nen kleinen Denkanstoss ;)

Ich lese eine XML Datei mittels LinQ ein und gebe diese an ein richTextBox. Das einlesen funktioniert soweit erstmal total einfach und auch vorher das combobox fuellen.. Jetzt kommt aber mein Problemchen.

Wharscheinlich eher ein Verstaendnis Issue ;)

In der XML Datei sind bestimmt Begriffe als Variablen an gegeben. zum Beispiel $Name, $Anschrift usw.

Wie kann ich diese Variablen an bestimmte Textfelder Uebergeben oder bei dem Lesevorgang ersetzen durch einen string aus einem Textbox ?

Dieses Programm soll sozusagen ein Template Builder sein der Bestimmte Emails aus der XML datei nimmt und diese mit Daten fuellt und in einer richTextBox darstellt.

Wenn Ihr code braucht einfach fragen. Fuer Antworten bin ich schon jetzt dankbar.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 11.06.09 17:16 
:welcome:

user profile iconimplicit hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann ich diese Variablen an bestimmte Textfelder Uebergeben oder bei dem Lesevorgang ersetzen durch einen string aus einem Textbox ?
Da du das Problem nur allgemein beschrieben und nicht erwähnt hast, wo es nun hängt, kann ich dir auch nur eine allgemeine Antwort geben: Mit string.Replace ;) .

_________________
>λ=
implicit Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Do 11.06.09 19:27 
Hehe,

Ok das habe ich verdient ;)

Also doch mal bissel code mal hier :)

Also ich lese aus der XML Daten aus. Die XML sieht folgendermassen aus (is natuerlich nur nen Auschnitt)..

ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
<?xml version="1.0" encoding="utf-8"?>
<mailing>
  <template>
     <title>Details Anfrage</title>
        <mail>$Anrede $Name,

              Zu der von Ihnen eröffneten Bearbeitungsnummer $CaseID ...

              $Abschied
        </mail>
   </template>
</mailing>


Diese wird mit folgendem Code ausgelesen.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
private void getemailCombo_SelectedIndexChanged(object sender, EventArgs e)
            {
                {
                    XDocument xmlDoc = XDocument.Load("G:\\TandS/templates/email/mails.xml");

                    var Template = from template in xmlDoc.Descendants("template")
                                   where template.Element("title").Value == getemailCombo.SelectedItem.ToString()
                                   select new
                                   {
                                       Title = template.Element("title").Value,
                                       Mail = template.Element("mail").Value,
                                   };

                    richTextBox1.Text = "";
                    foreach (var template in Template)
                    {
                        richTextBox1.Text = richTextBox1.Text + "Title: " + template.Title + "\n";
                        richTextBox1.Text = richTextBox1.Text + "Mail: " + template.Mail + "\n\n";
                    }

                    if (richTextBox1.Text == "")
                        richTextBox1.Text = "No Results.";
                }
            }


So meine Frage ist nun. Wie kann ich die Strings mit Varibalen Zeichen $ replacen. Wird das direkt bei dem Auslesen void gebastelt oder benoetige ich ne einzellne void dazu ?

Gruss Steffen

P.s. Danke fuer das Welcome :)
implicit Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Do 11.06.09 19:59 
Jep, DANKE fuer den Denkanstoss...

bissel Nachdenken und ne andere Meinung hilft :)

ausblenden C#-Quelltext
1:
2:
3:
                    string s = richTextBox1.Text;
                        string v = s.Replace("$Name""Steffen");
                        richTextBox1.Text = v;


Bumm und schon fetzt es :) DANKOE nochmal.... !!!

Jetzt brauch ich nur noch nen Multi string replace :)

Kannst Du mir da nen Tip zu geben ?
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 11.06.09 20:30 
user profile iconimplicit hat folgendes geschrieben Zum zitierten Posting springen:
Jetzt brauch ich nur noch nen Multi string replace :)

Den kenne ich nicht bei den Standard-Klassen, aber das ist mit for oder foreach doch überhaupt kein Problem. Das Problem liegt eher darin, dass zwar die Suchbegriffe fest sind und in einem Array oder einer List<string> vorgegeben werden können, aber die "Ersatzbegriffe" von unterschiedlichen Stellen geholt werden müssen.

user profile iconimplicit hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden C#-Quelltext
1:
2:
3:
                    string s = richTextBox1.Text;
                        string v = s.Replace("$Name""Steffen");
                        richTextBox1.Text = v;

Dreh besser die Reihenfolge um: zuerst alle Vorgänge mit Suchen + Ersetzen erledigen, erst am Schluss in dir RTF-Box eintragen.

Gruß Jürgen
implicit Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Do 11.06.09 21:08 
Danke fuer den Hinweis, aber es funktioniert perfekt nun

Loesung:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
string p = richTextBox1.Text;
                          
    p = p.Replace("$Name", (textBox2.Text));
    p = p.Replace("$Agent",(label9.Text));
    p = p.Replace("$CloseDate", Convert.ToString(dateTimePicker1.Value));
    p = p.Replace("$CaseID", (textBox3.Text));
    p = p.Replace("$Anrede", Convert.ToString(anredeCombo.SelectedItem));
                           
    richTextBox1.Text = p;


Somit ist das Thema hier erledigt. Auftrag erfuellt :)

Bis zum naechsten mal
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 12.06.09 08:22 
Hallo,

noch ein paar Kleinigkeiten: Fast die Hälfte deiner Klammern ist überflüssig; die erschweren nur das Lesen:
ausblenden C#-Quelltext
1:
    p = p.Replace("$CaseID", textBox3.Text);					

Um die String-Darstellung eines Wertes zu bekommen, gibt es immer die ToString-Methode; die Convert-Methoden sind äußerst selten sinnvoll:
ausblenden C#-Quelltext
1:
    p = p.Replace("$Anrede", anredeCombo.SelectedItem.ToString());					

Bezeichner wie textBox3 und label9 gehören verboten. Da weißt auch du spätestens nach 2 Wochen nicht mehr, wozu diese Controls da sind. anredeCombo ist um Längen besser. Siehe dazu auch NET Richtlinien für Namen.

So wie du jetzt mehrfach hintereinander Replace aufrufst, vermeidest du auch das ständige Ändern des Inhalts der RTB-Box; das würde die Anzeige ziemlich umständlich und langsam machen. Das ist also nebenbei eine Verbesserung der Geschwindigkeit.

Gruß Jürgen
implicit Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Sa 13.06.09 13:33 
hi,

danke fuer Deinen Construktiven Kommentar :) habe auch gleich mal die Standart labels Bezeichner geaendert. :)
Das war eh erstmal nur fuern test der void.

das mit den Klammern und der methode hatte ich net gewusst ;) komme noch aus ner alten Pascal - Schule :)

Jetzt habe ich allerdings nen anderes Issue :) also kein parsen aus ner xml .. sondern nen TreeView fuellen aus ner XML.

Gruss Steffen