質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

2226閲覧

積算値の差分計算(積算値リセット時の処理)

y.tebi

総合スコア9

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/07/27 11:15

積算値をもらって差分計算をするのですが、1回目はOKで、2回目以降がNGとなってしまいます。

・積算値はcsvから前回値を取得する
・今回取得した積算値と前回の積算値から差分を算出する
・積算値をcsvに書き込む
・プログラムは、毎分動作します

通常の動きは問題ないのですが、積算値がリセットされる時があり、
その時の処理が思ったようになりません。

【通常】
csvから取得した前回値:5
今回のカウント値:10
差分:5
今回の積算値:15 → csvに書き込み

【積算値リセット時】
csvから取得した前回値:20
今回のカウント値:2(取得済)
差分:-18
今回の積算値:2(本当は20+2=22としたい) → csvに書き込み

【積算値リセット時 2回目の処理】
csvから取得した前回値:2
今回のカウント値:2(取得済で積算値変更ない場合)
差分:2
今回の積算値:4(本当は前回値22+0(差分なし)=22としたい) → csvに書き込み

リセット後の積算値が0であれば問題ないのですが、次の読み込みの際にすでにカウントされていると0ではなく2次の積算値となるので、マイナスになってしまいます。

リセットのタイミングが取得できればいいのですが、取る方法がないので、ソフトでなんとかしたいのですが。。。
条件が悪いのでしょうか?

以下、プログラムです。

前回値との差分=今回の積算値ー前回の積算値(csvから取得済)
lastdiff = int(plscnt) - int(lastplscnt_m)

差分がマイナスを条件
if lastdiff < 0:
lastdiff = 0
tot_cnt = lastplscnt_m + plscnt
else:
tot_cnt = int(lastplscnt_m) + int(lastdiff)

差分を算出→クラウドへ
plscnt_mindiff = int(tot_cnt) - int(lastplscnt_m)

※tot_cnt を今回の積算値としてcsvに書き込みます。

積算値がリセットされてしまったときは、前回の積算値にプラスしたものをcsvに書き込みたいです。
差分はマイナスではなく、前回値からリセット後の積算値を足したものにしたいです。

2回目以降の処理が、今回の積算値になってしまい、積算値は変わっていないのに足されています。

ご教示の程、どうぞよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

積算値をリセットしたときの(直前の)積算値を得るようにしないとどーしよーもないと思いますが。

いまいちはなしがみえませんが、
そのCSVというのはどうやって取得するんでしょうか
んで、CSVを書き込むとはファイルに書き込むんでしょうか?


【積算値リセット時】

csvから取得した前回値:20
今回のカウント値:2(取得済)
差分:-18
今回の積算値:2(本当は20+2=22としたい) → csvに書き込み

リセットが、積算値20のときに行われたという保証はあるんでしょうか。
それがあるというならそういう計算式で構わないと思いますが。

また、次回取得までの間にリセットが2回実行されるということはないんでしょうか

投稿2018/07/27 12:12

編集2018/07/27 12:18
y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y.tebi

2018/07/27 12:54

ご指摘、ありがとうございます。 説明不足で申し訳ございません。 CSVは、書き込み=CSVファイルに書き込み(追記) 取得は、csvファイルの一番最後の値を取得し、前回値としています。 また、積算値20の時は、実際に記載のとおりになりました。 2回目が意図しない動きで、解決策が見当たりません。 次回取得までにリセットが2回はありませんでした。
y_waiwai

2018/07/27 12:59

いや、ありませんじゃなく、あり得るのかありえないか、です。 > 積算値20の時は、実際に記載のとおりになりました。 たまたまその通りになった、というわけじゃなく、 その時のリセットは20のときに実行された、という確証はあるんでしょうか? これらがないと、積算値の差分計算、というのは全く無意味となりますが。
y.tebi

2018/07/27 13:11

度々申し訳ございません。 次回取得までにリセット2回はあり得ません。 また、何度もリセットの時には同じ動きになっていますので、確証はあります。
y_waiwai

2018/07/27 13:19

なら、その2回目以降の差分計算もそのとおり、ということになって問題はない、ということになりますね
y.tebi

2018/07/27 13:41

そうですか。 22ではなく、2になってしまっているのですが。。。 問題ないのですね。
y_waiwai

2018/07/27 13:54

そう確定している、といっているのはあなたです。 積算値が間違っているのか、あなたの言ってることが間違っているのか、どちらかなんでしょうけどねw
y.tebi

2018/07/27 14:07

残念です。 本当に困っているので他で聞いてみます。
y_waiwai

2018/07/27 14:10

困っているなら真摯に対応してください。 間違ったことや嘘を言われると、こちらはどーしよーもなくなります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問