|
TList의 sort를 사용하냐 안하냐 하는것은 전혀 상관이 없습니다.
TList에서 sort 하는 것은 사용자가 정의한 (어떤 것을 앞쪽에 어떤것을 뒤쪽에 위치시킬지 비교하는) 함수를
사용하기 때문이죠..
CompareProc 안의 내용을 어떻게 채우느냐에 따라 TList의 sort는 사용자 마음데로 할 수 있습니다.
아래 소스에 보면 strcmp 함수를 사용하셨는데, lstrcmp 함수를 사용해보세요.
스트링 비교함수들도 여러가지가 있는데..각각 어떤 기준으로 비교를 할지 다릅니다.
lstrcmp 함수의 경우에는 윈도우 언어 설정에 맞추어서 정렬을 하게 되어 있습니다.
CompareString 함수 같은 것을 쓰면, 특정 locale에 맞추어서 정렬을 할 수도 있습니다.
장동훈 님이 쓰신 글 :
: //아이템 정보
: class TFileInfo : public TObject
: {
: public:
: __fastcall TFileInfo();
:
: AnsiString strFileName;
: AnsiString strFileExtName;
: };
:
: __fastcall TFileInfo::TFileInfo()
: {
: strFileName = "";
: strFileExtName = "";
: }
:
: //정렬 함수
: int __fastcall CompareProc(void * Item1, void * Item2)
: {
: return strcmp((char *)((TFileInfo *)Item1)->strFileName.c_str(),
: (char *)((TFileInfo *)Item2)->strFileName.c_str());
: }
:
: //파일정보 입력
: TList *pList = new TList;
:
: FindFirst(gPath+"*.*", faAnyFile, SearchRec);
: do
: {
: TFileInfo *tInfo = new TFileInfo;
: tInfo->strFileName = SearchRec.Name;
: pList->Add(tInfo);
: }while((FindNext(SearchRec) == 0));
: FindClose(SearchRec);
:
: pList->Sort(CompareProc);
: --------------------------------------
: 위와 같이 폴더당 파일 이름을 얻어와 TList를 이용하여 리스트를 구현 하였습니다. 정렬 방법을 고민하다, TList의 sort기능 있다는걸 보고 게시판을 검색하여 sort방법을 구현 하였습니다
: 근대 정렬 결과가 탐색기랑 비교햇을때 다르게 나오더군여
:
: #탐색기 d:드라이브로 볼시
: __Ex__
: 유틸들
: windows
:
: #pList 소트시 보기
: windows
: __Ex__
: 유틸들
:
: 위와 같은식으로 영문이 먼저 정렬되고 그리고 특수 문자가 정렬되고 한글폴더명이 정리되는것 같은데요..
: 어떻게 하면 탐색기와 같이 특수 문자 정렬휴 한글 정렬후 영문으로 정렬되나요??
: TList의 sort를 이용하지 않고 따로 정렬 루틴을 구현해주어야하는건가요??
: 궁금합니다..
|