ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [이누리]아직은 어려운 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해주면 된다.

    댓글 1

© Copyright 2001 ~ 2021 EXEM CO., LTD. All Rights Reserved