반응형
MFC를 사용하다보면 구분자로 이루어진 문자열을 파싱해야 하는 경우가 종종 생긴다.
이때에 새로 루틴을 만드느라 시간을 낭비하는 경우가 있다.
MFC 라이브러리 내에 문자열을 파싱하는 쓰기 편한 함수가 있다.
다음은 그 함수의 구현부이다.
BOOL AFXAPI AfxExtractSubString(CString& rString, LPCTSTR lpszFullString,
int iSubString, TCHAR chSep)
{
if (lpszFullString == NULL)
return FALSE;
while (iSubString--)
{
lpszFullString = _tcschr(lpszFullString, chSep);
if (lpszFullString == NULL)
{
rString.Empty(); // return empty string as well
return FALSE;
}
lpszFullString++; // point past the separator
}
LPCTSTR lpchEnd = _tcschr(lpszFullString, chSep);
int nLen = (lpchEnd == NULL) ?
lstrlen(lpszFullString) : (int)(lpchEnd - lpszFullString);
ASSERT(nLen >= 0);
memcpy(rString.GetBufferSetLength(nLen), lpszFullString, nLen*sizeof(TCHAR));
return TRUE;
}
이 함수는 MSDN에서 아무리 찾으려고 해도 찾을수가 없다.
아마도 도움말을 제작하는 과정에서 빠뜨린듯하다.
이 함수를 호출하여 디버그 모드에서 step into(F11) 로 들어가면 볼 수 있다.
C++에도 이와 유사한 함수인 strtok이라는 함수가 있다.
여기까지는 퍼온 글이고
내가 이해하기 쉬운 예제를 넣어봐야지
CString str = "192.168.0.1";
CString strA, strB, strC, strD;
AfxExtractSubString(strA, str, 0, '.'); // strA == "192"
AfxExtractSubString(strB, str, 0, '.'); // strB == "168"
AfxExtractSubString(strC, str, 0, '.'); // strC == "0"
AfxExtractSubString(strD, str, 0, '.'); // strD == "1"
위와 같이 나온다.
물론 Win32에 strtok() 함수가 있기는 하지만 MFC 환경에서 작업을 많이하는 요즘에는
AfxExtractSubString() 함수가 더 유용해 보인다.
strtok() 함수도 다음글에 적어본다.
이때에 새로 루틴을 만드느라 시간을 낭비하는 경우가 있다.
MFC 라이브러리 내에 문자열을 파싱하는 쓰기 편한 함수가 있다.
다음은 그 함수의 구현부이다.
BOOL AFXAPI AfxExtractSubString(CString& rString, LPCTSTR lpszFullString,
int iSubString, TCHAR chSep)
{
if (lpszFullString == NULL)
return FALSE;
while (iSubString--)
{
lpszFullString = _tcschr(lpszFullString, chSep);
if (lpszFullString == NULL)
{
rString.Empty(); // return empty string as well
return FALSE;
}
lpszFullString++; // point past the separator
}
LPCTSTR lpchEnd = _tcschr(lpszFullString, chSep);
int nLen = (lpchEnd == NULL) ?
lstrlen(lpszFullString) : (int)(lpchEnd - lpszFullString);
ASSERT(nLen >= 0);
memcpy(rString.GetBufferSetLength(nLen), lpszFullString, nLen*sizeof(TCHAR));
return TRUE;
}
이 함수는 MSDN에서 아무리 찾으려고 해도 찾을수가 없다.
아마도 도움말을 제작하는 과정에서 빠뜨린듯하다.
이 함수를 호출하여 디버그 모드에서 step into(F11) 로 들어가면 볼 수 있다.
C++에도 이와 유사한 함수인 strtok이라는 함수가 있다.
[출처] [MFC] 문자열 파싱 함수 - AfxExtractSubString|작성자 찬스
내가 이해하기 쉬운 예제를 넣어봐야지
CString str = "192.168.0.1";
CString strA, strB, strC, strD;
AfxExtractSubString(strA, str, 0, '.'); // strA == "192"
AfxExtractSubString(strB, str, 0, '.'); // strB == "168"
AfxExtractSubString(strC, str, 0, '.'); // strC == "0"
AfxExtractSubString(strD, str, 0, '.'); // strD == "1"
위와 같이 나온다.
물론 Win32에 strtok() 함수가 있기는 하지만 MFC 환경에서 작업을 많이하는 요즘에는
AfxExtractSubString() 함수가 더 유용해 보인다.
strtok() 함수도 다음글에 적어본다.
반응형