-
[이누리]아직은 어려운 TStringList엑셈 사람들 2008. 12. 19. 18:18
회사에 입사한 2개월이 조금 넘는 동안 이런 저런 소스분석 할 때 마다 나오는 것이 있었다.
그것은 바로 TList와 TStringList!!
매우 자주 사용되고 있었다.
하지만 나에게는 너무 어렵고 복잡하기만 했다 그래서 사용하지 않아볼까 생각도 했지만
워낙 많이 사용되어 피해 갈 수 없었다.
이 두가지 중 TStringList에 대해서 적어보려한다.TStringList와 TList의 차이는 스트링 자체를 갖는 것과 포인터를 넘기는 차이가 있다.
TStringList는 델파이 유닛중 Classes라는 유닛에 기본적으로 포함되어 있는 클래스다.
TStringList = class(TStrings)
위와 같이 TStrings를 상속 받고 있다. TStrings와 TStringList는 다르다.
{ 상속관계 }
TList -> TStrings -> TStringList
이 클래스는 문자열을 효율적으로 관리하기 위한 클래스다.
알아두면 여러모로 사용할 곳이 많은 함수이다.TStringList는 다른 클래스와 다름없이 변수를 선언하고 Create를 하고 사용한다.
Create를 한 후에는 Free가 반드시 따른다.Var
MyList: TStringList;
begin
MyList:= TStringList.Create;
…….MyList.Free;
다음은 TStringList를 이용한 예제이다.
우선 TStringList를 생성하고 리스트에 String을 Animals, Flowers, Cars를 추가해 보자.
procedure TForm1.FormCreate(Sender:TObject);
var
MyList: TStringList;
Index: Integer;begin
MyList := TStringList.Create;
try
MyList.Add('Animals');
MyList.Add('Flowers');
MyList.Add('Cars');
ListBox1.items.AddStrings(MyList);
finally
MyList.Free;
end;
end;ListBox에 Animals, Flowers, Car순으로 정렬되어 나올 것이다.
여기에서 정렬을 하고 싶다면 MyList.Sort를 추가해 주면 된다.
TStringList에는 Sort함수가 있다.
이 Sort 함수는 string을 내림차순으로 정렬한다.
오름차순은 기본 Sort함수로는 안될거 같고 CustomSort라는 메소드를 이용 할 수도 있다.
함수를 호출하면 compare함수를 넘겨준다.
TStringListSortCompare는 Classes 유닛에 선언 되어있으므로 TStringListSortCompare 모양의 함수를 하나 선언하고 함수 내부에서 index1과 index2의 string을 가져와서 비교할 때 string을 integer로 변환해서 비교해야 한다.
그리고 결과를 Result로 return해주면 된다.
공유 주셔서 감사합니다