ミ,,゚Д゚彡フサギコのフサフサ.NET談話室
■ このスレッドは過去ログ倉庫に格納されています
0033Delフサギコ ◆VzDeLphI
NGNG考え方があわねーヤツにあわすのは無駄だね。
∧,,∧ しぶとくいくけどこっちのように範囲文字列の切り取りクチの
ミ,,゚Д゚ミ 後ろ部分もちゃんと判断した方がいいな。多分。
function AnsiStringPartsCompare_Base(const S1, S2: String;
S1Index, S2Index, CompareLength: Integer; IgnoreFlag: Boolean): Boolean;
var CompareFlag: longword;
begin
if IgnoreFlag then
begin CompareFlag := NORM_IGNORECASE; end else
begin CompareFlag := 0; end;
if CompareStringA(LOCALE_USER_DEFAULT, CompareFlag,
PChar(S1) + S1Index - 1, CompareLength,
PChar(S2) + S2Index - 1, CompareLength) = 2 then
begin
if ByteType(S1,S1Index)=ByteType(S2,S2Index) then
begin
if (ByteType(S2, S2Index+CompareLength-1)<>mbLeadByte) then
begin Result := True; end else
begin
if (S1[S1Index+CompareLength] = S2[S2Index+CompareLength]) then
begin Result := True; end else
begin Result := False; end;
end;
end else
begin Result := False; end;
end else begin Result := False; end;
end;
マルチバイト文字もみこして、Insert/Copy/Delete/Lengthなど
文字列クラス(あえてクラス扱い)のメソッドは
バイト単位などで行わず、文字単位で考えるべきだというのがわかった。
■ このスレッドは過去ログ倉庫に格納されています