0

そこにワイドストリング操作の実装はありますか?

function WideUpperCase(const S: WideString): WideString;

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

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

etc
4

3 に答える 3

4

JEDIプロジェクトには、WideUpperCaseとWidePosを含むJclUnicode.pasが含まれていますが、StringReplaceは含まれていません。SysUtils.pas StringReplaceコードはそれほど複雑ではないため、簡単にコピーして文字列をWideStringに、AnsiPosをWidePosに、AnsiUpperCaseをWideUpperCaseに置き換えて、遅い場合は機能的にすることができます。

于 2010-04-05T21:43:15.030 に答える
2

TntControlsには、一連のワイドバージョン関数があります。

于 2010-04-06T03:26:34.963 に答える
2

私は通常、「Microsoft VBScript正規表現5.5」タイプのライブラリをインポートし、IRegExpオブジェクトを使用します。

OP編集

私はこの答えが好きです、そして私は先に進んでStringReplaceW正規表現を使って関数を書きました:

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;
于 2010-04-06T06:07:33.227 に答える