HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0610
KLnotepad バッファ内のデータ削除3解決


KL

リンク

2008/6/10(Tue) 09:26:20|NO.16633

質問です。

現在、USBIOから入ってくるパルスデータを読み込み、notepadにて日付・パルススピード・座標
の3点を1区間としこれを24時間動きっぱなしで記録し続け、上記で取れたデータを元にグラフに
表示と言うシステムを作っているのですが、データの取得→グラフ作成までは上手くいったので
すが、24時間稼動と言う点で問題が出て悩んでいます。2点質問させて頂きます。

①データを日付ごとに記録し、日付が変わるタイミングでバッファ内を初期化し、その日の分
 だけのデータとして保存したいと思っているのですが、現在の状態ですと日付が変わり、違う
 日付としてファイルは保存されはするのですが、記録しはじめた時からのデータで記録されて
 しまいます。バッファ内のデータを一旦削除と言う方法があればお願いします。

②24時間稼動と上記で書きましたが、任意のタイミングでソフトを止め、再起動した場合にも
 上書きさせる方法。以下の場合noteaddで追加モードにしてるのですが、バッファ内が初期化
 されるためか、そのソフトを起動した時点からのデータで記録を始めてしまいます。元のデータ
 にソフトを再起動しても追加で記録させる方法があればお願いします。
 (こちらはできたらでいいです、①が悩みの根本です。)


month=gettime(1) day=gettime(3) time=gettime(4) minute=gettime(5) //現時刻を取得 /* inputUsbIo 0,0 //記入していませんが、ここでパルスデータ取得 //get PORT0 data pdata = stat pdata1 = stat */ notesel buff1 noteadd ""+time+"時"+minute+"分",,0    //時刻を記録 //noteadd ""+pdata1+"",,0          //パルスデータを記録 //noteadd ""+double(time*60+minute)/double(2.25)+"",,0 //グラフ用の座標データを記録 notesave "filename"+month+"月"+day+"日.txt" //その日分のデータとして記録
上記のソースはパルスデータの取得部分などかなり簡略化して書いていますが、
1分間隔で上記をLOOPさせています。
notedelなどで削除できないかと思い、やってみたのですが、記録量が多く断念
noteunselなども試してみたのですが、使い方がよくわからず悩み中です。

長々と申し訳あしませんがわかる方いましたら、よろしくお願い致します。



この記事に返信する


SYAM

リンク

2008/6/10(Tue) 09:39:19|NO.16635


buff1=""
で消えませんかネ。

また終了時は onexitで終了を検知してその時のデータをファイルに書き出しておいて、次の起動の時にもしそれがあれば読み出してファイルを消せばよいです。



ANTARES

リンク

2008/6/10(Tue) 22:06:52|NO.16644

 スクリプトを見ると、毎回保存しているように見えます。
その通りなら、バッファをクリアすることを考えるより、
今回のデータのみ追加保存する方が簡単で効率的でしょう。

【修正前】
notesel buff1
noteadd ""+time+"時"+minute+"分",,0    //時刻を記録
//noteadd ""+pdata1+"",,0          //パルスデータを記録
//noteadd ""+double(time*60+minute)/double(2.25)+"",,0 //グラフ用の座標データを記録
notesave "filename"+month+"月"+day+"日.txt" //その日分のデータとして記録

【修正後】
buff1=""+time+"時"+minute+"分\n" //時刻を記録
//buff1+=""+pdata1+"\n" //パルスデータを記録
//buff1+=""+double(time*60+minute)/double(2.25)+"\n" //グラフ用の座標データを記録
filename="filename"+month+"月"+day+"日.txt"
len=strlen(buff1)
exist filename: filepointer=strsize
if filepointer<0 {
bsave filename,buff1,len
} else {
bsave filename,buff1,len,filepointer
}

 なお、month=gettime(1)を月末に取得し、day=gettime(3)を月初に
取得してしまう可能性があります。
例えば、5月31日にgettime(1)を呼び出し、その直後に日付が変わって
6月1日にgettime(3)を呼び出してしまう可能性があります。
これを防ぐには、例えば次のようにします。

repeat
month=gettime(1)
day=gettime(3)
if gettime(1)==month: break
loop

 なお、gettime(3)とgettime(4)、gettime(4)とgettime(5)にも
似たような問題がありますが、示された情報から判断する限り、
致命的な問題にはならないでしょう。
もし、問題になるようなら、同じような対策をとる必要があります。



KL

リンク

2008/6/12(Thu) 09:08:38|NO.16667

>>SYAMさん
>>ANTARESさん

的確なアドバイスありがとうございました。2日間テストしたところ、
正常に動作するように出来ました。
notepadの操作は今回が初めてだったので、勉強になりました。

ありがとうございました。



ONION software Copyright 1997-2025(c) All rights reserved.