入退室システムを利用し、プログラムを作成したい

投稿者:ゆうき 投稿日:2018/11/06(Tue) 17:08:06 No.2275

いつもプロデルを使用させていただいております。
ありがとうございます。
質問があります。

https://wp.utopiat.net/2017/05/171/にあるソースを利用し、
入退室システム兼管理プログラムを作成中なのですが、以下の2点で現在困っております。

1.「フェリカポートで受け付けしてカードとする」という命令は、「もし〜」で始まる命令の中に入れられないか
現在こちらで作成しているプログラムは
「カードをリーダーの上に置き、その状態でパソコンで起動させているプログラムに表示させているボタンを押す」と
正しく挙動するようになっております。
これだけで十分使用できるのですが、「フェリカポートで受け付けしてカードとする」という命令が「もし〜」の前に
ないとどうしてもカードを読み取る判断がプログラム内でできず、カードがリーダーの上に無い状態で始動させてしまうと
その部分でエラーが出てしまいます。
大きく困る箇所ではないのですが、せめてこちらでエラーメッセージを設定して表示させて停止するようなことはできないのでしょうか。

2.csvファイル内にある特定の行だけを削除したい
入退室システムに、「現在室内の席の使用状況(着席状況ファイル)」をオンラインで表示させたいと考えております。
PCをサーバー化させて、プロデルで作成した着席状況ファイル(csv)を同期させようと考えているのですが、
ある方が離席して別の席を利用したという状況を考えた時に「着席状況ファイルから特定の行を検索して削除する」という命令が
なかなかこちらで思いつきません。
データ表としてcsvファイルから読み込み、加えることはできるのですが消すことができない、といった状況です。
着席状況ファイルには「座席番号」と「カードID」のみが1行ずつ書かれているといった状態です。カードIDから個人が分かるのでカードIDで検索して、その行を削除したいといった流れです。
こちらの力量不足かもしれませんが、この?Aがこちらで考えているがシステムの要でもありますので何かヘルプをいただけると幸いです。

具体的に書くことができていませんかもしれませんが、返信をいただければ大変うれしく思います。
よろしくお願いします。

Re: 入退室システムを利用し、プログラムを作成したい

投稿者: 投稿日:2018/11/06(Tue) 18:59:49 No.2276

 こんばんは。

 とりあえず、1.についてのみ。

 なにかエラーが発生する可能性がある命令の場合は、「例外監視」文に入れて実行するといいと思います。
 サンプルはこんな感じです。

--------------------
例外監視
フェリカポートで受け付けしてカードとする
発生した場合
「カードを認識できませんでした。」を「エラー」として警告アイコンで表示する
終了する
監視終わり
--------------------

 とりあえず、これで独自のエラーメッセージを表示させれるようになるかと思います。

 以上、参考になれば幸いです。

Re^2: 入退室システムを利用し、プログラムを作成したい

投稿者:ゆうき 投稿日:2018/11/06(Tue) 19:51:59 No.2277

ありがとうございます!大変助かります!
1については、解決しました!

2については、今も進展していない状態です。
行番号も分からない状態で、特定の項目を含む行を削除するのはなかなか難しいです...。

その後の状況

投稿者:ゆうき 投稿日:2018/11/09(Fri) 21:40:43 No.2279

その後の状況です。
他の方から助言をいただき、csvを利用するのではなくMySQLを利用してデータベースの追加削除として行うことにしました。
しかし、サンプルを利用しようとしましたがエラーが発生してしまい、Runさせることすらできません。

https://rdr.utopiat.net/docs/reference/data/db/dbsqlserver.htmの一番上のサンプルを利用しようと考えていたのですが、
FileNotFoundExceptionが出てきてしまいます。
エラー内容は以下の通りです。

「FileNotFoundException ファイルまたはアセンブリ 'MySql.Data, Version=6.6.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。

場所 Produire.Data.MySQL.MySQLデータベース..ctor()

[エラー番号2] [はじめ:2行目]」

「MySQLというMySQLデータベースを作る」という部分がエラー判定のようです。
「Produire.Data.MySQL.dll」はPluginフォルダに含まれており、特にファイルを変更した覚えもないのですが
何かこちらですべきことはあるのでしょうか?
それとも、私のMySQLに対する知識不足でしょうか?

Re: その後の状況

投稿者:田中充 投稿日:2018/11/10(Sat) 09:18:31 No.2280

リンク先は、SQLサーバのようです。
SQLサーバ・mySQLは、サーバ用のソフトをインストールする必要があります。
クライアント系のPC(Win10)にDBサーバを入れると面倒なので、SQLITEを使う方が良いです。

これだと、サーバ用ソフトを入れる必要がありません。

以上です。

Re^2: その後の状況

投稿者:ゆうき 投稿日:2018/11/10(Sat) 23:25:16 No.2281

返信、ありがとうございます!

SQLiteを利用したら上手く動作しました!
まだデータベースやイメージしている状態までプログラムはできていないのですが、何とかなりそうな気がします!

ありがとうございます!

VACUUM

投稿者:田中充 投稿日:2018/11/11(Sun) 08:31:20 No.2282

SQLITEの場合、更新し続けるとファイルが肥大化するので、たまにVACUUM
すると良いです。

例)
  SQL文は、「VACUUM」
  結果は、[SQLiteでSQL文を実行したもの]

以上です。

Re: VACUUM

投稿者:ゆうき 投稿日:2018/11/12(Mon) 02:34:24 No.2283

ヘルプ、大変助かります!ありがとうございます!
システム面も完成させることができ、うまくいっています!

