8
votes

Bande citations d'une chaîne

Comment dépouiller des citations d'une chaîne à l'aide de Delphi?

ex. Je dois supprimer toutes les citations de 'A', 'B', 'C', "D", donnant le résultat d'un, B, C, D. J'ai essayé

myvar: = jclstrings.stremovecharn (Srégions, [# 34]);

mais pas de chance jusqu'à présent.

Merci, Pieter


1 commentaires

Merci à tous pour les excellentes réponses. Le vrai problème cependant, comme indiqué par Deltics ci-dessous, est-ce que # 34 = "(double citation). J'aurais dû utiliser le n ° 39 qui est une citation unique." L'hypothèse est la mère de tous les problèmes ". Cordialement, Pieter .


5 Réponses :


14
votes

Vous pouvez utiliser myvar: = stringreplace (myvar, '' '' '', '', [rfreplaceall]);


0 commentaires

3
votes
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;

0 commentaires

7
votes

Vous pouvez utiliser strutils.Replacetextextextextex.

implémentation

utilise des strutils;

{$ r * .dfm} xxx

s maintenant est égal à 'A, B, C, D'.

RemplaText appellera ansireplacetext qui appelle à son tour sysutils.stringreplace avec les drapeaux de remplacement [rfreplaceall, rfignorecase] défini pour vous.


0 commentaires

10
votes

Bien que les autres réponses soient toutes les alternatives viables, la raison pour laquelle votre code spécifique ne fonctionne pas est due à une simple erreur dans le code de caractère: xxx

Le code de caractère # 34 représente le < Strong> Double citation Char: "

Ce que vous devez supprimer est unique citation / apostrophes: '

Ceci a le code de caractères # 39, ce changement simple devrait donc corriger votre code d'origine: xxx

Un moyen simple d'éviter ce type de confusion est d'utiliser le caractère littéral, plutôt que le code de caractère (il rendra également votre code plus facile à lire / à comprendre plus tard, car vous n'essayez pas d'essayer de vous souvenir de ce que le code est censé représenter - vous pouvez ajouter un commentaire bien sûr, mais ce commentaire doit alors être tenu à jour si Vous changez le comportement du code lui-même ... Je préfère personnellement le code de documentation automatique autant que possible. Mais je me digresse).

Depuis que le charcuterie unique est utilisé pour délimiter un charret de charcuterie, un single intégré citation dans un littéral est représenté comme 2 citations simples consécutives: xxx

( Note: à Delphi 2010, je semble rappeler que les chaînes peuvent maintenant être délimitées avec Les caractères simples ou doubles citates, bien que je ne me souvienne pas de la main, que cela s'étend à des littéraux en caractères (distincts des chaînes de caractères unique. Si tel est le cas, ce type de littéral pourrait plutôt être exprimé comme "" ", bien que vous trouviez que cela soit moins ou plus déroutant est une question de préférence personnelle. Pour moi, je considère que cela est moins que raisonnable de mélanger des délimiteurs de chaîne. La cohérence est une excellente aide à la précision de mon expérience. )


1 commentaires

Je me sens plutôt embarrassé en ne vérifiant pas ce que # 34 représente comme personnage !! Cordialement, Pieter.



0
votes

C'est une fonction assez simple à écrire. Pour supposer toutes les citations (où plusieurs existent dans une chaîne), utilisez stringreplace comme illustré ci-dessus. Si vous voulez simplement désigner une chaîne, vous pouvez le faire:

function UnQuote(Text: string): string; inline;
begin
  if ( Text.StartsWith('"') or Text.StartsWith('''') ) then
  begin
    if ( Text.EndsWith('"') or Text.EndsWith('''') ) then
      exit( copy(Text, 2, Text.Length-2) );
  end;
  result := Text;
end;


0 commentaires