1

数千の名前と値のペアが読み込まれた TStringList があります。それらの1つは 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 の結果

また、より簡単な方法を使用してテストしました。

    ShowMessage(SL.Values['004001000002000']);

これにより、同じShowMessageダイアログが表示されました。

于 2012-07-12T01:23:34.310 に答える
3

チルダは、TStringList明示的に定義しない限り、特殊文字ではありません。

TStringList.IndexOfName()最初の文字TStringList.Name[Index]の前にあるものだけを見て、最初の文字の後にあるものをすべて返します。値は切り捨てられません。 デフォルトでは に設定されています。したがって、切り捨てが発生している場合は、独自のコードで切り捨てているか、実際に.NameValueSeparatorTStringList.ValueFromIndex[Index]NameValueSeparatorTStringList.NameValueSeparator'='TStringList'004001000002000=~127 4995'

于 2012-07-12T01:24:07.793 に答える