CString 변수에서 문자열의 형식 검사는 어떻게 하나요?

나는오리의 이미지

CString(String)형의 변수 str을 선언했습니다.
이 str에 데이터가 매초 들어온다고 가정했을 때
내가 원하는 형식의 데이터인지 검사를 하려 합니다.
어떻게 해야 하나요?
참고로 구분자가있는 데이터입니다.
"ABC|DEF|123|456|@#$|%^$##@|abcdefg|"

아울러 CString(String)를 char[]로 바로 변환 가능한가요?
글쓰고보니 더 생각나네요. CString -> int, float, double 로의 변환도 가능할까요?

나는오리의 이미지

loop
{
      변수 = 구분자위치의 문자;
      비교 ( !(변수 == 구분자) ) return FALSE;
}
쩝...뭔가 아이디...어!가 안떠올라 멍청하게 했습니다. ㅡ.,ㅡ;
hyperhidrosis의 이미지

Quote:
내가 원하는 형식의 데이터인지 검사를 하려 합니다.
어떻게 해야 하나요?

if 문으로 검사하면 되지요.

Quote:
아울러 CString(String)를 char[]로 바로 변환 가능한가요?
글쓰고보니 더 생각나네요. CString -> int, float, double 로의 변환도 가능할까요?

LPCTSTR 로 캐스팅 됩니다.
char[] 로 할려면 복사하던가 하면 됩니다.
atoi, atof, sscanf 쓰면 됩니다.

나는오리의 이미지

hyperhidrosis wrote:
Quote:
내가 원하는 형식의 데이터인지 검사를 하려 합니다.
어떻게 해야 하나요?

if 문으로 검사하면 되지요.
위의 코드를 보시면 제가 if문 썼다는걸 짐작 가능할것 같았는데 아닌가보네요. ^^;
제가 원하는건 한페이지에서 여러가지 형식의 라인들중 제가 원하는 데이터가 있는 라인만 골라내서 일처리를 하는건데 위와 같이 했습니다. ^^;

hyperhidrosis wrote:
Quote:
아울러 CString(String)를 char[]로 바로 변환 가능한가요?
글쓰고보니 더 생각나네요. CString -> int, float, double 로의 변환도 가능할까요?

LPCTSTR 로 캐스팅 됩니다.
char[] 로 할려면 복사하던가 하면 됩니다.
atoi, atof, sscanf 쓰면 됩니다.

MSDN보니 나오더군요.
근데 제가 원하는 만큼의 결과가 안나와서 (LPSTR)(LPCTSTR)로 변환하는건 포기했습니다. ㅠ.ㅠ;
GetBuffer로 하는 방법이있다던데 그쪽은 별로 내키질 않네요.
doldori의 이미지

욕심많은오리 wrote:
CString(String)형의 변수 str을 선언했습니다.
이 str에 데이터가 매초 들어온다고 가정했을 때
내가 원하는 형식의 데이터인지 검사를 하려 합니다.
어떻게 해야 하나요?
참고로 구분자가있는 데이터입니다.
"ABC|DEF|123|456|@#$|%^$##@|abcdefg|"

MFC의 CString을 말씀하시는 건가요?
그렇다면 CString::Tokenize()를 쓰면 됩니다.
CString str("ABC|DEF|123|456|@#$|%^$##@|abcdefg|");
CString token;
int pos = 0;
while ((token  = str.Tokenize("|", pos)) != "")
    printf("%s\n", token);

욕심많은오리 wrote:
아울러 CString(String)를 char[]로 바로 변환 가능한가요?

MFC는 유니코드나 MBCS도 고려하기 때문에 char 대신 TCHAR를 씁니다만,
이들을 쓰지 않는다면 const char*로 변환하는 것이 가능합니다. (char[]가 아님)
const char* p = str;

욕심많은오리 wrote:
CString -> int, float, double 로의 변환도 가능할까요?

const char*로 변환한 다음 atoi()나 atof()를 쓰면 됩니다.
MBCS나 유니코드를 고려한 _tstoi(), _tstof() 등도 있으니 참고하세요.
나는오리의 이미지

doldori wrote:
욕심많은오리 wrote:
CString(String)형의 변수 str을 선언했습니다.
이 str에 데이터가 매초 들어온다고 가정했을 때
내가 원하는 형식의 데이터인지 검사를 하려 합니다.
어떻게 해야 하나요?
참고로 구분자가있는 데이터입니다.
"ABC|DEF|123|456|@#$|%^$##@|abcdefg|"

MFC의 CString을 말씀하시는 건가요?
그렇다면 CString::Tokenize()를 쓰면 됩니다.
CString str("ABC|DEF|123|456|@#$|%^$##@|abcdefg|");
CString token;
int pos = 0;
while ((token  = str.Tokenize("|", pos)) != "")
    printf("%s\n", token);

욕심많은오리 wrote:
아울러 CString(String)를 char[]로 바로 변환 가능한가요?

