- 12/02 Information!!
- 07/07 【グラブル】バハムートを最終上限解放
- 07/06 【グラブル】光有利の古戦場
- 06/14 【動物園】愛媛県立とべ動物園
- 05/31 【グラブル】開放したシスとエッセルの使用感
This is new entry
やっぱり実際に動かすと色々出てくるなぁという
どうもシュクレールです。
最近はユイちゃんのおかげでネタが切れにくいです。
といっても休日は基本書かない主義なので、
しばらくぶりのブログ更新になります。
バグの内容ですが、
マスターPC(つまり自分)に作業用エクセルが立ち上がってないときに、モニタ機能がコールされると、エラーを吐く。のは意図した動作なのですが、その過程でポップアップ警告を出すように組んでるせいで、そのポップアップに対して[OK]ボタンを5秒以内に押さないと、Limechatのスクリプトランニング制限である5秒に引っかかって、強制的にタイムアウトさせられて動作が止まる。というのがありました。
うん、ながくて何言ってるかは伝わらなそうだ。
友達の友達の友達から聞いた話なんだけど―。
みたいな。
ようは、Limechatにはもともとスクリプトの走る秒数に制限を設けていて、ユーザーコールを求めるようなプログラムを書くと、それに引っかかってしまう。ということです。
なので、このバグについてはポップアップをやめて、chに直接警告を吐き出し、何度もエラーが呼ばれないようにモニタ機能を自動でオフにする。という対応にしました。
つぎに、作業エクセルに書きこむときの城主チェックでエラー。
発生条件:2回目の書き込み以降で、前回城主チェックを掛けたときにこれが空欄のときに書きこもうとすると起こる。プログラムがタイムアウトして止まる。
つまり、8時丁度の一斉ログが取得できない。もしくは、スタンバイで8時前にモニタ機能をONにしておくと発生する。
この機能は2PC目のsavechatログファイルから城主を抜き出して、作業用エクセルに書き込むものなのですが、書きこむときに、城主が前回書き込み時から変わっていない場合には空欄のままにして書き込まないというようにしています。
つまり、
すべての砦の「現在の城主」と「ログファイルから取得した最新城主」これを比較して、同じなら書きこまないよ。っていうふうにしています。
この過程で、do~whileを使っています。
こんな感じに書いてます
こういうテーブルで、V1みたいにギルド情報がひとつもない場合に前回城主のサーチをするとエラーになります。
それはなぜかというと、 スクリプトの一部ですが
var j=0;
do{
変数①=エクセルの(j+2)行i列の値;
変数②=エクセルの(j+2)行1列の値;
j++;
}while(変数①=null && 変数② !=null);
動作としては、変数①にまず2行1列(V1の8:03:00)の城主(この場合はnull)を入れます。
次に、変数②にそのときの時間(8:03:00)をいれます。
でもってjカウンタを1加算。
ループ条件は
変数がnullでありしかも、変数②がnullじゃない間は回ってろです。
つまり、城主がブランクで時間が何かしら入っている間は回ってろです。
城主を見つけた時はそこでストップ
時間がnullになる。つまりもう最終行ですよってときにも止めます。
で、その城主と時刻の値を後々の比較処理に使います
iについては2のときV1、3のときV2ってかんじに事前に宣言して、このdo~whileを内包する形でfor文で使っています。
つまり、do~whileでV1の城主探し終わったらiを1加算して、つぎはV2についてdo~whileで城主を探す。・・・・・で、すべての砦について行うって感じです。
うん、すごくわかりにくい説明。
まぁ、おいといて。
この何が問題かって言うと、do~whileのループの抜け方です。
城主を見つけて抜けたときはいいのですが、V1みたいに城主がない状態で時間がnullで抜けた場合に 、
数行前ですが、「その城主と時刻の値を後々の比較処理に使います」と書きました。
そうです、nullがはいったまま後処理を行なっていたのです。
つまり、時刻が入っているとして行なっている処理にnullを適応するので、なんかおかしーよ。
と怒られていたわけです。
ので、時刻のnull抜けした場合には、1行戻ったところ(jカウンタから-1する)の値をとらないとおかしくなるってことでした。
まぁ、do~whileはforと違ってループチェックが一番最後だからこうなってしまったんですね・・・。
あれ、バグ直したつもりでいたけど、これ通常抜けに影響及ぼさないように書いてるよね・・・?
と私的メモを残しておわり。
どうもシュクレールです。
最近はユイちゃんのおかげでネタが切れにくいです。
といっても休日は基本書かない主義なので、
しばらくぶりのブログ更新になります。
バグの内容ですが、
マスターPC(つまり自分)に作業用エクセルが立ち上がってないときに、モニタ機能がコールされると、エラーを吐く。のは意図した動作なのですが、その過程でポップアップ警告を出すように組んでるせいで、そのポップアップに対して[OK]ボタンを5秒以内に押さないと、Limechatのスクリプトランニング制限である5秒に引っかかって、強制的にタイムアウトさせられて動作が止まる。というのがありました。
うん、ながくて何言ってるかは伝わらなそうだ。
友達の友達の友達から聞いた話なんだけど―。
みたいな。
ようは、Limechatにはもともとスクリプトの走る秒数に制限を設けていて、ユーザーコールを求めるようなプログラムを書くと、それに引っかかってしまう。ということです。
なので、このバグについてはポップアップをやめて、chに直接警告を吐き出し、何度もエラーが呼ばれないようにモニタ機能を自動でオフにする。という対応にしました。
つぎに、作業エクセルに書きこむときの城主チェックでエラー。
発生条件:2回目の書き込み以降で、前回城主チェックを掛けたときにこれが空欄のときに書きこもうとすると起こる。プログラムがタイムアウトして止まる。
つまり、8時丁度の一斉ログが取得できない。もしくは、スタンバイで8時前にモニタ機能をONにしておくと発生する。
この機能は2PC目のsavechatログファイルから城主を抜き出して、作業用エクセルに書き込むものなのですが、書きこむときに、城主が前回書き込み時から変わっていない場合には空欄のままにして書き込まないというようにしています。
つまり、
すべての砦の「現在の城主」と「ログファイルから取得した最新城主」これを比較して、同じなら書きこまないよ。っていうふうにしています。
この過程で、do~whileを使っています。
こんな感じに書いてます
time | V1 | V2 | V3 | V4 |
8:03:00 | ||||
8:02:00 | ||||
8:01:00 | ||||
8:00:00 | ギルドA | ギルドB | ギルドC |
こういうテーブルで、V1みたいにギルド情報がひとつもない場合に前回城主のサーチをするとエラーになります。
それはなぜかというと、 スクリプトの一部ですが
var j=0;
do{
変数①=エクセルの(j+2)行i列の値;
変数②=エクセルの(j+2)行1列の値;
j++;
}while(変数①=null && 変数② !=null);
動作としては、変数①にまず2行1列(V1の8:03:00)の城主(この場合はnull)を入れます。
次に、変数②にそのときの時間(8:03:00)をいれます。
でもってjカウンタを1加算。
ループ条件は
変数がnullでありしかも、変数②がnullじゃない間は回ってろです。
つまり、城主がブランクで時間が何かしら入っている間は回ってろです。
城主を見つけた時はそこでストップ
時間がnullになる。つまりもう最終行ですよってときにも止めます。
で、その城主と時刻の値を後々の比較処理に使います
iについては2のときV1、3のときV2ってかんじに事前に宣言して、このdo~whileを内包する形でfor文で使っています。
つまり、do~whileでV1の城主探し終わったらiを1加算して、つぎはV2についてdo~whileで城主を探す。・・・・・で、すべての砦について行うって感じです。
うん、すごくわかりにくい説明。
まぁ、おいといて。
この何が問題かって言うと、do~whileのループの抜け方です。
城主を見つけて抜けたときはいいのですが、V1みたいに城主がない状態で時間がnullで抜けた場合に 、
数行前ですが、「その城主と時刻の値を後々の比較処理に使います」と書きました。
そうです、nullがはいったまま後処理を行なっていたのです。
つまり、時刻が入っているとして行なっている処理にnullを適応するので、なんかおかしーよ。
と怒られていたわけです。
ので、時刻のnull抜けした場合には、1行戻ったところ(jカウンタから-1する)の値をとらないとおかしくなるってことでした。
まぁ、do~whileはforと違ってループチェックが一番最後だからこうなってしまったんですね・・・。
あれ、バグ直したつもりでいたけど、これ通常抜けに影響及ぼさないように書いてるよね・・・?
と私的メモを残しておわり。
PR
COMMENT
プロフィール
HN:
komyu/シュクレール/修造
性別:
非公開
自己紹介:
こうぶつはけものみみとのーびす(♀)とエリーン
主にROとTERAとラノベと雑多なkomyuの日記帳です。
主にROとTERAとラノベと雑多なkomyuの日記帳です。
TERAキャラ紹介
シュクレール(バサ)
syuzo(エレ)
サケマス(アチャ)
その他サブ
ウリエルキゥィス(スレLv54)
Vermillion(サラLv56)
パズドラ
157,318,362
フレンド募集中
枠なきゃ増やす
最終プレイ3日以上になったら消す
カレンダー
12 | 2025/01 | 02 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
最新記事
(12/02)
(07/07)
(07/06)
(06/14)
(05/31)
ブログ内検索
最新コメント