OS:ハンガリー語のWindows(Windows 1250)
Delphi6Profの下にはありませんWideStringPos, WideStringCopy, WideStringReplace
...
しかし、XMLベースのプロジェクトでは、それらを使用する必要があります。
そのため、これらの関数の「ようなもの」を書き込もうとしました。
しかし、私は彼らが私が望むように働いているかどうかはわかりません...
DelphiはWideをAnsiに変換し、バックグラウンドで逆にするため、コードがこれらの副作用から安全であるかどうかはわかりません... :-)
コードは非常に原始的です-私はすぐに解決策が必要です...
function WideStringCopy(WWhat : WideString; From, HowMany : integer) : WideString;
var
i : integer;
l : integer;
wc : WideChar;
begin
Result := '';
if WWhat = ''
then Exit;
if (HowMany <= 0)
then Exit;
if (From < 1)
then From := 1;
l := From + HowMany - 1;
if l > Length(WWhat)
then l := Length(WWhat);
for i := From to l do begin
wc := WWhat[i];
Result := Result + wc;
end;
end;
function WideStringPos(WWhere, WWhat : WideString) : integer;
var
wscomp : WideString;
i : integer;
begin
Result := 0;
for i := 1 to Length(WWhere) do begin
wscomp := WideStringCopy(WWhere, i, LengtH(WWhat));
if WideSameStr(wscomp, WWhat)
then begin
Result := i;
Exit;
end;
end;
end;
function WideStringReplace(WWhere, WFrom, WTo : WideString) : WideString;
var
actpos : integer;
wcomp : WideString;
wc : WideChar;
begin
Result := '';
actpos := 1;
while actpos <= Length(WWhere) do begin
wcomp := WideStringCopy(WWhere, actpos, Length(WFrom));
if WideSameStr(wcomp, WFrom) then begin
Result := Result + WTo;
inc(actpos, Length(WFrom));
end else begin
wc := WWhere[actpos];
Result := Result + wc;
inc(actpos);
end;
end;
end;
私はそれについて2つの質問があります:
確かに悪い結果をもたらす(WideをAnsiにサイレントに変換し、文字を失う原因となる)コードがありますか?
このコードをテストできるキャラクターを知っていますか?
たとえば、chr(XXX)コンバーターがワイドルールを保持しているときに残っているものですが、間違ったコードを作成すると失われます...
あなたが書くすべての情報をありがとう...