태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

[원종철]TStringList를 사용할 때 당신이 알아야할 두가지

엑셈 사람들 2008. 10. 24. 17:53


회사를 출근 할 때, 차를 마시러 갈 때, 퇴근 할 때 가끔 책꽂이를 보는데, 나의 눈에 들어오는 책이 한 권 있었다.

   Think Innovation

처음 보는 제목이라 그런지 가끔식 나의 시선을 잡았지만 매번 좀 한가해 지면 읽어야지 하면서 지나쳤었다.
어느 날 문득 회사를 퇴근하면서 나도 모르게 손이 책으로 향하였고, 그렇게 Think Innovation 책을 읽기 시작을 하였다.

책을 얼마 읽지 않아서, 눈에 들어오는 글귀가 하나 있었다.

   “천사처럼 대담하게 악마처럼 섬세하게”

이상주의적 현실주의를 나타내는 말이다.
이상의 추구에 있어서는 천사의 마음을 가진 채 대담하게 발상하고, 실현에 있어서는 악마의 지략도 구사하면서 세심하게 대처해간다라는 뜻을 담고 있다. 이 글이 나의 뇌리를 스쳤고, 진정한 이노베이터를 생각하게 해주었다. 그리고 이노베이터션의 본질을 추구하면서 개발을 하면 좀 더 멋진 프로그램이 나오지 않을까…?하는 생각이 들었다.

책에 대한 얘기는 나중에 더 하기로 하고…

그럼 이제 본론으로 들어가서 TStringList 사용에 관해 두 가지를 정도 이야기 하려고 한다.

첫 번째는 StrictDelimiter 사용이다.

Delimiter 를 사용하여 Split 을 하면 다 좋은데 공백문자 등도 delimiter로 인식해 버려 원하지 않는 결과가 나 올 때가 있다. 그래서ExtractStrings를 사용하는 편이었다. 그러나 역시 원하는 결과로 유도하는 파라메터가 있었다.
StrictDelimiter 를 사용하는 것인데 기본적으로 False 상태라 공백문자도 delimiter 로 인식하고, StrictDelimiter를 True 로 하면 지정한 delimiter 만 인식한다.

아래는 그 비교구문이다.
 

procedure TForm1.Button1Click(Sender: TObject);
const 문자열='A, B, C'+#13+'D, E, F';
var
i: Integer;
sList: TStringList;  
begin
sList:=TStringList.Create; 
try 
// StrictDelimiter=False: 공백 등도 delimiter 로 인식 
sList.Delimiter:=','; 
sList.DelimitedText:=문자열; 
Memo1.Lines.Add('Count (strict=False): '+IntToStr(sList.Count)); 
for i:=0 to sList.Count-1 do Memo1.Lines.Add(sList[i]); 
// StrictDelimiter=True: 지정한 문자만 delimiter 로 인식 
sList.Clear; 
sList.Delimiter:=','; 
sList.StrictDelimiter:=True; 
sList.DelimitedText:=문자열; 
Memo1.Lines.Add('Count (strict=True): '+IntToStr(sList.Count)); 
for i:=0 to sList.Count-1 do Memo1.Lines.Add(sList[i]); 
finally 
if Assigned(sList) then FreeAndNil(sList); 
end; 
end;

두 번째는 Name=Value 형태의 사용이다.

ini 파일 같은데 보면 이런 형태가 사용된다.
[공격옵션]
chkAttack=1

델파이에서도 ini 파일을 다루거나 설정파일 등을 사용할 때 직관적으로(=코드 자체가 주석이 되는) 사용할 수 있을 것 같다.
 

procedure TForm1.Button2Click(Sender: TObject);
var
sList: TStringList;
begin
sList:=TStringList.Create; 
try
sList.Values['이름']:='aaa'; 
sList.Values['직업']:='프로 '; 
Memo1.Lines.Add('이름: '+sList.Values['이름']); 
Memo1.Lines.Add('직업: '+sList.Values['직업']); 
finally 
if Assigned(sList) then FreeAndNil(sList); 
end; 
end;


위 두가지는 TStringList를 사용하면서 알아두면 좋을 것이다.