あなたが探している情報は、この日記には記されていない可能性が高いです。(検索で来た人用)
にらどんは一杯500円。尚、出前は承っておりません。ご了承下さい。

CSVをWINAPIで読む 空文字列編

フォーマット動的生成を出発直前にほぼ完成させる。
これ結構有用性高いと思うのでコピペ&宣伝。

TCHAR buf[128], format[64];
TCHAR item[10][16]; // scanfの読み込み先
int iCount = 10, ptr = 0, com = 0; // scanfで取る要素の数、文字列連結用、コンマの数

for(int i = 0; i < sizeof(buf) && com < iCount; i++) {
	if(buf[i] != L',') continue;

	if(i > 0 && buf[i - 1] != L',') {
		ptr += wsprintf(format + ptr, L"%%[^,],");
	//	nullflag[com] = true;
	} else {
		ptr += wsprintf(format + ptr, L"%%1[,]");
	//	nullflag[com] = false;
	}
	com++;
}
ptr += wsprintf(format + ptr, L"\0");

_stscanf_s(buf, format,
	item[0], 16, item[1], 16, item[2], 16, item[3], 16, item[4], 16,
	item[5], 16, item[6], 16, item[7], 16, item[8], 16, item[9], 16);

空文字列は","の値を取り、それ以外はカンマを含まない文字列を取ります。
この処理の後にitemをチェックし空文字列に置き換えていけばOK。
nullflagはそのチェック用にあったものだけど、上記の方法のが直感的にわかりやすいかと思いコメントアウト
置き換えなくてもそのまま条件式に突っ込めるのでやることによっては楽になるかも。
どっちがtrueでどっちがfalseか決めかねるのも理由だったりして。
デリミタを複数指定してたりすると文字列関数を使う必要が出てきたりしますね。とりあえずこれはCSV用ってことで。


追記:forの条件式が文法的に間違っていたのを修正。eldeshさんありがとうございます。