[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は文字列系のサポート弱いのなんの。