Comment dépouiller des citations d'une chaîne à l'aide de Delphi? p>
ex. Je dois supprimer toutes les citations de 'A', 'B', 'C', "D", donnant le résultat d'un, B, C, D. J'ai essayé p>
mais pas de chance jusqu'à présent. p>
Merci, Pieter P> myvar: = jclstrings.stremovecharn (Srégions, [# 34]); code> p>
5 Réponses :
Vous pouvez utiliser myvar: = stringreplace (myvar, '' '' '', '', [rfreplaceall]); code> p> p>
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;
Vous pouvez utiliser strutils.Replacetextextextextex.
implémentation p>
utilise des strutils; p>
{$ r * .dfm} p> s maintenant est égal à 'A, B, C, D'. P> RemplaText appellera ansireplacetext qui appelle à son tour sysutils.stringreplace avec les drapeaux de remplacement [rfreplaceall, rfignorecase] défini pour vous. P > p>
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: Le code de caractère # 34 représente le < Strong> Double citation forte> Char: " P> Ce que vous devez supprimer est Ceci a le code de caractères # 39, ce changement simple devrait donc corriger votre code d'origine: p> 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). P> 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: p> ( Note: strong> à 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. Em>) p> p>
Je me sens plutôt embarrassé en ne vérifiant pas ce que # 34 représente comme personnage !! Cordialement, Pieter.
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;
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 .