Полоса заключает в кавычки из строки

Как я разделяю Кавычки от строки с помощью Delphi?

Напр. Я должен удалить все кавычки из, 'B', 'C', 'D', дав результат A, B, C, D. Я попробовал

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

но никакая удача до сих пор.

Спасибо, Pieter

8
задан Pieter van Wyk 10 February 2010 в 17:08
поделиться

4 ответа

Хотя все остальные ответы являются жизнеспособными альтернативами, причина, по которой ваш конкретный код не работает, заключается в простой ошибке в коде символов:

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

Код символов #34 представляет двойную кавычку char : "

Что вам нужно удалить, так это одинарную кавычку/апострофы: '

Это имеет код символов #39, поэтому это простое изменение должно исправить ваш оригинальный код:

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

Простой способ избежать подобной путаницы - использовать литерал char, а не код char (это также сделает ваш код более легким для чтения/понимания в дальнейшем, поскольку вам не придется пытаться вспомнить, какой символ должен представлять код - конечно, вы можете добавить комментарий, но тогда этот комментарий придется обновлять, если вы измените поведение самого кода. .. Я лично предпочитаю самодокументирующийся код, насколько это возможно. Но я отвлекаюсь).

Поскольку символ одинарной кавычки используется для разделения литерала char, встроенная одинарная кавычка внутри литерала представляется как 2 последовательные одинарные кавычки:

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

(ПРИМЕЧАНИЕ: В Delphi 2010, кажется, я припоминаю, что строки теперь могут быть разделены символами одинарной или двойной кавычки, хотя я не помню точно, распространяется ли это на литералы char (в отличие от строк с одним символом). Если да, то этот символьный литерал можно выразить как "'", хотя находит ли это менее или более запутанным - вопрос личных предпочтений. Для себя я считаю, что смешивать разделители строк менее чем разумно. Последовательность, по моему опыту, очень помогает точности. )

10
ответ дан 5 December 2019 в 05:08
поделиться

You can use MyVar := StringReplace(MyVar,'''','',[rfReplaceAll]);

14
ответ дан 5 December 2019 в 05:08
поделиться
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;
3
ответ дан 5 December 2019 в 05:08
поделиться

Вы можете использовать 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].

7
ответ дан 5 December 2019 в 05:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: