フォーラムへの返信
-
投稿者投稿
-
MZPlatformユーザー会キーマスター
ご質問への回答としては、正規表現で「(」は単なる文字ではなく意味を持つので、単なる文字として使用するために「\(」と書く必要があります。同様に「)」も「\)」と書く必要がありまして、これをエスケープと呼びます。正規表現で意味を持つ記号は他にもあるので、エラーが出たらエスケープをお試しください。
正規表現は難解なので、使いこなすのは簡単でありません。他にもご不明な点があればお問い合わせください。
MZPlatformユーザー会キーマスターMySQL自体の対応状況は下記リンク先をご覧ください。バージョンが限定されるようです。
https://www.mysql.com/jp/support/supportedplatforms/database.htmlもし接続できない問題が発生した場合は、下記掲示板の投稿が参考になるかもしれません。
https://ssl.monozukuri.org/mzplatform/forums/topic/mysqlがうまく接続されません/MZPlatformユーザー会キーマスター以前の回答にある通り、バイト読み込みモードでは符号ありと符号なしなどを指定することができますが、それらが混在したバイト列では対応が難しくなります。この読み込みモードは既存の機器から出力されるバイト列をなんとか読み込むために少しずつ機能拡張している状況ですので、あらゆる状況に対応できるわけではありません。
特に、出力されるバイト列をご自分で決められる状況であれば、MZ側が読みやすい出力をするようにしていただけますでしょうか。
MZPlatformユーザー会キーマスターお問い合わせいただきありがとうございます。
「新規コンポーネント作成手順.pdf」を読んでいただいたと思いますが、こちらで確認したところ内容が古くなってしまっていて、現状ではエラーが出ることを確認しました。たいへん申し訳ございませんでした。
お使いいただくJavaのSDKを7か8で実行していただくとエラーが出ないと思います。いろいろ書き換える必要があると思いますので恐縮ですが、ご不明な点はお手数ですが再度お問い合わせいただけますでしょうか。
MZPlatformユーザー会キーマスターガントチャートコンポーネントの機能としては、メソッド「休日の日付のリストを設定する(PFObjectList)PFObjectList」を使います。これは休日リスト全体の一括設定なので、現在の設定に追加する場合は、メソッド「休日の日付のリストを取得する()」で全体を取得し、リスト格納変数などを用いて日付を追加し、全体設定のメソッドを呼ぶ必要があります。
注意点としましては、ガントチャートの休日は年月日をすべて指定する必要があり、毎年の何月何日という指定ができません。前述の勤務時間計算のサンプルのままではうまくいかない可能性がありますので、ご注意ください。
もう少し具体的な処理について説明が必要であれば、具体的なご不明点を詳細にお書きください。
MZPlatformユーザー会キーマスターメソッド追加用のZIPファイルを添付します。ZIPファイルを展開すると、JARファイルがありますので、MZのインストールフォルダの下にあるjarsフォルダに配置してください。また、同じくetcフォルダにあるPlatformClassPath.iniをテキストエディタで開いて、先頭行にjars/mzpatch20200710.jarと記入して保存してください。
その後にビルダーを起動すると、円グラフに2つのメソッドが追加されます。特定の項目の割合を取る場合は「getPercentageAt(int)」、すべての割合のリストを取得する場合は「getPercentageList()」をご使用ください。ただし、これらのメソッドは一度割合の文字が描画された後でのみ機能します。
以上、お試しいただき、問題があればお知らせください。
添付ファイル:
MZPlatformユーザー会キーマスター実際の計算処理を確認したところ、少々複雑な計算をしていました。
基本は指定位置(初期値は小数点以下第一位)での四捨五入で比率を計算するのですが、そうすると比率の合計が100にならない場合があるため、合計を100にするような補正処理をしていました。
この補正処理を自前で計算するのは無理があるので、メソッドを追加しようと思います。追加メソッドの機能として、指定項目の比率を数値で取得するということでよろしいでしょうか。あと、リストでの取得も追加します。他にもご希望があればお知らせください。
MZPlatformユーザー会キーマスター残念ながら、円グラフコンポーネントから比率を取得するメソッドはありません。円グラフのテーブルデータから別途計算する必要があります。
円グラフは2列のデータなので、第1列目(0からのため)の列データのリストを使います。リストは基本統計処理コンポーネントで和を計算でき、リストの各位置の要素に100をかけて和で割るとパーセンテージを計算できます。
ご不明な点があれば再度お問い合わせください。
MZPlatformユーザー会キーマスター作成当初のシリアル通信コンポーネントは、文字列データを送受信することを前提に作られています。ReadModeは当初から存在し、intでデータ受信のモードを指定します。指定可能なモードは下記になります。3のバイト読み込みは後から追加されたものです。
0:初期値。受信が途切れたらそれまでに受信した文字列のまとまりを含むイベント発生。
1:一文字(シングルバイト)読み込むとイベント発生。
2:一行(改行文字で判断)読み込むとイベント発生。
3:バイトデータを読み込むとイベント発生。それぞれ数字を覚えなくても、シリアル通信コンポーネントのメソッドで取得することが可能です。
getReadModeDefault()
getReadModeSingleChar()
getReadModeLineText()
getReadModeByte()ReadMode=3のときに、バイト列にもいろいろあるため、ByteReadModeを追加しました。これはReadMode=3のときのみ有効な属性です。指定可能なモードは前述の通り(他にもいくつか存在します)です。こちらも対応するメソッドが存在します。自分でいろいろバイト列を操作するなら1のシングル符号なしで良いと思います。
前回送っていただいたArduino側のスケッチは、5バイト単位で送っていますね。MZアプリ側のシリアル通信コンポーネントがReadMode=3のByteReadMode=1に設定されていると、1バイト受信した段階でイベント発生します。先頭分はすでに受信が終わっているので、先頭分を入れた配列として受信することはできませんが、後ろにあと4バイト来ることがわかっているので、配列の長さ4としてまとめて受信しています。このとき、メソッドで後続の受信データを処理しているので、処理したデータについては、イベント発生しません。
なお、こちらで作成したアプリで4バイト目(最後尾)は使っていないので、3バイト分の配列として受信してもよいです。その場合、最後の1バイトについては、イベント発生します。この場合、サンプルではイベント発生して受信データがXでないと判定されて次のイベント発生に進むことになります。
MZPlatformユーザー会キーマスターいただいたサンプルを改変して、動作する状態にしたものを圧縮して添付します。
注意点として、シリアル通信コンポーネントはバイトデータを受信できますが、データ生成イベントのイベント内包データに入った時点でintに変換されてしまいます。先頭の’X’を受信した時点でデータ生成イベントの内包データが88で出力されるので、それを判定したらメソッドでバイト配列を取得します。その後の処理は添付のサンプルをご覧ください。
前回書いた内容も含まれますが、ご質問への回答は下記になります。
(1) ReadMode に入れる数値は、取込のバイト数ではなく、この場合は常に3です。
(2) ByteReadMode のシングルとダブルの違いは数値のサイズのことではなく、1バイトずつ読むか2バイトずつ読むかということで、この場合は常にシングル符号なしの1です。
(3) ByteReadMode のシングル符号なしとは、1バイトが示す内容が0-255ということです。添付のサンプルアプリの処理であれば、負の値や127より大きな値を受信した時も正常に読み込めると思います。もし何か問題があれば再度お知らせください。
よろしくお願いします。
添付ファイル:
-
投稿者投稿