VC++6.0 SDI ファイル操作 数値変数出力

[戻る]
merlo 2002/04/13(土) 03:17:36
こんにちは
今週の月曜からVC++を始めた初心者ですが
よろしくお願いします.

さて,今日まででやっと,SDIウィンドウに
ディスク上のBMPをAPIで表示させるまでに至りました.

BMPにおける被写体(実際には,写っている微小粒子の粒径)を
マウスでクリックしては,その半径情報のみを
C***Doc.hで宣言したpublic変数に保存し(大きな保存用配列を用意してある),
serializeメンバ関数内で,そのデータを保存しています.

しかしながら,
if (ar.IsStoring()){ ****  }ここに記述すると
(例えば,ar << data1;),出力ファイルがバイナリファイルに
なってしまいます.これでは,エクセルで読み込めません
(読み込む方法を知りません).
数値をアスキー(というのでしょうか)で出力するためには,
どのようにすればいいのでしょうか.

ちなみに,今は応急処置として,
CString ss;
ss.Format("%f %f %f\n",data1[i],data2[i],data3[i]);
ar << ss;

としています.しかし,もっと基本的な方法があるような気がしてやみません.

上述のserialize関数以外にも,私は
CFile fout;
等とやって,同じくSDIのツールバーに新規作成させたアイコンに
ファイル保存の役割を担わせる方法も知っていますので,
幅広いアドバイスをよろしくお願いします.

PS
アスキーとは,テキストエディタで普通に慣れ親しんでいるファイル形式として
使いました.間違った用法でしたら,すみません.
また,(ss.Format("%f %f %f\n",data1[i],data2[i],data3[i]);
)の記述では,テキストエディタの種類により改行がうまく機能しません.
\n\0 , \0ax? 先のような改行キーワードを見かけたことがありますが,
(つまり,学習したが理解できなかった)これで解決できるものなのでしょうか
(当然やってみたができませんでした)

以上,よろしくお願いします.

関

merlo 2002/04/13(土) 03:19:49
//上述のserialize関数以外にも,私は
//CFile fout;
//等とやって,同じくSDIのツールバーに新規作成させたアイコンに
//ファイル保存の役割を担わせる方法も知っていますので,

C***Dlgをつかっていたような・・・(←何回か記述経験しました)
ファイルが学校にあるので,
今手元で確認できません・・・・

dairygoods 2002/04/13(土) 10:26:05
CDocumentのシリアライズ機能は、作業状態の保存と復元のために用意された仕組みです。
ですから、別のアプリケーションで見るための出力ファイルを作成する用途で
使うべきではないと思います。
また、シリアライズ用に開かれたファイルは、「バイナリ形式」になっており、
書き込み時に「\n」を適切な改行コードに変換してくれません。

> CFile fout;
> 等とやって,同じくSDIのツールバーに新規作成させたアイコンに
> ファイル保存の役割を担わせる方法も知っていますので,

したがって、上記方式でテキスト形式で出力する機能を別途作成する方法をお勧めします。
だだし、ファイルをテキスト形式(「\n」を正しく変換するモード)で開くには、
CFileの代わりに、CStdioFile を使用します。


また、数値をテキストにする方式としては、

> CString ss;
> ss.Format("%f %f %f\n",data1[i],data2[i],data3[i]);

のようにするのが通常の方法です。
数値をどのような書式のテキストに変換するかは、
プログラマだけが知っていることですので、具体的にFormatするしかありません。

merlo 2002/04/13(土) 12:15:27
的確なアドバイス,本当にありがとうございました.
非常にわかりやすかったです.m(_ _)m

merlo 2002/04/13(土) 12:15:54
[[解決]]
解決しました

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