データをcsvファイ​ルに書き込む際に書き​込み完了を検知したい

13 ビュー (過去 30 日間)
HIronori Kamachi
HIronori Kamachi 2019 年 8 月 7 日
コメント済み: Kazuya 2019 年 8 月 8 日
2つのファイルを同時に走らせています。
片方のファイル(AAA.m)の動作は、
1.trigger.csvファイルが存在することを確認する(1回目はスキップ)
2.データファイルの上から順にデータを読み出し、そのデータをquery.csvに書き出す
3.trigger.csvファイルを消去
これをループしています
もう片方のファイル(BBB.m)は
1.query.csvファイルが存在することを確認(exist)
2.query.csvファイルのデータをtrigger.csvファイルにコピー(copyfile)
3.データ(data = dlmread('query.csv'))を使って計算を実行
これをループしています。
この2つのファイルが並行して計算を実行しているのですが、たまにエラーが起きてストップします。
どうも、AAA.mからquery.csvファイルができて、データが書き込まれるよりも早いタイミングで
BBB.mがquery.csvファイルのデータをコピーに行くために、query.csv中にデータがなくて
止まってしまっているようです。
(ファイルの末尾に空の形式文字ベクトルを使用することはできません, のメッセージあり)
回避する手段として、AAA.mによるquery.csvのデータ書き込みが終了した時点でフラグを立てるか何かして、
そのフラグを見てBBB.mがquery.csvのデータを読みに行くようにしたいと考えていますが、
やり方がわかりません。
何か良い方法はないでしょうか。

採用された回答

Kazuya
Kazuya 2019 年 8 月 7 日
編集済み: Kazuya 2019 年 8 月 7 日
根本的な解決策ではないですが、例えば
flag = true;
while flag
try
%「BBB.mがquery.csvファイルのデータをコピーに行く」に、query.csv中にデータがなくてエラー
catch ME
flag = true;
end
flag = false;
end
と try/catch の構文で、エラーがでずに BBB.m が実行できるまで while ループで回すという方法はいかがでしょう。
それでも「エラーは出ないが、意図している結果にならない」=「データ書き込みが中途半端」である可能性も残りますね。書き込みが完了したときのデータ量が事前に把握できていれば、その情報を使って成否を判断するのはどうでしょう。
  2 件のコメント
HIronori Kamachi
HIronori Kamachi 2019 年 8 月 7 日
とりあえず、前者のwhileループとtry/catch構文で今のところうまくいきそうです。
try/catchは以前別件でここで教えていただいていた?と思うのですが、応用ができていないなあ。反省しきりです。
どうもありがとうございました。
Kazuya
Kazuya 2019 年 8 月 8 日
とんでもないです。うまくいきそうで良かったです。

サインインしてコメントする。

その他の回答 (0 件)

製品

Community Treasure Hunt

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

Start Hunting!