1

我有一个加载了几千个名称-值对的 TStringList。其中之一是 004001000002000=Timbre2 Volume 0~127 4995

我通过使用字符串'004001000002000'调用IndexOfName来找到一个特定的索引。我希望 ValueFromIndex 返回字符串 'Timbre2 Volume 0~127 4995'

相反,当我使用 ValueFromIndex 访问该值时,它会返回字符串:

~127 4995

这是什么原因造成的?波浪号是导致字符串被截断的特殊字符吗?我可以将其设置为其他内容吗?

4

2 回答 2

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对话框。

于 2012-07-12T01:23:34.310 回答
3

波浪号不是 的特殊字符TStringList,除非您明确将其定义为一个。

TStringList.IndexOfName()并且TStringList.Name[Index]只查看第一个NameValueSeparator字符前面的内容,并TStringList.ValueFromIndex[Index]返回第一个NameValueSeparator字符之后的所有内容,该值不会以任何方式截断。 TStringList.NameValueSeparator默认设置为'='。因此,如果您看到发生截断,那么您要么在自己的代码中截断它,要么TStringList包含一行实际上说'004001000002000=~127 4995'.

于 2012-07-12T01:24:07.793 回答