OS:匈牙利的Windows(視窗1250)如何測試我的WideReplace功能?
在德爾福6教授沒有WideStringPos, WideStringCopy, WideStringReplace
...
但是在一個基於XML的項目,我需要使用它們。
因爲我試圖寫「類似」這些功能。
但我不知道他們的工作,因爲我想...
因爲德爾福轉換寬爲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;
我對此兩個問題:
您是否看到任何肯定會造成不良結果的代碼(將Wide轉換爲Ansi並導致字符丟失)?
你知道一些我可以測試這個代碼的人嗎?
例如,CHR(XXX),當我轉換器保持寬規則,但失去,如果我做了錯誤的代碼是什麼剩餘...
感謝每一個信息,你會寫...
嘗試查找TNT控件。他們已經完成了所有這些工作。從'TntWideStrUtils.pas'找到'WStrPos','WStrCopy'函數和從'TntSysUtils.pas'找到'WideStringReplace'。 – TLama
我沒有看到'WideStringCopy';內置的'Copy'命令已經做了同樣的事情(但是*沒有*做所有中間字符串的不必要的副本)。 –
Jedi CodeLibrary現在是D6兼容的,擁有很多WideString函數,並且還有一個XMl解析器。坦率地說,爲什麼重新發明自行車,而不是採取已經測試的代碼? –