• ベストアンサー

MATLABのCSV形式での書き込みについて

MATLABにて計算させた結果をCSV形式で出力したいのですが, もともとCSVファイルに書き込んであるデータを消さずに, 追加書き込みとして,行と列を指定して書き込み出来るのでしょうか? もしできるのであれば, どのようなプログラムを組めばよいのでしょうか? どなたかご教授お願いします.

質問者が選んだベストアンサー

  • ベストアンサー
  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.2

speedとpowerはdouble型の行列ですよね? fwrite関数はバイナリ保存関数ですので、CSV形式(=テキスト形式)での保存はできません。 dlmwrite関数では小数点以下12桁までを指定して保存していますので、fprintf関数を使用すれば良いのではないかと思います。 なお、fprintf関数を使用する場合は、区切文字(,)や改行は自動で追加されませんので、以下のように記述する必要があります。 fprintf(fid, '%.12f,', speed); fprintf(fid, '\n'); fprintf(fid, '%.12f,', power); fprintf(fid, '\n'); ただ、この方法では各行の末尾にもカンマが出力されますので、それを抑止したい場合は、speedとpowerの各要素をループの中で保存してください。 ■ fprintf関数 http://infoshako.sk.tsukuba.ac.jp/InfoRes/jdoc/MATLAB5/jhelp/techdoc/ref/fprintf.html また、プログラムではfor文の中でfopenとfcloseを繰り返していますが、余り良いことではありません。見たところファイル名は一定のようですので、fopenとfcloseはfor文の外でするべきだと思います。そうすれば処理速度も向上しますし、別に追記でfopenする必要もありません。 fid = fopen('file1.csv', 'w'); for fprintf(fid, ....); end fclose(fid); 最後に、この場合はファイルの出力方法を変更する以外に、speedとpowerをループ回数分保存するように変更する方法もあるのではないかと思います。

fds_2008
質問者

お礼

なるほど!そうすればよかったんですね★ お陰ででうまくエクセルで読むことができました! 本当にありがとうございました!

その他の回答 (1)

  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.1

fopen関数のpermissionの指定を「a」か「a+」にすれば追記が可能です。 ■ fopen関数 http://infoshako.sk.tsukuba.ac.jp/InfoRes/jdoc/MATLAB5/jhelp/techdoc/ref/fopen.html

fds_2008
質問者

お礼

sgwjnさん,迅速に回答していただきましてありがとうございます! 教えて頂いた通りやってみました! ************************************************************ for... 途中省略 fid = fopen('file1.csv','a+' ) fwrite(fid,speed,'double') fwrite(fid,power,'double') fclose(fid) next ************************************************************ と,プログラムしたのですが,エクセルで開くと変な文字になってしまいました. ちなみにspeedとpowerは計算させた1×101の行列です. 以前は以下のように書き込みをしていたのですが・・・ ************************************************************ dlmwrite(file1.csv',[speed;power]', 'precision', '%.12f',... 'delimiter',',','roffset',0,'coffset',0) ************************************************************ これだと,ちゃんとエクセルで開けて問題なかったのですが, 今回はforループで繰り返し計算させながら 書き込みさせなくてはいけないので,これをループの中に入れたら 最後のループしか書き込みされませんでした.

