Как я разделяю Кавычки от строки с помощью Delphi?
Напр. Я должен удалить все кавычки из, 'B', 'C', 'D', дав результат A, B, C, D. Я попробовал
MyVar := jclStrings.StrRemoveChars(sRegions, [#34]);
но никакая удача до сих пор.
Спасибо, Pieter
Хотя все остальные ответы являются жизнеспособными альтернативами, причина, по которой ваш конкретный код не работает, заключается в простой ошибке в коде символов:
MyVar := jclStrings.StrRemoveChars(sRegions, [#34]);
Код символов #34 представляет двойную кавычку char : "
Что вам нужно удалить, так это одинарную кавычку/апострофы: '
Это имеет код символов #39, поэтому это простое изменение должно исправить ваш оригинальный код:
MyVar := jclStrings.StrRemoveChars(sRegions, [#39]);
Простой способ избежать подобной путаницы - использовать литерал char, а не код char (это также сделает ваш код более легким для чтения/понимания в дальнейшем, поскольку вам не придется пытаться вспомнить, какой символ должен представлять код - конечно, вы можете добавить комментарий, но тогда этот комментарий придется обновлять, если вы измените поведение самого кода. .. Я лично предпочитаю самодокументирующийся код, насколько это возможно. Но я отвлекаюсь).
Поскольку символ одинарной кавычки используется для разделения литерала char, встроенная одинарная кавычка внутри литерала представляется как 2 последовательные одинарные кавычки:
MyVar := jclStrings.StrRemoveChars(sRegions, ['''']);
(ПРИМЕЧАНИЕ: В Delphi 2010, кажется, я припоминаю, что строки теперь могут быть разделены символами одинарной или двойной кавычки, хотя я не помню точно, распространяется ли это на литералы char (в отличие от строк с одним символом). Если да, то этот символьный литерал можно выразить как "'", хотя находит ли это менее или более запутанным - вопрос личных предпочтений. Для себя я считаю, что смешивать разделители строк менее чем разумно. Последовательность, по моему опыту, очень помогает точности. )
You can use MyVar := StringReplace(MyVar,'''','',[rfReplaceAll]);
procedure TFormMain.Button1Click(Sender: TObject);
var
s: String;
begin
s := '''A'',''B'',''C'',''D''';
s := StringReplace(s, '''', '', [rfReplaceAll]);
/// now s contains 'A,B,C,D'
end;
Вы можете использовать StrUtils.ReplaceText.
реализация
Использует StrUtils;
{$ R * .dfm}
procedure TGeneric.Button1Click(Sender: TObject);
Var
S: String;
begin
S := '''A'',''B'',''C'',''D''';
S := ReplaceText(S, '''', '');
ShowMessage(S);
end;
S теперь равно 'A, B, C, D'.
ReplaceText вызовет AnsiReplaceText, который, в свою очередь, вызовет SysUtils.StringReplace с установленными для вас флагами замены [rfReplaceAll, rfIgnoreCase].