티스토리 뷰

프로그래밍/MFC

MFC Split

에어버스 2015. 7. 29. 18:42


afxwin.h에 정의되어 있습니다.


BOOL AFXAPI AfxExtractSubString(CString& rString, LPCTSTR lpszFullString,
int iSubString, TCHAR chSep = '\n');

"abc,123,defdff,hello,456" 이런 스트링이 있을때,
구분자로 구분된 몇번째 스트링을 골라내는데 유용합니다.
함수 하나,한줄만 쓰면 모든것이 이루어집니다.
"파일명.확장자"로 구성된 스트링에서 파일명과 확장자를 처리할때도 유용하게사용됩니다.

아래는 예제입니다.

CString sTemp;
CString Str;
Str="abc,123,def,432,lim,34,23,hello";
AfxExtractSubString(sTemp,(LPCTSTR)Str, 0, ','); //Str="abc"
AfxExtractSubString(sTemp,(LPCTSTR)Str, 4, ','); //Str="lim"

Str="Sample.rtf";
AfxExtractSubString(sTemp,(LPCTSTR)Str, 0, '.'); //Str="Sample"
AfxExtractSubString(sTemp,(LPCTSTR)Str, 1, '.'); //Str="rtf"


=====
 

 

01.int iSub = 0;  
02.CString strTok, strFull;  
03.strFull = _T("aa;bb;cc;dd");  
04.      
05.while(AfxExtractSubString(strTok, strFull, iSub++, ';'))  
06.{  
07.    MessageBox(strTok);   

=====

프로그램을 짜다가 split 라는 것을 사용할 일이 있었다.


Java 에서는 


String[] dst = src.split(",");


이런 식으로 만들어져 있다


mfc 는 없다 젠장;;


구글링을 졸라 하는 순간 동일한 기능을 찾았지만...


문제점은 한글자 밖에 인식을 안한다는거;;;;


그래서 내가 만들기로;;;


 

 

int splitString(CString str, CString var, CStringArray &strs)

{

int count = 0;


CString tempStr = str;


int length = str.GetLength();


while(length)

{

int find = tempStr.Find(var);

if(find != -1)

{

CString temp  = tempStr.Left(find);

//삭제 내역

//strs.Add(temp);

//temp += var;

//tempStr.Replace(temp, _T(""));


// 수정 내역

int varLen = _tcslen(var);

tempStr = tempStr.Mid(find + varLen);

count++;

}

else

{

strs.Add(tempStr);

length = 0;

}

}

return count;

}


------------------------------------

실행 소스


CString temp = _T("park,,se,,chul");

 


CStringArray str;


int count = splitString(temp, _T(",,"), str);


if(count)

{

for(int i = 0 ; i <  count  ; i++)

{

::AfxMessageBox(str.GetAt(i));

}

}

-------------------------------

 


 

 


소스가 난잡하게 되어 있지만, 일단 동작하는 것에;;;;


소스 정리는 나중에 하는 걸로;;


※ 참고로 개발 환경은 Visual Studio 2008 버전에서 만든거임

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31