今、gnakoを使って少し大きめのアプリ書いてるんですが…。
gnakoの問題点が色々分かって、やっぱりGUIのエディタは
別のモノを使ったほうがいいんじゃないかと。通信DLLは
大体出来てるので、この辺り片付けたら、次はWinAPIを
もうちょっとダイレクトに触れるDLLなりexeなり作ろうかなあ。
さて、今回は「少し大きめのアプリ」でも使ってるカレンダー
機能のお話し。なでしこのくみこみ関数使ってある程度は
できるんですが、GUI用に使うならこれぐらいは欲しいかなあ
と言う部分を補完。
------ここから------
■GRP年月日
・{整数}年
・{整数}月
・{整数}日数
・日
・日数設定~
日数=月日数判断(年、月)
・曜日設定~
日数回
年月日=「{年}」&「/」&「{月}」&「/」&「{回数}」
日\回数=年月日の曜日
●二月日数判断(Yの)
もしYを4で割った余り=0ならば
もしYを100で割った余り=0ならば
もしYを400で割った余り=0ならば
日数=29
違えば
日数=28
違えば
日数=29
違えば
日数=28
日数で戻る
●月日数判断(Y、M)
Mで条件分岐
1ならば
日数=31
2ならば
日数=Yの二月日数判断
3ならば
日数=31
4ならば
日数=30
5ならば
日数=31
6ならば
日数=30
7ならば
日数=31
8ならば
日数=31
9ならば
日数=30
10ならば
日数=31
11ならば
日数=30
12ならば
日数=31
違えば
日数=0
日数で戻る
------ここまで------
こんなもんでしょうか。「■GRP年月日」がカレンダー情報を
保持していて、要素「日」は配列です。「年」と「月」を設定して
「日数設定」メソッドと、「曜日設定」メソッドを呼べば、「日数」
にその月が何日あるかと、「日」にそれぞれの日が何曜日か
を代入します。「日」は配列の添え字(0~)が日(1~)に対応
してます。
アルゴリズム的にはC言語とそんなに変わらない感じ。なでしこは
グループ昨日を使いこなしていけばそこそこ複雑なことも出きる
ので、「なでしこでアルゴリズム」みたいな本があれば面白いのに
なあ。
2013年10月22日火曜日
2013年10月6日日曜日
【なでしこ】グループをシリアライズしてみる
ああ、なんか時間取れない…と思ってるウチにかなり時間が
開いてしまった( ̄ω ̄;。
DLLの話はちょっとおいておいて、なでしこのグループの話。
なでしこのグループを作成して、それをいったんファイルに保存
しておき、今度ファイルからよんでまたグループに値を代入する
と言うお話。なでしこは中間コードを生成するわけではないので
ホントにシリアライズは出来ないんだけど、まあイベントとか
関数とか含まないグループならファイルに保存するぐらいなら
可能かな。
ってことでまずはグループを作ってみます。
------ここから------
■GRPプロジェクト
・{文字列}GRP名{=「GRPプロジェクト」}
・{整数}ノード{=0}
・{文字列}名前
・{文字列}開始日
・{文字列}終了日
・{整数}次ノード{=1}
------ここまで------
実はちょっと仕掛けが必要で、グループ要素の先頭に
文字列で「GRPプロジェクト」と、グループ名(GRP名)を
入れておきます。あとは文字列とか整数とかで値を列挙。
#あるプログラム用なので、要素名とかはあまり気に
しないでください(^^;。
これをファイルに保存しておきたい分けですが、折角
だからXML風に保存します。
------ここから------
<GRPプロジェクト>
<コード>0</コード>
<名前>IIU向け新PFの開発</名前>
<開始日>2013/10/04</開始日>
<終了日></終了日>
<関係者コード>100</関係者コード>
<管理項目コード>200</管理項目コード>
<フェーズコード>300</フェーズコード>
</GRPプロジェクト>
------ここまで------
グループ名が<GRPプロジェクト>~</GRPプロジェクト>の
タグになって、あとは要素がそれぞれのタグとなります。
これを実現するのに、下記のコードを書きました。
------ここから------
●XML化(GRPを)
GRP名=GRPのグループ判定
もしGRP名=空ならば
#何もしない
違えば
メンバーズはGRPのメンバ詳細列挙
メンバ数はメンバーズの配列要素数
メンバ数回
メンバーズ\(回数-1)の「(」から「)」まで範囲切り取る
タグペアはメンバーズ\(回数-1)を「 = 」で区切る
もし(回数-1)=0ならば
グループ終了タグ=「</」&「{タグペア\1}」&「>」
XML結果=「<」&「{タグペア\1}」&「>」&改行
違えば
アイテム開始タグ=「 」&「<」&「{タグペア\0}」&「>」
アイテム終了タグ=「</」&「{タグペア\0}」&「>」
XML結果=XML結果&アイテム開始タグ&「{タグペア\1}」&アイテム終了タグ&改行
XML結果=XML結果&グループ終了タグ&改行&改行
XML結果で戻る
------ここまで------
開いてしまった( ̄ω ̄;。
DLLの話はちょっとおいておいて、なでしこのグループの話。
なでしこのグループを作成して、それをいったんファイルに保存
しておき、今度ファイルからよんでまたグループに値を代入する
と言うお話。なでしこは中間コードを生成するわけではないので
ホントにシリアライズは出来ないんだけど、まあイベントとか
関数とか含まないグループならファイルに保存するぐらいなら
可能かな。
ってことでまずはグループを作ってみます。
------ここから------
■GRPプロジェクト
・{文字列}GRP名{=「GRPプロジェクト」}
・{整数}ノード{=0}
・{文字列}名前
・{文字列}開始日
・{文字列}終了日
・{整数}次ノード{=1}
実はちょっと仕掛けが必要で、グループ要素の先頭に
文字列で「GRPプロジェクト」と、グループ名(GRP名)を
入れておきます。あとは文字列とか整数とかで値を列挙。
#あるプログラム用なので、要素名とかはあまり気に
しないでください(^^;。
これをファイルに保存しておきたい分けですが、折角
だからXML風に保存します。
------ここから------
<GRPプロジェクト>
<コード>0</コード>
<名前>IIU向け新PFの開発</名前>
<開始日>2013/10/04</開始日>
<終了日></終了日>
<関係者コード>100</関係者コード>
<管理項目コード>200</管理項目コード>
<フェーズコード>300</フェーズコード>
</GRPプロジェクト>
グループ名が<GRPプロジェクト>~</GRPプロジェクト>の
タグになって、あとは要素がそれぞれのタグとなります。
これを実現するのに、下記のコードを書きました。
------ここから------
●XML化(GRPを)
GRP名=GRPのグループ判定
もしGRP名=空ならば
#何もしない
違えば
メンバーズはGRPのメンバ詳細列挙
メンバ数はメンバーズの配列要素数
メンバ数回
メンバーズ\(回数-1)の「(」から「)」まで範囲切り取る
タグペアはメンバーズ\(回数-1)を「 = 」で区切る
もし(回数-1)=0ならば
グループ終了タグ=「</」&「{タグペア\1}」&「>」
XML結果=「<」&「{タグペア\1}」&「>」&改行
違えば
アイテム開始タグ=「 」&「<」&「{タグペア\0}」&「>」
アイテム終了タグ=「</」&「{タグペア\0}」&「>」
XML結果=XML結果&アイテム開始タグ&「{タグペア\1}」&アイテム終了タグ&改行
XML結果=XML結果&グループ終了タグ&改行&改行
XML結果で戻る
「グループ判定」「メンバ詳細列挙」というのはなでしこの命令です。
一番最初なら大くくりのタグを作って、2番目以降は1行に開始
タグと終了タグを入れてます。
ファイルから呼んでグループに戻すのは…省略(^^;。比較的簡単に
出来ますよ。最初のタグ読んだときにグループを生成し、それ以降は
生成したグループに値(<xxxx>~</xxxx>の間にある文字列)を入れる
だけ。
なでしこの変数はファジーに出来ていて、
{整数}X
と宣言したところにたとえば文字列で「1」と入れてあげても、以降
ちゃんと整数として扱ってくれます(2byte系の文字列「1」ではダメ
でした。半角数字なら 整数として代入してくれるようです)。なので
ファイルに文字列として書き出していても、次にそれを読み込んで
変数に代入すれば整数として扱ってくれるんですね~♪
登録:
投稿 (Atom)