我有一个TStringList加载了几千个Name-Value Pairs。
其中之一是
004001000002000=Timbre2 Volume 0~127 4995
我通过使用字符串'004001000002000'调用IndexOfName来查找特定索引。我希望ValueFromIndex返回字符串'Timbre2 Volume 0~127 4995'
相反,当我使用ValueFromIndex访问此值时,它返回字符串:
~127 4995
是什么原因引起的? Tilde是一个特殊字符导致字符串被截断吗?我可以将其设置为其他内容吗?
答案 0 :(得分:3)
我无法在TButton.OnClick
事件中使用以下代码重现问题(Delphi 2007和Delphi 7 - Delphi 2007测试中的屏幕截图):
procedure TForm2.Button2Click(Sender: TObject);
var
SL: TStringList;
i: Integer;
begin
SL := TStringList.Create;
try
SL.Add('004001000002000=Timbre2 Volume 0~127 4995');
SL.Add('ABCDEF=Testing 1 2 3');
i := SL.IndexOfName('004001000002000');
if i > -1 then
ShowMessage(SL.ValueFromIndex[i])
else
ShowMessage('IndexOfName returned -1');
finally
SL.Free;
end;
end;
这正确显示了预期的对话框:
我还使用更简单的方法进行了测试:
ShowMessage(SL.Values['004001000002000']);
这显示了相同的ShowMessage
对话框。
答案 1 :(得分:3)
Tilde不是TStringList
的特殊字符,除非您明确将其定义为一个。
TStringList.IndexOfName()
和TStringList.Name[Index]
仅查看第一个NameValueSeparator
字符前面的内容,TStringList.ValueFromIndex[Index]
返回第一个NameValueSeparator
字符后的所有内容,该值不会以任何方式截断。默认情况下,TStringList.NameValueSeparator
设置为'='
。因此,如果您发现截断,则要么在自己的代码中截断,要么TStringList
包含实际显示为'004001000002000=~127 4995'
的行。