• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

一文字ずつ読み込んで、区切り記号で分解するのがスタンダードな手法だと思いますが。

tikira
質問者

お礼

アドバイスをありがとうございますm(__)m その後、いろいろといじってみたのですが 行きづまってしまったので、一文字ずつ読む方法で考えることにしました!

その他の回答 (3)

  • clsdi99
  • ベストアンサー率63% (31/49)
回答No.4

No.1さんが仰るとおり、1文字づつ読んで処理するのが一般的ではないかと思います。 質問者さんがCSV読み込みのコード作成に力を掛けたいのであれば、1文字づつの処理をお勧めします。 ちなみに、CSVのフォーマットは非常に簡単なのですが、以外に?見落とされやすい形式で出力される場合もあるので勉強するのによいかと。(例えば、データに カンマやダブルクォートがある場合とか。エクセルでわざと出してみるといいかもです。)

tikira
質問者

お礼

ありがとうございます! その後、作成していたプログラムが行き詰まってしまったので、No.1さんの通り、一文字ずつ読んでいく処理に変えました(^^ゞ 一文字ずつ読み込んで、コンマでそれぞれ分解された文字を配列に格納してみました。 これからも勉強になるよう、色々と試しながら やっていこうと思います。

  • FAY
  • ベストアンサー率49% (95/193)
回答No.3

VC6.0なら AfxExtractSubString(CString &rString, LPCTSTR lpszFullString, int iSubString, TCHAR chSep); とかかな。

参考URL:
http://msdn2.microsoft.com/en-us/library/ms195110.aspx
  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.2

最近のMFCにはTokenizeというメンバ関数があるようです。 http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vclib/html/vclrfcstringttokenize.asp VC++6.0には無いようですが……

tikira
質問者

お礼

ありがとうございます! これからの勉強の参考にさせて頂きます。