csvやxlsファイルとのやり取り
csvファイルやxlsファイルへの書き出しや読み出しとその応用
シミュレーションのための変数をcsvファイルやxlsファイルから読み出したり, シミュレーションの結果をcsvファイルへ書き出したりするための関数がMatlabには用意されている.
・csvファイル関係
・csvファイルへの書き出しやcsvファイルからの読み出しは, それぞれcsvreadとcsvwriteである.
それぞれ, 書式は以下の通り.
csvwrite('○○○.csv',A);
とすると, 行列Aが○○○.csvファイルへ書きこまれる.
・csvファイルを読み出すには, 以下のようにすればよい.
B=csvread('○○○.csv');
こうすると, ○○○.csvのデータが読み出され, Bに代入される.
・csvreadやcsvwriteは簡単に使うことができるが, シートを変えたりすることができないと思う.
なので, 異なるデータや複数のデータを別々のものとして保存するためには, その分だけcsvファイルが必要となり, ファイルが膨大になってしまい, 読み出しなどが面倒である.
・xls(エクセル)ファイル関係
・シートを扱うことができるxls(エクセル)ファイルへの出力やそのファイルからの読み出しなどは, 以下のように行う. まず, ファイルへの書き込みは以下のように行う.
xlswrite('○○○.xls',A,'△');
こうすると, Aの内容が○○○.xls(ファイルがない場合は作られる)の△(という名前の)シートへ書きこまれる. ○○○.xlsは, パス(C:\Program Files\MATLAB71\work\○○○.xlsなど)で書いたほうが確実である.
・Vistaは, パスがめんどくさいので, 保存したい場所に行って, そのフォルダのパスを調べてからのほうがいいと思う.
・△というシートがなければ, 「警告: Added specified worksheet.」とかいう警告が出るが, 気にしなくても大丈夫. もし, この警告を消したいなら, 「warning off MATLAB:xlswrite:AddSheet」とすればよい. また, シートを自動で動かしたいなどの場合は, '△'の部分を変えて, たとえば以下のようにすればよい.
for i=1:3
xlswrite('○○○.xls',A{i},num2str(i));
end
・こうすると, セル配列で作ったAのi番目の要素が"i"という名前のシートに書きこまれる.
なかった場合は, 上に書いてあるようなエラーが出る.
・私個人として使う場合は, ファイルをまず準備して, シートを全部消去した状態にしている. これは, xlswriteで書きこんだ場合は, 最後に書いた(△やnum2str(i)などの部分)のにsheet1などの名前を入れなければならず, これは, 自動で回す場合などに邪魔になってしまい, 結局最初に準備してあるシートには書きこまないままということになってしまうからである.
・この問題点の回避方法としては, num2str(i)を使わず,
for i=1:3
xlswrite('○○○.xls',A{i},i);
end
とすれば, Sheet1, Sheet2, Sheet3の順に書きこまれていく.
・次に, ファイルからの読み出しであるが, csvreadと特に大きな変化もなく, 以下のようにすればよい.
A=xlsread('○○○.xls','△');
○○○.xlsはさっきと同じで, パスで書いたほうがよいだろう.
このようにすると, ○○○.xlsの「△」というシートの中身が読みだされて, Aに代入される. ここで, ○○○.xlsというファイルの中に「△」というシートがなければエラー終了する.
○○○.xlsからは, 以下のようにすると, 自動で順次読みだされる.
for i=1:4
test{i}=xlsread('○○○.xls',i);
end
とすれば, ○○○.xlsファイルのi番目のシート(Sheet1, Sheet2, Sheet3, Sheet4など)からデータが読みだされ, testというセル配列のi番目に代入される.
for i=1:4
test{i}=xlsread('○○○.xls',num2str(i));
end
とすると, シートの名前が"i"のところから読み出すこととなる.
なので, num2strを使わずにファイルに書き込み, 使わずに読みだすと楽であろう.(調べてみて初めて知ったので, 私もそうする予定だ.)
参考になったホームページ
MathWorkのHP(英語)
初心者によるMATLABメモのExcelファイルを読み込む