Entwickler-Ecke

C# - Die Sprache - Problem mit rtf-Code in C#


DevInet - Mo 23.08.10 15:23
Titel: Problem mit rtf-Code in C#
Hallo zusammen.

Ich habe ein Problem mit meinem Programm zum generieren von Outlook-Signaturen.
Ich will für Outlook eine Signatur als .rtf-Datei erstellen.
Hierzu habe ich eine Basis-Datei erstellt, welche Platzhalter für die relevanten Daten enthält. Einer dieser Platzhalter steht für Events, welche einen Link enthalten. Mit Perl funktioniert das ganze auch wunderbar. Aber wenn ich das mit meinem C#-Programm per Regex ersetze funktioniert das ganze nicht.
Ich hoffe einer von euch kann mir da weiterhelfen.

Programm-Code:

C#-Quelltext
1:
string ersatz3 = Regex.Replace(entry, exp3, "\\{\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\f1\\fs16\\cf17\\insrsid15890944 \\hich\\af1\\dbch\\af31505\\loch\\f1 Am }" + "{\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\b\\f1\\fs16\\cf17\\insrsid12795575 \\hich\\af1\\dbch\\af31505\\loch\\f1 "+ evdatum + "}{\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\b\\f1\\fs16\\cf17\\insrsid15890944\\charrsid15890944 \\hich\\af1\\dbch\\af31505\\loch\\f1 :}" + "{\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\f1\\fs16\\cf17\\insrsid15890944 \\hich\\af1\\dbch\\af31505\\loch\\f1  }" + "{\\field\\fldedit{\\*\\fldinst {\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\f1\\fs16\\cf17\\insrsid11938771\\charrsid4074067 \\hich\\af1\\dbch\\af31505\\loch\\f1  HYPERLINK \"" + evlink + "\" }{\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\f1\\fs16\\cf17\\insrsid11354410charrsid4074067}}" + "{\\fldrslt {\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\f1\\fs16\\cf17\\insrsid12795575 \\hich\\af1\\dbch\\af31505\\loch\\f1 " + evtext + "}}}\\sectd \\ltrsect \\linex0\\endnhere\\sectdefaultcl\\sftnbj {\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\f1\\fs16\\cf17\\insrsid4930345\\charrsid4074067 \\par }\\");                    


rtf-Code in der per C# generierten Datei:

