- ベストアンサー
CSVファイル読み込み
VC++でCSVファイルの読み込みを作っています。 ファイル名「abc.csv」というファイルがあり CSVファイルの内容は、 "id","food" "1","バナナ" "2","オレンジ" となっています。 ソース上はファイルをオープンして 読み込むところまでは分かりましたが、 CSVファイルのコンマの分解とその後の処理が分かりません。読み込んだ後、コンボボックスで、CSVファイルのname一覧を表示する予定でいます。 例では、バナナ オレンジ とコンボボックスで表示して選択できるようにします。 今のソースは以下の通りです。 CStdioFile file; CString name; int flag; if(!file.Open("abc.csv",CFile::modeRead)){ AfxMessageBox("File Open failed"); } while(flag){ if(file.ReadString(name)==FALSE) //nameにデータ読み込み break; //CSVコンマを分解 //テキスファイルで読み込み?表示? } file.Close(); //file close 初心者なので間違いだらけかもしれませんが よろしくお願いしますm(__)m
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
一文字ずつ読み込んで、区切り記号で分解するのがスタンダードな手法だと思いますが。
その他の回答 (3)
- clsdi99
- ベストアンサー率63% (31/49)
No.1さんが仰るとおり、1文字づつ読んで処理するのが一般的ではないかと思います。 質問者さんがCSV読み込みのコード作成に力を掛けたいのであれば、1文字づつの処理をお勧めします。 ちなみに、CSVのフォーマットは非常に簡単なのですが、以外に?見落とされやすい形式で出力される場合もあるので勉強するのによいかと。(例えば、データに カンマやダブルクォートがある場合とか。エクセルでわざと出してみるといいかもです。)
お礼
ありがとうございます! その後、作成していたプログラムが行き詰まってしまったので、No.1さんの通り、一文字ずつ読んでいく処理に変えました(^^ゞ 一文字ずつ読み込んで、コンマでそれぞれ分解された文字を配列に格納してみました。 これからも勉強になるよう、色々と試しながら やっていこうと思います。
- FAY
- ベストアンサー率49% (95/193)
VC6.0なら AfxExtractSubString(CString &rString, LPCTSTR lpszFullString, int iSubString, TCHAR chSep); とかかな。
- Trick--o--
- ベストアンサー率20% (413/2034)
最近のMFCにはTokenizeというメンバ関数があるようです。 http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vclib/html/vclrfcstringttokenize.asp VC++6.0には無いようですが……
お礼
ありがとうございます! これからの勉強の参考にさせて頂きます。
お礼
アドバイスをありがとうございますm(__)m その後、いろいろといじってみたのですが 行きづまってしまったので、一文字ずつ読む方法で考えることにしました!