읽어 주셔서 감사합니다.
조금 길더라도 끝까지 읽으시고 도와주시기 바랍니다.
******************************************************************
질문요지:
TRichEdit의 각 줄을 오름차순이나 내림차순으로 정렬할 때 각 줄의 번지 얻기.
******************************************************************
TListView, TTreeView의 경우 오름차순 정렬을 지원하지만
TRichEdit , TStringList는 이것을 지원하지 않습니다.
1. TRichEdit의 각 줄의 내용은 AnsiString으로서 Lines->Strings[index]로
참조합니다.
2. 잠시 TRichEdit가 아닌 일반 텍스트 정렬을 살펴보면:
가. 택스트 배열을 정렬할 때 둘을 서로 바꾸게 되는 데 보통은
(char array[줄수][최대길이+1], ex[최대길이+1];)
strcpy(ex,array[n]);
strcpy(array[n],array[m]);
strcpy(array[m],ex);
이렇게 합니다.
그런데 이렇게 하다보면 시간이 많이 걸립니다.
나. 그래서 빠르게 하려면 포인터를 사용하여
( char *pointer[줄수], *ex; )
ex=pointer[n];
pointer[n] = pointer[m];
pointer[m] = ex;
이렇게 합니다.
물론 이때는 택스트를 저장할 기억공간을 동적으로 할당합니다.
(
문자열을 파일에서 읽어 pointer배열에 저장한다고 했을 때
( char buffer[MaxLen+1]; FILE *fp; )
fgets(buffer,MaxLen,fp);
pointer[n] = new char[strlen(buffer)+1];
strcpy(pointer[n], buffer);
이렇게 합니다.
)
3. 확실히 포인터를 이용하는 것이 빠릅니다.
그래서 TRichEdit의 각 줄을 정렬할 때 포인터를 사용하려 합니다.
TRichEdit의 각 줄은 AnsiString클래스의 객체이며
RichEdit1->Lines->Strings[index]와 같이 참조합니다.
4. TRichEdit의 각 줄이 AnsiString이므로
함수호출: SortInitiate(RichEdit1->Lines);
void SortInitiate(TStrings *List)
{
AnsiString **MyList;
int n;
MyList = new AnsiString * [줄수];
for(n=0; n<List->Count ; n++)
{
MyList[n]= & List->Strings[n];
}
Sort(MyList, List->Count);
.
.
.
delete MyList;
}
void Sort(AnsiString **List, int count)
{
AnsiString *ex;
.
.
.
if( *List[n] > *List[m] )
{
ex = List[n];
List[n] = List[m];
List[m] = ex;
}
.
.
.
}
5. 그런데 위와 같이 하면 처리가 안됩니다.
SortInitiate함수의
for(n=0; n<줄수 ; n++)
{
MyList[n]= & List->Strings[n];
}
에서 MyList[n]= & List->Strings[n]은
RichEdit1의 각 줄의 번지를 AnsiString형 포인터배열인 MyList에
할당하는 것인데 의도대로 되지 않습니다.
6. 문제는 Richedit1->Lines->Strings[index]가 AnsiString클래스
객체이며 이 것의 번지를 얻는 방법이
&(Richedit1->Lines->Strings[index])가 아닌 모양입니다.
*********************************************************
어떻게 하여야 할까요?
반드시 TRichEdit를 사용하여야 합니다.
그리고 소요시간도 가장 짧아야 합니다.
(힙소트가 빠른 것으로 아는데 그 알고리즘은 이미 완성하였습니다.)
문제는 6번입니다.
어떻게 해야 할까요??????????
많은 분들의 조언을 부탁 드립니다.
감사합니다.
**********************************************************
|