[MFC]簡易版split系関数 | Assertion Failed!

[MFC]簡易版split系関数

MFCアプリからカンマ区切りの数値データを読み込んで、配列に格納。


[環境]

VS2008

WIN32コンソールアプリ(MFC共通ヘッダ追加)


テキスト読み込みについてはこちら


サンプルデータ

[test.txt]

1,2,3

4,5,6


※ 行データに不正な値(「,」をはさんで何もないとか)でない、かつ列固定の場合


int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
  int nRetCode = 0;

  if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
  {
    ・・・中略
  }
  else
  {
    CStdioFile file(_T("C:\\test.txt"), CStdioFile::modeRead);
    
    CString str;
    
    while(file.ReadString(str))
    {
      int split[3] = {0};

      TCHAR *next;
      TCHAR *token = wcstok_s(str.GetBuffer(), _T(","), &next);
      int i = 0;
      do
      {
        split[i] = _wtoi(token);
        token = wcstok_s(NULL, _T(","), &next);
        i++;
      } while(token != NULL);

    }
  }

  return nRetCode;
}


wcstok_s でデリミタ(区切り文字)までの文字を読み込んで、TCHAR型のtokenに格納。


格納した文字列を _wtoi で数値変換。


ループ内でのwcstok_s の第一引数がNULLが何故かは知らない。


MSDNを参考にしたので。


もっと可変長データを扱いたいとかあったら、VectorなりCArrayなり使うと

いけるんじゃないかな。


今必要なのはコレで十分だからここまで。


Perlだとこんなの一瞬なのに、Cは文字列系のサポート弱いのなんの。