ファイル読み込み/書き込み完了検出について
6 views (last 30 days)
Show older comments
MATLAB2017bを2019bにバージョンアップしたのを機に、dlmreadやdlmwriteをreadmatrixやwritematrixに変更して、質問の解答にあったようなtry/catchを使わなくてもエラーが出なかったので、勝手に、readmatrixやwritematrixはファイル読み込み/書き込みの終了を検出しているのかと考えていたのですが、使用しているファイルのサイズが変わったあとから、ファイルを読み込んだ配列が[ ]なのでエラーが出て止まる(実際には配列が[ ] なので配列を読み込む際に”位置 1 のインデックスが配列範囲を超えています。”のエラーが出る)ことが頻発するようになりました。
ファイルの存在を確認した後にreadmatrixでファイル読み込みを行ったり、writematrixでファイルの書き込みを行っているのですが、
一応、事前に読み込む配列の大きさはわかっているので、
for wts=1:10000
[qcr,qcc]=size(querycsv);
if qcc<qn
pause(0.01);
else
break
end
end
querycsv(query.csvをreadmatrixで読み込んだ配列)の列数はわかっているので、上記のような待ちを入れてみたのですが、やはりquerycsvが[ ] の時があり、結局”位置 1 のインデックスが配列範囲を超えています。”のエラーが出ます。
①readmatrixやwritematrixはファイル読み込み/書き込みの終了を検出しているのか
②2つのアプリケーション間でcsvファイルでのデータ受け渡しでなく、書き込み速度の点で速いと考えられる別のファイルによるデータ受け渡しは可能か、また、その際、ファイル読み込み/書き込みの終了確認は可能か
以上についてご教示いただきたく。
0 Comments
Answers (1)
Etsuo Maeda
on 13 Apr 2020
回答が付いてないないようなので。
statusの戻り値が無いので、どちらの関数も書き込み可不可の判定はかかっていないはずです。
fopenなど低水準関数をつかってみてはどうでしょうか。
以上、ご参考まで
3 Comments
Etsuo Maeda
on 13 Apr 2020
fopenでファイルが開けなければ、-1が返ります。開ければ3以上のfile idが返ります。
実際に、なにをどう動かしているのかは分かりかねますが、MATLAB上で動作させているのであれば、無理にファイルに書き出す必要は無く、Workspaceで値をやりとりすれば良いかと思います。
例えば、assignin関数を使えば、関数の中からbase workspaceに変数を置くことが可能です。
以上、ご参考まで
See Also
Categories
Find more on スプレッドシート in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!