2012-07-12 50 views
0

我有一個加載了幾千個名稱 - 值對的TStringList。 其中之一是 004001000002000=Timbre2 Volume 0~127 4995TStringList名稱 - 值對的特殊字符限制?

我通過調用IndexOfName字符串'004001000002000'找到一個特定的索引。我希望ValueFromIndex返回字符串「Timbre2音​​量0〜127 4995」

相反,當我訪問使用ValueFromIndex此值,則返回字符串:

~127 4995 

是什麼原因造成的? Tilde是導致字符串被截斷的特殊字符嗎?我可以將它設置爲其他東西嗎?

+1

-1。問題不會顯示報告的問題。 – 2012-07-12 02:53:54

+4

+1來抵消無端的downvote。問題顯然出現在海報的機器上,或者問題不會被問到。問題最終以另一種方式解決的事實並不否定問題存在的事實,這裏的答案有助於解決問題。 – 2012-07-12 02:57:01

回答

3

使用下面的代碼在TButton.OnClick事件(2007年德爾福和Delphi 7 - 屏幕捕獲德爾福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 result

我也使用更簡單的方法進行測試

這顯示了相同的ShowMessage對話框。

+0

Ack - 我的不好。稍後我有一些代碼是關閉返回字符串的第一部分,因爲我首先嚐試通過匹配初始數字部分來完成這個沒有值/對的操作。它沒有工作,所以我轉移到價值/對格式,但忘記在以後刪除子字符串操作。謝謝你們兩位的幫助。 – tim11g 2012-07-12 01:28:20

1

Tilde不是TStringList的特殊字符,除非您明確將其定義爲一個。

TStringList.IndexOfName()TStringList.Name[Index]只看什麼是第一NameValueSeparator字符的前面,並TStringList.ValueFromIndex[Index]返回一切,這是第一個NameValueSeparator字符後,該值將不以任何方式被截斷。默認情況下,TStringList.NameValueSeparator設置爲'='。所以,如果你看到截斷髮生,那麼你要麼在你自己的代碼中截斷它,要麼TStringList包含一條實際上表示'004001000002000=~127 4995'的行。