MFC는 유니코드나 MBCS도 고려하기 때문에 char 대신 TCHAR를 씁니다만,
이들을 쓰지 않는다면 const char*로 변환하는 것이 가능합니다. (char[]가 아님)
const char* p = str;

욕심많은오리 wrote:
CString -> int, float, double 로의 변환도 가능할까요?

const char*로 변환한 다음 atoi()나 atof()를 쓰면 됩니다.
MBCS나 유니코드를 고려한 _tstoi(), _tstof() 등도 있으니 참고하세요.

msdn 6.0에서는 안보이네요 ㅡ.,ㅡ;
그래서 여기서 찾아봤습니다.

아래는 예제입니다.

Example

The following example demonstrates the use of CStringT::Tokenize.

//typedef CStringT< TCHAR, StrTraitATL< TCHAR > > CAtlString;
CAtlString str( "%First Second#Third" );
CAtlString resToken;
int curPos= 0;

resToken= str.Tokenize("% #",curPos);
while (resToken != "")
{
   printf("Resulting token: %s\n", resToken);
   resToken= str.Tokenize("% #",curPos);
};

Output

Resulting Token: First
Resulting Token: Second
Resulting Token: Third

쩝...처음부터 알았더라면 이걸로 했으면 좋았을텐데...
이와 비슷한 함수가 또 있는지 찾아봐야겠네요.

제가 필요한건 |사이의 값이 필요하지만 필요없는 부분도 있지요. ㅡ.,ㅡ;
그래서 일일이 STR.MID()로 찾았지요. ㅠ.ㅠ
저는 역시 노가다 과인가 봅니다. ㅡ.,ㅡ;;;

비행소년의 이미지

Quote:
msdn 6.0에서는 안보이네요 ㅡ.,ㅡ;
그래서 여기서 찾아봤습니다.

참고 하세요. vc6에서 최신 msdn을 사용하는 법입니다.

http://www.codeproject.com/macro/VSNetHelp.asp

높이 날다 떨어지면.
아푸다 ㅡ,.ㅡ

비행소년의 이미지

doldori wrote:
MFC의 CString을 말씀하시는 건가요?
그렇다면 CString::Tokenize()를 쓰면 됩니다.

이게 vc6에 들어 있는 MFC에서 되던가요?
지금 실행해보니 에러가 나는 군요.
선언부에서 찾아 보니 strtoken관련 함수는 보이지 않는데요 :shock:

VC6 라면 CString::Tokenize()보다는 CString::Find() 를 써야 할거 같은데요.

높이 날다 떨어지면.
아푸다 ㅡ,.ㅡ

doldori의 이미지

비행소년 wrote:
doldori wrote:
MFC의 CString을 말씀하시는 건가요?
그렇다면 CString::Tokenize()를 쓰면 됩니다.

이게 vc6에 들어 있는 MFC에서 되던가요?
지금 실행해보니 에러가 나는 군요.
선언부에서 찾아 보니 strtoken관련 함수는 보이지 않는데요 :shock:

VC6 라면 CString::Tokenize()보다는 CString::Find() 를 써야 할거 같은데요.


흠... 6.0에는 없나 보군요. 몰랐습니다. ^^;
나는오리의 이미지

비행소년 wrote:
doldori wrote:
MFC의 CString을 말씀하시는 건가요?
그렇다면 CString::Tokenize()를 쓰면 됩니다.

이게 vc6에 들어 있는 MFC에서 되던가요?
지금 실행해보니 에러가 나는 군요.
선언부에서 찾아 보니 strtoken관련 함수는 보이지 않는데요 :shock:

VC6 라면 CString::Tokenize()보다는 CString::Find() 를 써야 할거 같은데요.

안써봤습니다.
이지 구현한 소스를 바꿀만큼 성실하지 않거든요. -_-;
역시 vs6에는 MSND6을 설치하고 사용해야하는군요.
TOKENIZE()는 7.0버전부터 지원하나보네요.
나는오리의 이미지

Quote:
MSDN Home > MSDN Library > Development Tools and Languages > Visual Studio .NET > Visual C++ > Reference > Visual C++ Libraries > Shared Classes > Classes Shared Between MFC and ATL > CStringT Class > Methods
카테고리가 VS.Net에 있네요.

VC6.0은 카테고리가

Quote:
MSDN Home > MSDN Library > Development Tools and Languages > Visual Studio 6.0
이렇게 시작되네요. ㅡ.ㅡ;;;
hyperhidrosis의 이미지

strtok 쓰세요

나는오리의 이미지

hyperhidrosis wrote:
strtok 쓰세요
그것도 생각해봤는데요.
CString형을 몇번이나 형변환해서 strtok쓰는것보단 그냥 Mid()로 부분부분 뜯어내서 비교하는게 더 나아보이더군요.
그래서 저~위에처럼 했습니다. ^^;

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.