scilabを利用して簡単なデータ処理をすることがよくあります。実験機器のソフトウェアとの兼ね合いで、データのやりとりは大抵csvファイルを利用するのですが、基本的にscilabの処理で完結させていたため、これまでscilabからcsvファイルを書き出すということをしてきませんでした。(一度挑戦してめんどくさそうだったので避けてきました。駄目な子……)
数値データしか扱わないのであれば、読み込みはread関数で事足ります。webで検索しても、これについては沢山書いてある。ところが、csvファイルを書き出したいとなると勝手が別でweb上の情報が急に減ってしまうのです。一応write関数を使うことは分かるのですが、ただ write('ファイル名', データ)としただけではカンマ区切りのcsvには出来ません。
そういう背景がある中で、ついにcsvファイルを書き出す気になりました。
案の定難儀したうえに、明らかに忘れそうな内容だったので備忘録として書いておきます。私がFortranについてほぼ初見なので、あいまいな部分も多々ありますが。
でもまあ、とりあえずこれで実家に行ったときでもcsvファイルが吐けるかな。
・csvファイルへの書き出し
例えば
size(data)
ans =
33778. 2.
なdataという行列を書き出したい場合,
write('data.csv', data, '(33778(f11.9, '',''), 2(f11.9))');
と入力する.
第一引数がファイル名,第二引数が書き出したい行列,'~'でくくられた第三引数が書き出すフォーマットの指定.
フォーマットはFortran形式であるので,Fortranの資料に詳しい.
scilabにおいては
-'~'の中でさらに(~)によってくくられていなければならない.すなわち'(~)'の形になっていなければならない.
-前半部分は 行数(数値の形,''出力したい文字列'') ,後半部分は 列数(数値の形) となっている.
-カンマ区切りにするための'',''は前半部分に書かなければならない.後半部分には書いても書かなくても出力結果に差が出ない.(この辺はよく分かりません.あと「''」はシングルクォーテーション二つ.)
-数値の形は f:実数型,11.9:小数点含む全体が11桁でそのうち小数点以下が9桁 ということ.
※このコマンドで書き出したcsvファイルは
数値,数値,
が1行を構成している.一方EXCELから同じデータを出力した場合は
数値,数値
が1行を構成している.
そのため上記コマンドで書き出したファイルの方が,カンマの数だけ大きなファイルになっている.
生来のソフトウェアスキルの無さもあって、なんとか読める形になるまでに結構な時間がかかってしまったわけですが、こういうことって書籍を読めばものの数分で分かってしまうのでしょうね。統計のRもそうですが、タダだ!と思って突入した初学者が最初に引っかかるのがデータハンドリングな気がします。無論、私は今まさに初学者。
PR