Quelltext
1:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13303839 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid13513359 \hich\af31506\dbch\af31505\loch\f31506  \{\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \f1\fs16\cf17\insrsid15890944 \hich\af1\dbch\af31505\loch\f1 Am }{\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \b\f1\fs16\cf17\insrsid12795575 \hich\af1\dbch\af31505\loch\f1 23.06.2010}{\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \b\f1\fs16\cf17\insrsid15890944\charrsid15890944 \hich\af1\dbch\af31505\loch\f1 :}{\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \f1\fs16\cf17\insrsid15890944 \hich\af1\dbch\af31505\loch\f1  }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \f1\fs16\cf17\insrsid11938771\charrsid4074067 \hich\af1\dbch\af31505\loch\f1  HYPERLINK "http://www.r-tec.net/Veranstaltungen/Workshops/Security-Tag-23-Juni/index.htm" }{\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \f1\fs16\cf17\insrsid11354410charrsid4074067}}{\fldrslt {\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \f1\fs16\cf17\insrsid12795575 \hich\af1\dbch\af31505\loch\f1 r-tec IT Security Tag}}}\sectd \ltrsect \linex0\endnhere\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \f1\fs16\cf17\insrsid4930345\charrsid4074067 \par }\}{\rtlch\fcs1 \af0 \ltrch\fcs0                    


rtf-Code in der per Perl generierten Datei:

Quelltext
1:
\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13303839 {\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid13513359 \hich\af31506\dbch\af31505\loch\f31506  {\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \f1\fs16\cf17\insrsid15890944 \hich\af1\dbch\af31505\loch\f1 Am }{\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \b\f1\fs16\cf17\insrsid12795575 \hich\af1\dbch\af31505\loch\f1 23.09.2010}{\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \b\f1\fs16\cf17\insrsid15890944\charrsid15890944 \hich\af1\dbch\af31505\loch\f1 :}{\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \f1\fs16\cf17\insrsid15890944 \hich\af1\dbch\af31505\loch\f1  }{\field\fldedit{\*\fldinst {\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \f1\fs16\cf17\insrsid11938771\charrsid4074067 \hich\af1\dbch\af31505\loch\f1  HYPERLINK "http://www.r-tec.net/Veranstaltungen/Workshops/Kunden-Tag-23-September/index.htm" }{\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \f1\fs16\cf17\insrsid11354410arrsid4074067}}{\fldrslt {\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \f1\fs16\cf17\insrsid12795575 \hich\af1\dbch\af31505\loch\f1 r-tec Kundentag im Golden Tulip in Wuppertal}}}\sectd \ltrsect \linex0\endnhere\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs16 \ltrch\fcs0 \f1\fs16\cf17\insrsid4930345\charrsid4074067 \par }}{\rtlch\fcs1 \af0 \ltrch\fcs0                    


Mfg
DevInet


DevInet - Mo 23.08.10 16:50

Hat sich erledigt.

Der Fehler sieht wie folgt aus!

Alter Code:

C#-Quelltext
1:
string ersatz3 = Regex.Replace(entry, exp3, "\\{\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\f1\\fs16\\cf17\\insrsid15890944 \\hich\\af1\\dbch\\af31505\\loch\\f1 Am }" + "{\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\b\\f1\\fs16\\cf17\\insrsid12795575 \\hich\\af1\\dbch\\af31505\\loch\\f1 "+ evdatum + "}{\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\b\\f1\\fs16\\cf17\\insrsid15890944\\charrsid15890944 \\hich\\af1\\dbch\\af31505\\loch\\f1 :}" + "{\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\f1\\fs16\\cf17\\insrsid15890944 \\hich\\af1\\dbch\\af31505\\loch\\f1  }" + "{\\field\\fldedit{\\*\\fldinst {\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\f1\\fs16\\cf17\\insrsid11938771\\charrsid4074067 \\hich\\af1\\dbch\\af31505\\loch\\f1  HYPERLINK \"" + evlink + "\" }{\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\f1\\fs16\\cf17\\insrsid11354410charrsid4074067}}" + "{\\fldrslt {\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\f1\\fs16\\cf17\\insrsid12795575 \\hich\\af1\\dbch\\af31505\\loch\\f1 " + evtext + "}}}\\sectd \\ltrsect \\linex0\\endnhere\\sectdefaultcl\\sftnbj {\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\f1\\fs16\\cf17\\insrsid4930345\\charrsid4074067 \\par }\\");                    


Neuer Code:

C#-Quelltext
1:
string ersatz3 = Regex.Replace(entry, exp3, "{\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\f1\\fs16\\cf17\\insrsid15890944 \\hich\\af1\\dbch\\af31505\\loch\\f1 Am }" + "{\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\b\\f1\\fs16\\cf17\\insrsid12795575 \\hich\\af1\\dbch\\af31505\\loch\\f1 "+ evdatum + "}{\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\b\\f1\\fs16\\cf17\\insrsid15890944\\charrsid15890944 \\hich\\af1\\dbch\\af31505\\loch\\f1 :}" + "{\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\f1\\fs16\\cf17\\insrsid15890944 \\hich\\af1\\dbch\\af31505\\loch\\f1  }" + "{\\field\\fldedit{\\*\\fldinst {\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\f1\\fs16\\cf17\\insrsid11938771\\charrsid4074067 \\hich\\af1\\dbch\\af31505\\loch\\f1  HYPERLINK \"" + evlink + "\" }{\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\f1\\fs16\\cf17\\insrsid11354410charrsid4074067}}" + "{\\fldrslt {\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\f1\\fs16\\cf17\\insrsid12795575 \\hich\\af1\\dbch\\af31505\\loch\\f1 " + evtext + "}}}\\sectd \\ltrsect \\linex0\\endnhere\\sectdefaultcl\\sftnbj {\\rtlch\\fcs1 \\af1\\afs16 \\ltrch\\fcs0 \\f1\\fs16\\cf17\\insrsid4930345\\charrsid4074067 \\par }");                    


Mfg DevInet


Trashkid2000 - Mo 23.08.10 16:54

und da brauchst Du echt so einen langen regulären Ausdruck, nur um an den Hyperlink zu kommen :shock:

Ist die Stelle denn so uneindeutig?


DevInet - Di 24.08.10 17:58

Der Ausdruck enthält ja nicht nur den Hyperlink, sondern auch noch eine Zusatzinformation, einen Text der den Hyperlink maskiert und die ganzen Werte für Schriftgrösse, Farbe, etc.

Mfg DevInet