【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】

MATLABで作成した.matファイルもしくはExcelファイルなどに格納した
あるデータ配列の数値をグラフ化するときに
時間によって変化するのが目に見えるようにするにはどうすればいいでしょうか?

例えば
100行2列のデータを2次元折れ線グラフとして表示するときに
プログラムを実行すると1秒ごとに1行分のデータがプロットされ
時間ごとにグラフが推移していくようにしたいです。

また、そのような変数をいちいち与えず
ファイルを読み込むだけにしたいのですが
どのようなファイル形式ならばできるのでしょうか?

A 回答 (1件)

ファイル形式はどのようなものでも可能です。


ご自分で好きなように設計してください。

Excelでデータを作って、ファイル化するなら
いわゆるcsvが向いているかとも思います。

もちろん、ファイルアクセスの効率化を図るため
バイナリ・ファイルを用いることもできます。

また、MFC前提の場合は”シリアライズ"機能を用いると楽です。
(読み書きとも同じシリアライズを用いなければなりませんが...)

基本的には1秒間隔のタイマーを用いて制御します。
タイマーといっても各種ありますが
1秒という非常にのんびりした間隔ですので
いわゆるWM_TIMERで問題ないと思います。

WM_TIMER応答関数内で
ファイルを1行読み出し
データ追加
該当領域無効化

を行います

該当領域無効化を行うと
WM_PAINTが飛んできます
(MFCならOnDrawが呼ばれます)
その中でデータを参照してグラフを描画させます。

>100行2列のデータ
この程度のデータであれば、
タイマーで毎回1行ずつファイル読み出しするのは非効率なので
最初にファイルの全データを読み取ったほうが良いと思います。
(すべてファイルに格納されていればの話ですが...)
また、MFCのシリアライズを用いた場合には
基本的にこの方法となります。
(シリアライズでも毎秒の読み出しができないわけでは
ありませんが、一気に読みだす場合に比べ作業が大変です)

あとは
ファイルアクセスを行うので
I/Oエラー対策ですね。
C++なので例外でいいと思います。
MFCなら(シリアライズを使わない場合でも)
CFileException を捕捉して対応可能です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!