serializeについて

[戻る]
仕事人 2003/10/28(火) 16:31:09
前回は有難うございました。
今回も宜しくお願いします。
test.txt
1 2
3 4 
5 6
7 8
9 10
上記のテキストの内容(x座標、y座標)を取り出すにはどうしたらよいですか?
下にソースに付加する形で説明していただければ嬉しいです。
宜しくお願いします。

void CFIG1Doc::Serialize(CArchive& ar)
{
    if (ar.IsStoring())
    {
        // TODO: この位置に保存用のコードを追加してください。
    }
    else
    {// Serialize 関数内で
CArray <double, double> m_x;  // X座標
CArray <double, double> m_y;  // Y座標

if(ar.IsStoring()) return;

double  xTemp, yTemp;
CString buf;

m_x.RemoveAll();
m_y.RemoveAll();

// 一行読み出し、
while(ar.ReadString(buf))
{
    // 値をとりだし、
    sscanf(buf, "%lf %lf", &xTemp, &yTemp);

    // メンバ変数に追加
    m_x.Add(xTemp);
    m_y.Add(yTemp);
}

επιστημη [E-Mail] [HomePage] 2003/10/28(火) 16:38:49
呈示されたコードが動かないからデバッグしてくれ、ということですか?

仕事人 2003/10/28(火) 16:44:20
επιστημη様
返信有難うございます。
>呈示されたコードが動かないからデバッグしてくれ、ということですか?
いえ、違います。
一応、問題なく実行できる(ファイル⇒開く)のですが、テキストファイルからプログラ
ム実行時にデータを読み込むようにしたいのです。

επιστημη [E-Mail] [HomePage] 2003/10/28(火) 16:47:46
'実行時にデータを読み込む'とは、アプリケーション起動時に一度だけ、ということですか?
だとすれば Serialize に実装するのは拙いのでは? 

# てゆーか、当初の質問にはそんなこと一言も書いてないやん…

仕事人 2003/10/28(火) 16:53:28
>実行時にデータを読み込む'とは、アプリケーション起動時に一度だけ、ということで
すか?
はいおっしゃるとおりです。
1.ファイルを読み込み
2.メンバ変数に追加
3.メンバ変数を利用して何らかの処理
この場合はSerialize に実装するよりいい方法はございますか?
よろしければご教授ください。

επιστημη [E-Mail] [HomePage] 2003/10/28(火) 17:00:39
void CFIG1Doc::OnNewDocument() あたりはいかがでしょう。
# もっと適した位置があるかも。マニュアルを読んでください。

επιστημη [E-Mail] [HomePage] 2003/10/28(火) 17:01:26
> void CFIG1Doc::OnNewDocument() あたりはいかがでしょう。

失礼。戻り値は void でなく BOOL です。

仕事人 2003/10/28(火) 17:25:35
>void CFIG1Doc::OnNewDocument() あたりはいかがでしょう。
これは、有難うございます。また勉強しておきます。
void CFIG1View::OnDraw(CDC* pDC)
{
   std::ifstream file("test.txt");
   double x, y; 
   file >> x >> y ;

ところで、上述のようなコードではできないのでしょうか?
コンパイルしたら'std' : 識別子がクラス名でも名前空間名でもありません。というエラー
が出ます。

επιστημη [E-Mail] [HomePage] 2003/10/28(火) 17:33:15
#include <fstream> を忘れていませんか?

仕事人 2003/10/28(火) 17:35:02
返信有難うございます。
#include <fstream> は入っています。

επιστημη [E-Mail] [HomePage] 2003/10/28(火) 17:37:45
…だったらそんなエラーが出るはずないんだが…
#include <fstream.h> ではダメですよ。

# それをどこに書きましたか?

ku 2003/10/28(火) 17:37:59
> #include <fstream> は入っています。
入っているのは<fstream>じゃなくて<fstream.h>なのでは?
よく確認してみてください

仕事人 2003/10/28(火) 17:45:22
#include <fstream.h>
すいません。hがはいっていました。
有難うございました。

仕事人 2003/10/28(火) 18:08:52
最後に一つだけお聞きしたいのですが、
void CFIG1View::OnDraw(CDC* pDC)
{
    std::ifstream file("test.txt");
    double x, y,ptr; //
    file >> x >> y ;
xとyに何個、数が入力されたかを動的変数としてあらわす方法を教えてください。
test.txt
1 2
3 4 
5 6
7 8
9 10
この場合ですと、xの数a=5、yの数b=5 といったような場合です。
宜しくお願いします。

仕事人 2003/10/28(火) 18:39:42
void CFIG1View::OnDraw(CDC* pDC)
{
    std::ifstream file("test.txt");
    double x, y,ptr; //
    file >> x >> y ;

a=sizeof(x)/sizeof(x[0]);//配列サイズ(このような)
上述のような感じで取り出したいのですが、x,yを配列とすることができません00。
宜しくお願いいたします。
上記のようなコマンドでとりだしたx、yを配列にする方法を教えてください。

kajiki 2003/10/28(火) 20:47:53
>xとyに何個、数が入力されたかを動的変数としてあらわす方法を教えてください。

変数を自分で用意して数える

>上記のようなコマンドでとりだしたx、yを配列にする方法を教えてください。

配列を自分で用意して入れる


はっきり言わせてもらうがVC以前の問題。
C/C++の参考書読んでコンソールアプリで勉強するべきレベルだと思う。

それと
>最後に一つだけお聞きしたいのですが、

うそつき!一つじゃないじゃねーか!

επιστημη [E-Mail] [HomePage] 2003/10/29(水) 08:54:04
std::vector<double> xv, yv;
std::ifstream file("test.txt");
double x, y;
while ( file >> x >> y ) {
  xv.push_back(x);
  yv.push_back(y);
}

仕事人 2003/10/29(水) 09:45:16
επιστημη様
有難うございました。
できました。
こんな少ないコマンドで解決するとは思ってもいませんでした。
ご親切に有難うございました。

kajikiさんの言動には少々驚きました。
もう少し、言葉のお勉強をしてほしいものです。

仕事人 2003/10/29(水) 09:45:44
[[解決]]
解決です。

επιστημη [E-Mail] [HomePage] 2003/10/29(水) 09:58:39
仕事人さんの言動には少々驚きました。
もう少し、質問のしかたを心得てほしいものです。
# 何度も問い直さないと核心に迫れない…

仕事人 2003/10/29(水) 10:34:44
επιστημη 様
何から何まで有難うございました。
次回は質問内容をしっかりまとめた上、利用させてもらおうと思います。
有難うございました。

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