文字列を特定の区切り文字で分割して、CStringArrayの要素に格納する(CSVカンマ区切り) MFC
タイトルが分かり難いな。。。
CSVカンマ区切りの文字列を分割してCStringArrayに格納したい事が良くあると思います。
そんな時の為に、私は、以下のような関数を利用しています。
もっと効率的な処理があると思いますが、わかりやすさ重視でこんな感じで書いています。
//CString文字列を区切り文字を指定して、CStringArrayに分割する
void Split(CStringArray* pstrArray,LPCTSTR szTarget,LPCTSTR szDelimiter)
{
if(!szTarget)
return;
if(!szDelimiter)
return;
if(!pstrArray)
return;
pstrArray->RemoveAll();
CString strTarget(szTarget);
size_t intDelimiterLen=0;
size_t intStart=0;
int intEnd=0;
strTarget += szDelimiter;
intDelimiterLen = _tcslen(szDelimiter);
intStart = 0;
while (intEnd = strTarget.Find(szDelimiter, intStart), intEnd >= 0)
{
pstrArray->Add(strTarget.Mid(intStart, intEnd - intStart));
intStart = intEnd + intDelimiterLen;
}
return;
}
////使い方
CStringArray strArray;
CString strLineData;
Split(&strArray,_T("あ,い,う,え,お"),_T(","));
int iMaxCol=strArray.GetSize();
for(int iIndex=0;iIndex<iMaxCol;iIndex++)
{
strLineData=strArray.GetAt(iIndex);
//何かの処理。
//
//
}