しかし外見上の問題ですが、
「こんにちは、[名前]さん。[改行]お好きな座席をお選びください。」のように書式付きテキストの中に表示させようと設定すると
「こんにちは、{{田中}}さん。
お好きな座席をお選びください。」
のように、代入変数の部分にカギカッコがついてしまいます。こちらも悩んでいます...。

Re^2: VACUUM

投稿者:とおりすがりや 投稿日:2018/11/12(Mon) 04:14:01 No.2284

まだまだ始めたばかりの初心者ですから的外れかもしれませんが

{{田中}}は配列に配列を加えたものではありませんか?

以下のようにすると同じ現象が起きますので

あいさつは、 {}
あいさつに「こんにちは」を追加
あいさつ2は、 {}
あいさつ2にあいさつを追加
あいさつ2を表示

私がたまにするのは、正規表現で取り出した時に配列になっていることを
忘れていて処理しようとして失敗することを度々起こしましたのでコメントしてみました。

正規表現で取り出した文章は 変数名(1) のように指定すれば{}無しにできますが……違っていたらすみません。


> ヘルプ、大変助かります!ありがとうございます!
> システム面も完成させることができ、うまくいっています!
>
> しかし外見上の問題ですが、
> 「こんにちは、[名前]さん。[改行]お好きな座席をお選びください。」のように書式付きテキストの中に表示させようと設定すると
> 「こんにちは、{{田中}}さん。
> お好きな座席をお選びください。」
> のように、代入変数の部分にカギカッコがついてしまいます。こちらも悩んでいます...。

Re^3: VACUUM

投稿者:田中充 投稿日:2018/11/12(Mon) 06:25:44 No.2285

通りすがりやさんが書かれているように変数が配列になっているからだと思います。
SQLITEの応答は、必ず2次元配列になってます。
※行×列
調査ウィンドウを表示すると変数の型が表示されますので、それを見てみてください。

例)
SQL文は、「select 名前 from XXX where ID=[ID]」
結果は、[SQLiteからSQL文を取得したもの]
結果(1)(1)を報告する。

以上です。

配列について

投稿者:ゆうき 投稿日:2018/11/13(Tue) 11:16:29 No.2289

返信、ありがとうございます!
結果(1)(1)のように記述したらきれいに表示されました!

ここまできて大変申し訳ないのですが、機能を一つ付け忘れている部分がありましてそちらも苦戦しています...。
SQLiteのデータベースから、着席状況を取り出してその中にある座席番号をすべて「一つずつ」抽出するにはどのように考えればよいでしょうか。

「着席一覧表は、[SQLiteから「SELECT 座席番号 FROM 着席状況」を取得したもの]
着席一覧表を報告する」

のように記述すると、調査ウィンドウには
「{{座席2},{座席5}}」
のように表示されます。
{ {座席2} 、 {座席5} }のような考え方になっているのはわかるのですが、繰り返し文を用いてそこにある座席のボタンをクリック不可にしようと記述してもいまいち考え方がわからず、うまくいきません。

何度も質問してしまい申し訳ありませんが、返信をいただけると幸いです。

Re: 配列について

投稿者:田中充 投稿日:2018/11/14(Wed) 09:04:13 No.2290

田中です。
2次元配列なので、以下のような繰り返しだと思います。

着席一覧表を要素へそれぞれ繰り返す
    要素(1)を報告する
繰り返し終わり

※ここに詳しく書いてあります。
https://rdr.utopiat.net/docs/onepage/syntax.html#%E9%85%8D%E5%88%97%E3%81%AE%E5%86%85%E5%AE%B9%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%A6%E7%B9%B0%E3%82%8A%E8%BF%94%E3%81%99

以上です。

プロデルのメモリの解放について

投稿者:ゆうき 投稿日:2018/11/16(Fri) 08:06:09 No.2292

ありがとうございます!
仮完成ですが、イメージ通りのソフトを作ることができました!
質問に何度も答えてもらい、大変助かりました!!

最後に一つだけお聞きしたいのですが、プロデルのメモリの解放はどのように行うのでしょうか?
実際に入退室システムを利用したいと考えているのですが、1台のPCを2画面利用して別モニターでシステムを表示させるのですが、そのまま長時間稼働させる予定なのでメモリの解放が気になります。
テストランさせた段階でいきなり落ちることはなかったのですが、少々不安です。

何度も質問してしまい、本当に申し訳ありませんが返信をもらえると幸いです。

Re: プロデルのメモリの解放について

投稿者:田中充 投稿日:2018/11/16(Fri) 13:29:31 No.2293

メモリ解放は、どうなんでしょうね?

プロクラムでメモリ解放しても、どこか(OS、言語、ライブラリ、制作ソフト)がバグっていれば、メモリーリークしますので、連続稼働など考えずに1日に1回プログラムを再起動すれば良いのでは無いでしょうか?

プロデルは「再起動」命令を実装しているので簡単にできます。
私は、下記コードで1日に一回再起動しています。


起動時の処理
      再起動時間は、「3:00」 ’ここは定義ファイルから読み込むようにすると良い
      再起動時間文字は、今日の日付 &「 」& 再起動時間
      再起動時間は、再起動時間文字を日時形式化
      もし 再起動時間<起動時間 なら
        再起動時間に1日足す
      もし終わり

1分タイマー処理
    もし 再起動時間<今日 なら
        プログラムを再起動する
もし終わり

以上です。

Re^2: プロデルのメモリの解放について

投稿者:ゆうき 投稿日:2018/11/17(Sat) 13:20:15 No.2295

返信、ありがとうございます!
1日稼働させて電源を落とす予定なので、それならば大丈夫だと思います!
プロデルでSQLiteを活用したプログラムの作成は終了しました!

色々と、ありがとうございました!

▲ページの先頭へ

- WebForum -