Skip to main content
Skip table of contents

ReplaceRTF()


ReplaceRTF() – Ersetzen von formatiertem RTF Text



Mit dieser Funktion lassen sich formatierte Zeichenketten in einem RTF-Text durch ebenfalls formatierten RTF-Text oder durch Plaintext ersetzen.
Die Formatierung des neuen Texts wird hierbei beibehalten.
Es werden nur ganze Wörter gesucht/ersetzt: Beispielsweise wird bei einer Suche nach "TEST" der Ausdruck "TEST123" nicht berücksichtigt./


ParameterBeschreibung

cText:C

Formatierter Text, in dem eine Zeichenkette ersetzt werden soll

cSearchFor:C

Text, der im gesamten cText ersetzt werden soll, z. B. das Wort "TEST"

cReplaceWith:C

Un-/Formatierter Text, der anstelle des Suchworts eingefügt werden soll.
Enthält der übergebene Text keine Formatierung so wird die bereits bestehende Formatierung des zu ersetzenden Worts übernommen.
Enthält der übergebene Text eine Formatierung so wird diese Formatierung an den Trefferstellen verwendet.

bIgnoreCase:L

Groß-/Kleinschreibung bei der Suche nach cSearchFor beachten
False findet bei einer Suche nach "TEST" nur "TEST"
True findet bei einer Suche nach "TEST" auch "Test" oder "teST"

cDelimiters:C

Liste an Zeichen, die als Worttrenner gesehen werden sollen.
Hiermit lässt sich definieren, wann eine Zeichenfolge als neues Wort erkannt werden soll.

Bei keiner Angabe gelten die Zeichen: ".;,:()\{\}"/\<>!?\[\]''""-+*= „«»…" als Trennzeichen.

Gibt man nun z. B. ein "@" an so gilt nur noch dieses Zeichen als Trenner, das bedeutet die bisherigen Standard-Delimiter werden ersetzt.

Bei der Nutzung der Standard-Liste würde eine Suche nach "ABC" ein "@ABC" nicht finden, da das "@" nicht als Wort-Trenner zählt. Die Suche findet also statt "ABC" nur ein "@ABC".
Der Vergleich "ABC" == "@ABC" schlägt also fehl.

Bei Angabe des "@" als Delimiter wird das "ABC" in "@ABC" gefunden und ersetzt.
Ergebnis wäre hier: "@MeinNeuerText"
Des weiteren ist zu beachten, dass die Angabe eigener Delimiters zu z.B. folgendem Fall führt:

     Text: "@ABC ABC" - Suche: "ABC" - Ersetzen durch: "MeinText"

     Nutzung ohne Angabe von cDelimiters:
     Ergebnis: "@ABC MeinText"
     Da das "@" nicht in der Standard-Liste enthalten ist wird nur das rechte "ABC" ersetzt

     Angabe von "@":
     Ergebnis: "@MeinText ABC"
     Das rechte "ABC" wird nicht ersetzt, da sich das Leerzeichen nicht in der Delimiters-Liste befindet

     Angabe von "@ ":
     Ergebnis: "@MeinText MeinText"
     Durch die zusätzliche Angabe des Leerzeichens wird jetzt auch das rechte "ABC" ersetzt


Rückgabewert


Alphanumerisch

Beispiel


CODE
| cText, cSearchFor, cReplaceWith, cNewText1, cNewText2, cNewText3 |

// Das Wort TEST mit ST fett formatiert
cText := '{\rtf1\ansi\ansicpg0\uc1\deff0\deflang0\deflangfe0{\fonttbl{\f0\fnil Arial;}}' +
         '{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;' +
         '\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;' +
         '\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;' +
         '\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;' +
         '\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}' +
         '\pard\fi0\li0\ql\ri0\sb0\sa0\itap0 \plain \f0\fs20 TE' +
         '\plain \f0\b\fs20 ST @TEST\par}',

// Das Wort, das ersetzt werden soll
cSearchFor := 'Test',

// ABCD komplett fett formatiert
cReplaceWith := '{\rtf1\ansi\ansicpg0\uc1\deff0\deflang0\deflangfe0{\fonttbl{\f0\fnil Arial;}}' +
                '{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;' +
                '\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;' +
                '\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;' +
                '\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;' +
                '\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;' +
                '\red192\green192\blue192;}' +
                '\pard\fi0\li0\ql\ri0\sb0\sa0\itap0 \plain \f0\b\fs20 ABCD\par}',

cNewText1 := ReplaceRTF(cText, cSearchFor, cReplaceWith),       // Mit diesem Aufruf wird die Gro&szlig;-/Kleinschreibung berücksichtigt
writeln(RTFToText(cNewText1)),                                  // Ausgabe von TEST @TEST, da hier das Wort aufgrund der Gro&szlig;-/Kleinschreibung
                                                                // nicht exakt übereinstimmt (Unformatiert aufgrund von RTFToText)
cNewText2 := ReplaceRTF(cText, cSearchFor, cReplaceWith, True), // Mit diesem Aufruf wird die Gro&szlig;-/Kleinschreibung NICHT berücksichtigt.
writeln(RTFToText(cNewText2)),                                  // Ausgabe von ABCD @TEST (Unformatiert aufgrund von RTFToText)

// Bisher wird das TEST hinter dem @ nicht ersetzt, da das @ sich nicht in den Default-Delimitern befindet.
// Daraus ergeben sich folgende Konstellationen

// Angabe von "@" als einzigen Delimiter
cNewText1 := ReplaceRTF(cText, cSearchFor, cReplaceWith, True, '@'),
writeln(RTFToText(cNewText1)), // Ausgabe von TEST @ABCD (Nur das '@' gilt als Worttrennung)

// Angabe von "@ " als Delimiters (Gesprochen: "At und Leerzeichen")
cNewText1 := ReplaceRTF(cText, cSearchFor, cReplaceWith, True, '@ '),
writeln(RTFToText(cNewText1)), // Ausgabe von ABCD @ABCD

// Für eine sichtbare Formatierung wird beispielsweise ein TRichEdit benötigt, in das der Text geschrieben werden kann.


Weitere Verknüpfungen




JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.