シリアライズ関数でCSV形式ファイルの読み書き

[戻る]
2002/05/15(水) 13:22:10
はじめまして。花と申します。
VC++をはじめて間もない初心者ですが、よろしくお願いいたします。

早速質問なのですが、MFC(SDI)のフォーム上にいくつか
エディットボックスを設置し、「読み込み」「書き込み」ボタンを
押下すると、そこに書き込まれた文字をダイアログを出しながら
SCV形式で保存したいのですが、うまくいきません...。

現在、シリアライズ関数を用いて保存しているのですが、
上記の形式に変えたく思っています。

どうかご教示をお願いいたします。

(現在書いているコードです。)
//シリアライズ関数
void CPerson::Serialize(CArchive &ar)
{
  //基本クラスのSerialize関数を呼び出す
  CObject::Serialize(ar);

  //書き込みと読み込みのどちらを行うか判定
  if (ar.IsStoring ())
    //すべてのメンバ変数を決められた順番で書き込む
    ar << m_sName <<m_sAdress << m_iAge << m_sPhone << m_sUrl << m_iMale;
  else
    //すべてのメンバ変数を決められた順番で読み込む
    ar >> m_sName >> m_sAdress >>m_iAge >> m_sPhone >> m_sUrl >> m_iMale;

}

Bun 2002/05/15(水) 13:41:55
> SCV形式

CSV でわ?

CFile, CStdioFile クラスあたりを学ばれてはいかがでしょうか。

2002/05/15(水) 13:56:14
> うまくいきません...。
どう、うまくいかないのでしょう?

以下は、ソースからの判断です。
まず、CSV形式は「カンマ区切りのテキスト」です。
書き込み、読み込み共にカンマの処理が行われていません。
更に、テキストですので、m_iAgeやm_iMale(int型ですよね?)では駄目です。

CArchiveならWriteString、ReadStringの方が適していると思います。

Bunさんの言われる様に、CFile, CStdioFileをチェックしてみては?

ワルツ 2002/05/15(水) 18:06:33
CString    strCsvText;
strCsvText.Format( "%s,%d", m_sAdress, m_iAge  );

のように文字列を作成してその文字列をCStdioFileやなどで保存する。
でいかがでしょうか?

または、fprintfなどでファイルに保存するなど。

カカシ 2002/05/16(木) 13:12:25
[[解決]]
お返事が遅くなって申し訳ありません。
CFile,CStdioFileなど、もう少し勉強してみます。

また、質問させていただくかもしれませんので、
その時はよろしくお願いいたします。

ありがとうございました。

古いスレッドには追加発言できません。