将 SysUtils.WrapText() 与包含单引号的字符串一起使用
Using SysUtils.WrapText() with strings containing single quotes
我正在尝试将 SysUtils.WrapText()
函数与包含转义单引号字符的字符串一起使用,但我得到了意外结果。
var
Lines : TStrings;
begin
Lines := TStringList.Create;
try
Lines.Text := WrapText('Can''t format message, message file not found', 15);
ShowMessage(Lines.Text);
finally
Lines.Free;
end;
end;
如果字符串包含撇号字符,该函数似乎根本不会换行。
我也试过使用 #39
代码而不是单引号字符,但问题仍然存在。此外,我检查了 Lines.Count
,它是 1
。
我试过删除单引号字符:
var
Lines : TStrings;
begin
Lines := TStringList.Create;
try
Lines.Text := WrapText('Cant format message, message file not found', 15);
ShowMessage(Lines.Text);
finally
Lines.Free;
end;
end;
它开始按预期包装字符串:
我想知道为什么会这样,我应该如何对此类字符串使用 WrapText()
函数?
在 10.3.1 中,源代码包含处理引号字符(双引号和单引号)的代码,看起来只是忽略它们之间的文本。因此,一种解决方案是使用不同于单引号字符的撇号。第二个是避免使用收缩。函数源的开始:
function WrapText(const Line, BreakStr: string; const BreakChars: TSysCharSet;
MaxCol: Integer): string;
const
QuoteChars = ['''', '"'];
FirstIndex = Low(string);
StrAdjust = 1 - Low(string);
var
...
一个选项:
Lines.Text := WrapText('Can`t format message, message file not found', 15);
第二个选项:
Lines.Text := WrapText('Cannot format message, message file not found', 15);
您描述的是故意行为。
在 Delphi XE 和更早版本中,WrapText() documentation 包含以下语句:
WrapText does not insert a break into an embedded quoted string (both single quotation marks and double quotation marks are supported).
在 Delphi XE2 之后的版本中,文档中省略了该语句,但该行为仍在 RTL 中实现。
我已就此遗漏向 Embarcadero 开具工单:
RSP-24114: Important clause about embedded quoted strings is missing from WrapText documentation
我正在尝试将 SysUtils.WrapText()
函数与包含转义单引号字符的字符串一起使用,但我得到了意外结果。
var
Lines : TStrings;
begin
Lines := TStringList.Create;
try
Lines.Text := WrapText('Can''t format message, message file not found', 15);
ShowMessage(Lines.Text);
finally
Lines.Free;
end;
end;
如果字符串包含撇号字符,该函数似乎根本不会换行。
我也试过使用 #39
代码而不是单引号字符,但问题仍然存在。此外,我检查了 Lines.Count
,它是 1
。
我试过删除单引号字符:
var
Lines : TStrings;
begin
Lines := TStringList.Create;
try
Lines.Text := WrapText('Cant format message, message file not found', 15);
ShowMessage(Lines.Text);
finally
Lines.Free;
end;
end;
它开始按预期包装字符串:
我想知道为什么会这样,我应该如何对此类字符串使用 WrapText()
函数?
在 10.3.1 中,源代码包含处理引号字符(双引号和单引号)的代码,看起来只是忽略它们之间的文本。因此,一种解决方案是使用不同于单引号字符的撇号。第二个是避免使用收缩。函数源的开始:
function WrapText(const Line, BreakStr: string; const BreakChars: TSysCharSet;
MaxCol: Integer): string;
const
QuoteChars = ['''', '"'];
FirstIndex = Low(string);
StrAdjust = 1 - Low(string);
var
...
一个选项:
Lines.Text := WrapText('Can`t format message, message file not found', 15);
第二个选项:
Lines.Text := WrapText('Cannot format message, message file not found', 15);
您描述的是故意行为。
在 Delphi XE 和更早版本中,WrapText() documentation 包含以下语句:
WrapText does not insert a break into an embedded quoted string (both single quotation marks and double quotation marks are supported).
在 Delphi XE2 之后的版本中,文档中省略了该语句,但该行为仍在 RTL 中实现。
我已就此遗漏向 Embarcadero 开具工单:
RSP-24114: Important clause about embedded quoted strings is missing from WrapText documentation