関連するQ&A

  • MATLABのCSV形式での書き込みについて

    MATLABにて計算させた結果をCSV形式で出力したいのですが, もともとCSVファイルに書き込んであるデータを消さずに, 追加書き込みとして,行と列を指定して書き込み出来るのでしょうか? もしできるのであれば, どのようなプログラムを組めばよいのでしょうか? どなたかご教授お願いします.

  • CSV形式に変換

    プログラミング(C言語)で、ファイルの内容をCSV形式に変換し、指定した出力ファイルに出力するプログラムを作成せよ。という課題がありましたが、 ファイルの内容をCSV形式に変換 がわかりません。どのようなプログラムをかいたらよいのでしょうか?

  • MATLAB(マトラボ)とcsvファイルについて

    マトラボで、文字列を含む、csvファイルを読み込み、データをプログラムに使用したいのですが、どうしたらいいですか? csvread('filename')ではできませんでした。 どなたか、ご教授くださいませ。

  • ラダー回路 文字列データのCSVへの書き込み

    データレジスタD0以降に格納されたアスキーデータ"00001"をCSVファイルに書き込みたいのですが、三菱Qシリーズシーケンサだと文字列のCSV出力ができません。 仕方なくアスキーからBIN形式にしてからCSV書込みをしてみようと試みたのですが、正しい値に変換できません。(添付図参照) データを "00001" としてCSVファイルに書き込むにはどうすればよいのでしょうか?

  • VBA CSV形式で保存したいのですが

    EXCELで、以下のような表を作成してあります。   A       B       C 1 あ,10 2 い,20,100 3 う,30 4 え,40,200,か 5 お,50 A列にカンマを含めたデータが入っており、 1000行程度あります。 このようなデータをCSV形式で保存したいのですが、 単純にVBAを組むとそれぞれのデータが""で囲まれます。 また、上記例の3行目(以降)のデータの終わりに「,」が 出力されてしまいます。 例:   あ,10 い,20,100 う,30, VBAで、 (1) ""で囲まれることなく、 (2) 行内のデータの個数によって,をつける位置を判断させて (3) セルに入っているカンマ区切りのデータをB列等に分離せずに 保存する方法はないでしょうか? ご教授、よろしくお願いします。

  • csvファイルでの出力について

    C言語初心者です。 プログラミングにおいて質問なのですが、csvファイルを読み込み、 そのデータを用いて計算し、csvファイルで出力するという問題なのですが、C言語においてcsvファイル形式で出力するにはどのような方法がありますか? 補足:ラベル行に全角文字を入力しないといけません。

  • matlabについて教えてください

    プログラミング初心者です。matlabについて教えてください いまmatlabのプログラム上に、x, y, z, という、それぞれ5行1列の変数があります。 これらをまとめて、linuxのテキストエディタ(geditなど)で読み込める1つのファイルを作りたいと思っています。 作りたいファイルは、1列目にx、2列目にy、3列目にz の値が並んでいるような感じです。 どうかやり方を教えて下さいますようお願いします。

  • マクロCSV出力

    Sheet1に入力されている値をCSVファイルに出力したいと思っております。 但し、特定のセルだけを取得して、1つのファイルに出力したいと思っています。 (1)D2~G2に入力されている値を取得 (2)E4~E10までと、E4~E10の最終列までの値を取得 (3)B11の値を取得 (4)A13~A列の最終行まで、A13~A列の最終行の最終列までの値を取得 (1)、(2)、(3)、(4)の値を取得して、1つのCSVファイルに出力するプログラムを作成したいと思っております。 (1)は1行目に出力 (2)は2行目~8行目に出力 (3)は9行目に出力 (4)は10行目以降に出力 出力の形式は ”TEST”,” ”,”SMP”のようにダブルクォーテーションで値を囲って出力したいと思っています。 値が入っていないセルは” ”,としたいと思っております。 サンプルを作成して頂けないでしょうか。

  • csv形式について

    Accessのデータをcsv形式で保存したいと思っています。OfficeLinksの機能を使ってExcelに出力して、それをcsv形式で保存し直してみました。ほぼうまくいったのですが、数字の先頭の0がなくなってしまいます。 これを回避する方法はないでしょうか? また、Accessのデータをcsv形式で保存する、もっとよい方法があれば教えてください。 よろしくお願いします。

  • C#でCSVファイルを逐一更新したい

    C#のプログラムで データをCSVファイルに蓄積するプログラムを作っています。 やり方としては最初にCSVファイルを指定し ボタンを押すたびに、データを追加するように作りました。 以下抜粋 //CSVファイル指定 csvfile = new System.IO.StreamWriter(csvPath, true, encording); ・ ・ ・ //データの書き込み csvfile.Write(data); csvfile.Write(","); ・ ・ ・ //CSVファイルクローズ csvfile.Close(); このプログラムを動作させた所 「csvfile.Close();」の時点で、実際にcsvにデータが書き込まれました。 データの書き込みのたびにCSVファイルが更新されるのが理想なのですが、 その方法としては逐一クローズするしか方法はないのでしょうか? 何らかの方法で逐一更新出来たり、 もしくは異なるCSVへの書き込み方法があれば、教えていただけないでしょうか?

専門家に質問してみよう