2012-07-12 3 views
0

몇 천 개의 이름 - 값 쌍이로드 된 TStringList가 있습니다. 그 중 하나는 004001000002000=Timbre2 Volume 0~127 4995TStringList 이름 - 값 쌍에 대한 특수 문자 제한 사항은 무엇입니까?

내가 문자열 '004001000002000'로 IndexOfName를 호출하여 특정 인덱스를 찾을 수 있습니다.

~127 4995 

이 무엇 원인 : 나는 그것을 문자열을 반환, 나는 ValueFromIndex를 사용하여이 값을 액세스 할 때 ValueFromIndex는, 대신에 문자열 'TIMBRE2 볼륨 0 ~ 127 4995'

를 반환 할 것으로 예상? Tilde는 문자열을 잘리는 특수 문자입니까? 다른 것으로 설정할 수 있습니까?

+1

-1. 문제가보고 된 문제를 나타내지 않습니다. –

+4

+1 부당한 downvote를 상쇄하십시오. 문제는 분명히 포스터의 기계에 전시되었거나 질문에 질문하지 않았을 것입니다. 문제가 다른 방식으로 해결되었다는 사실은 문제가 존재한다는 사실을 부정하지 않으며, 여기에있는 답은 문제를 해결하는 데 도움이됩니다. –

답변

3

나는 TButton.OnClick 이벤트에 다음 코드를 사용하여 문제를 재현 할 수 없습니다 (델파이 2007 및 델파이 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

1

틸드는 사용자가 명시 적으로 정의하지 않는 한 TStringList의 특수 문자가 아닙니다.

TStringList.IndexOfName()TStringList.Name[Index]는 첫 번째 NameValueSeparator 문자 앞에 무엇을보고하고, TStringList.ValueFromIndex[Index] 첫 번째 NameValueSeparator 문자 다음에, 값이 어떤 방식으로 절단되지 않은 모든 것을 반환합니다. TStringList.NameValueSeparator은 기본적으로 '='으로 설정됩니다. 따라서 자르기가 발생하면 자신의 코드에서 자르거나 TStringList에 실제로 '004001000002000=~127 4995'이라고 표시된 행이 포함됩니다.

관련 문제