DelimitedText空格BUG的解决

DelimitedText 空格也默认为分割符的原因很简单:
Borland的程序员把这个属性对应的write方法中的一行代码多加了一个空格。

2种方法解决这个问题。

空格问题的解决方法之一:
先StringReplace用一个特殊字符替代空格,然后StringReplace回来
ss:=’aa|bb c| c’;
ss:= StringReplace(ss,’ ‘,’#’,[rfReplaceAll]);
s:= TStringList.Create;
s.Delimiter:= ‘|’;
s.DelimitedText:= ss;
for i:= 0 to s.Count – 1 do
begin
s[i]:= StringReplace(s[i],’#’,’ ‘,[rfReplaceAll]);
memo1.Lines.Add(s[i]);
end;

空格问题的解决方法之二:

找到 {DelphiInstDir}\source\Win32\rtl\common\Classes.pas 文件,知道SetDelimitedText函数。如下所示:

注:{DelphiInstDir}为Delphi安装目录

procedure TStrings.SetDelimitedText(const Value: string);
var
P, P1: PChar;
S: string;
begin
BeginUpdate;
try
Clear;
P := PChar(Value);
while P^ in [#1..’ ‘] do
{$IFDEF MSWINDOWS}
P := CharNext(P);
{$ELSE}
Inc(P);
{$ENDIF}
while P^ <> #0 do
begin
if P^ = QuoteChar then
S := AnsiExtractQuotedStr(P, QuoteChar)
else
begin
P1 := P;
// while (P^ > ‘ ‘) and (P^ <> Delimiter) do //源代码
while (P^ > ”) and (P^ <> Delimiter) do //修改后的代码

在Delphi2010中是将
//while ((not FStrictDelimiter and (P^ > ‘ ‘)) or //这个
while ((not FStrictDelimiter and (P^ > ”)) or //改成

为方便携带,可将Classes.pas 文件重新编译到你的工程文件中即可。步骤:工程-添加到工程-Classes.pas



发表评论

电子邮件地址不会被公开。 必填项已用*标注

62 + = 64