Octaveでファイルの読み込み

C言語っぽくもできるらしいんだけど、それだと遅いので、Octaveのコマンドを使った方がいいと思う。Cフラグ立てて、fscanfとかsscanfとかもいいんだけど、それよりはデータを事前にOctaveの読み込みやすい形にしといてload関数でガシャポンと読み込んだ方が、多分楽。

http://www.bekkoame.ne.jp/~ponpoko/Math/OctaveFile.html

loadを使う方法

データが、hoge.datとして、

#t  ch1  ch2
0  0.1   0.2
1  0.15  0.25
...

とかだったとして、

> load hoge.dat

とすると、hogeという変数にhoge.datのデータが丸ごとコピーされます。すげー。超楽。文字列が入ってたりすると読み込めないけど、最初からデータの形式がどういうものか分かってれば問題なく読み込めます。
そして、上のように読み込んでから、例えば2行目のを読み込みたいとすると、

> hoge (:,2)
0.1
0.15
...

とか出てきます。1行目とか3行目とかを出したいときは上の数字を返れば良いっぽい。
また、時間tをtという変数にコピーしたいときは、

> t = hoge (:,1);

でできる。あとあれ、結果を一々出してくれなくても良い場合は文末にセミコロン(;)を付けると良いです。

http://www.gecky.net/sp/octave/

fgetsとsscanfを使う方法

C言語っぽくやります。
最初に、C言語でファイルポインタを定義するのと同じ感じに、

> fp = fopen ("hoge.dat","r");

とします。rは読み込み。wにするとデータがあぽーんします。
その後に、fgetsで読み込み。

> huga = fgets (hoge, 100);

これで100行目まで読み込みます。でもfgetsで読み込んだのは文字列なので、それを実数に変換するためにsscanfを使うらしいです。

> [t, ch1, ch2] = sscanf (huga, "lf\t%lf\t%lf\n", 'C');

とすると、tに1列目、ch1に2列目、ch2に3列目のデータがコピーされます。
'C'はC言語風にやりますよというCフラグらしい。フラグってwww
正直かなり面倒臭い。これならloadを使った方がよっぽどマシである。止むに止まれぬ理由があるとか、結構面倒な形式でデータが構成されてるとかならあれだけど。でもそういうのも別のプログラム言語で事前に処理しときゃ良いっつー話もある。

fscanfを使う場合

殆んどC言語と同じ風にしてできる。簡単。でもOctave的な楽さはない。

> fp = fopen ("hoge.dat","r");
> [t, ch1, ch2] = fscanf (fp, "%lf\t%lf\t%lf\n");

とすると、やっぱりtに1列目、ch1に2列目、ch2に3列目のデータがコピーされます。別に特にこれを使わないといけない理由はない気がするけど、覚え書き程度に。