Question

Y a-t-il des implémentations de manipulation de grande chaîne là-bas?

function WideUpperCase(const S: WideString): WideString;

function WidePos(Substr: WideString; S: WideString): Integer;

function StringReplaceW(const S, OldPattern, NewPattern: WideString; 
      Flags: TReplaceFlags): WideString;

etc
Était-ce utile?

La solution

J'importer généralement la bibliothèque de type "Microsoft VBScript Regular Expression 5.5" et utiliser des objets IRegExp.

OP Edition

i aime cette réponse, et je suis allé de l'avant et écrit une fonction StringReplaceW utilisant l'expression rationnelle:

function StringReplaceW(const S, OldPattern, NewPattern: WideString; Flags: TReplaceFlags): WideString;
var
    objRegExp: OleVariant;
    Pattern: WideString;
    i: Integer;
begin
    {
        Convert the OldPattern string into a series of unicode points to match
        \uxxxx\uxxxx\uxxxx

            \uxxxx  Matches the ASCII character expressed by the UNICODE xxxx.
                        "\u00A3" matches "£".
    }
    Pattern := '';
    for i := 1 to Length(OldPattern) do
        Pattern := Pattern+'\u'+IntToHex(Ord(OldPattern[i]), 4);

    objRegExp := CreateOleObject('VBScript.RegExp');
    try
        objRegExp.Pattern := Pattern;
        objRegExp.IgnoreCase := (rfIgnoreCase in Flags);
        objRegExp.Global := (rfReplaceAll in Flags);

        Result := objRegExp.Replace(S, NewPattern);
    finally
        objRegExp := Null;
    end;
end;

Autres conseils

Le projet JEDI comprend JclUnicode.pas, qui a WideUpperCase et WidePos, mais pas StringReplace. Le code SysUtils.pas StringReplace est pas très compliqué, donc vous pouvez facilement copier simplement que et remplacer la chaîne avec WideString, AnsiPos avec WidePos et AnsiUpperCase avec WideUpperCase et obtenir quelque chose de fonctionnel, si lent.

Les TntControls a un ensemble de fonctions large version.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top