Streiche Zitate aus einer Zeichenkette

8

Wie entferne ich Zitate aus einer Zeichenfolge mit Delphi?

Bsp. Ich muss alle Anführungszeichen von "A", "B", "C", "D" entfernen, was ein Ergebnis von A, B, C, D ergibt. Ich habe es versucht

MyVar := jclStrings.StrRemoveChars(sRegions, [#34]);

aber bisher kein Glück.

Danke, Pieter

    
Pieter van Wyk 10.02.2010, 17:08
quelle

4 Antworten

10

Obwohl die anderen Antworten alle brauchbaren Alternativen sind, liegt der Grund dafür, dass Ihr spezifischer Code nicht funktioniert, in einem einfachen Fehler im Zeichencode:

%Vor%

Der Zeichencode # 34 steht für das doppelte Anführungszeichen char: "

Was Sie entfernen müssen, sind einfaches Anführungszeichen / Apostrophe: '

Dies hat den Zeichencode # 39, also sollte diese einfache Änderung Ihren ursprünglichen Code beheben:

%Vor%

Ein einfacher Weg, um diese Art von Verwirrung zu vermeiden, ist die Verwendung des Literals anstelle des Zeichencodes (es wird auch Ihren Code später leichter lesbar machen, da Sie nicht versuchen müssen, sich daran zu erinnern, welche Zeichen das sind Code sollte darstellen - Sie könnten natürlich einen Kommentar hinzufügen, aber dann muss dieser Kommentar auf dem neuesten Stand gehalten werden, wenn Sie das Verhalten des Codes selbst ändern ... Ich persönlich bevorzuge es, Code so weit wie möglich zu dokumentieren Abschweifung).

Da das einfache Anführungszeichen zum Abgrenzen eines Char-Literals verwendet wird, wird ein eingebettetes einzelnes Anführungszeichen innerhalb eines Literals als zwei aufeinanderfolgende einfache Anführungszeichen dargestellt:

%Vor%

( HINWEIS: In Delphi 2010 kann ich mich daran erinnern, dass Strings jetzt entweder mit einfachen oder doppelten Anführungszeichen begrenzt sein können, obwohl ich mich nicht daran erinnern kann, ob sich das auch auf char erstreckt Literale (im Gegensatz zu einzelnen Zeichenfolgen. Wenn ja, könnte dieses char literal stattdessen als "'" ausgedrückt werden, ob es weniger persönlich oder eher verwirrend ist. Ich halte es für weniger sinnvoll, es zu mischen String-Begrenzer Konsistenz ist eine große Hilfe für die Genauigkeit meiner Erfahrung. )

    
Deltics 10.02.2010, 19:02
quelle
13

Sie können MyVar := StringReplace(MyVar,'''','',[rfReplaceAll]);

verwenden     
skamradt 10.02.2010 17:17
quelle
7

Sie können StrUtils.ReplaceText verwenden.

Implementierung

Verwendet StrUtils;

{$ R * .dfm}

%Vor%

S ist nun gleich 'A, B, C, D'.

ReplaceText ruft AnsiReplaceText auf, das wiederum SysUtils.StringReplace aufruft, wobei die Ersetzungsflags [rfReplaceAll, rfIgnoreCase] ​​für Sie gesetzt sind.

    
Warren Markon 10.02.2010 17:51
quelle
3
%Vor%     
ulrichb 10.02.2010 17:18
quelle

Tags und Links