ファイル読み込み/書き込み完了検出について

22 次查看(过去 30 天)
HIronori Kamachi
HIronori Kamachi 2020-4-8
以前、ここで質問したのですが、同様なことが再発しているのでご教示ください。
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ファイルでのデータ受け渡しでなく、書き込み速度の点で速いと考えられる別のファイルによるデータ受け渡しは可能か、また、その際、ファイル読み込み/書き込みの終了確認は可能か
以上についてご教示いただきたく。

回答(1 个)

Etsuo Maeda
Etsuo Maeda 2020-4-13
回答が付いてないないようなので。
statusの戻り値が無いので、どちらの関数も書き込み可不可の判定はかかっていないはずです。
fopenなど低水準関数をつかってみてはどうでしょうか。
以上、ご参考まで
  3 个评论
Etsuo Maeda
Etsuo Maeda 2020-4-13
fopenでファイルが開けなければ、-1が返ります。開ければ3以上のfile idが返ります。
実際に、なにをどう動かしているのかは分かりかねますが、MATLAB上で動作させているのであれば、無理にファイルに書き出す必要は無く、Workspaceで値をやりとりすれば良いかと思います。
例えば、assignin関数を使えば、関数の中からbase workspaceに変数を置くことが可能です。
以上、ご参考まで
HIronori Kamachi
HIronori Kamachi 2020-4-13
回答いただきありがとうございます。
1分毎にプラントから各種データを読み込んできて別のプログラムからdata.csvが生成され、そのファイルが生成されるとそれを読み込んで処理して結果を吐き出すプログラム(pr2)を開発しております。
実プラントでは1分毎の処理なのですが、テストの際にはなるべく速く結果を吐き出させたいので、収集した入力データを時系列で並べて(datalog.csv)、それを1行ずつ読んでdata.csvを吐き出させるプログラム(pr1)を作って連携させて短時間で時系列の処理データを吐き出させるようにしています。
恐らく、pr1がdata.csvの書き込みしている最中にpr2がデータを読みに行って不十分なデータを読み込んでくるのでエラーが出ると考えています。
そのため、いろいろ試行錯誤しております。
実機では、.matファイルが吐き出されているわけでないので本来はやりたくない(プログラムが実機用と評価用の2種類になるので)のですが、今のところは仕方がないかなと考えています。
fopenを使った手を考えてみます。
ありがとうございました。

请先登录,再进行评论。

产品


版本

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!