みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
Win10/Fmp16 です。
「国民の祝日」に合致する「日付レコード」にフラグを立てる方法が
わかりません。
毎月の最終日の前日に翌月の日付レコードを作成(2018年8月は31レコード)し
その翌月だけを検索表示し
内閣府からダウンロードした「国民の祝日」(2018年は20レコード)を併記しています。
別に「フラグ」フィールドを作り
Case (
PatternCount ( List (当月日付) ; List (祝日日付))
; "●" ; "" )
としていますが反応がありません。
ご教授をお願いします。
Offline
https://fm-aid.com/bbs2/viewtopic.php?id=8100
https://fm-aid.com/bbs2/viewtopic.php?pid=47879#p47879
が参考になるでしょう。
全体がわかりませんが、
Case (
PatternCount ( 日付 ; List (祝日日付))
; "●" ; "" )
にするべきでは。
Offline
Shinさま
早速にありがとうございます。
Case (
PatternCount ( 日付 ; List (祝日日付))
; "●" ; "" )
変化がありません。
また、教えて頂いたHiroさまのファイルは
どのように使ったら良いのか理解できません。
Offline
Case (
PatternCount ( List ( 祝日日付 ) ; 日付 )
; "●" ; "" )
ですね、
意味をよく考えてください。
Offline
テキスト関数のPatternCountで日付を計算すると誤動作の確率があるのでお勧めできません。
Offline
ウゥ、すみません
Offline
テキスト関数のPatternCountで日付を計算すると誤動作の確率があるのでお勧めできません。
PatternCountはテキストが良いのかと思い
日付を Substitute (日付 ; "/" ; "" )でテキストに変換し
祝日日付も同じようテキストにしてみましたが変化がありません。
良い方法をお願いします。
Offline
祝日を別テーブルにしておきます。
カレンダーの日付とリレーションを張っておき、レコードが参照できれば祝日とすればいいです。
テキストで扱う場合には、月日が2桁になるようなフォーマットに統一できれば、誤動作は回避できます。
Offline
祝日を別テーブルにしておきます。
カレンダーの日付とリレーションを張っておき、レコードが参照できれば祝日とすればいいです。テキストで扱う場合には、月日が2桁になるようなフォーマットに統一できれば、誤動作は回避できます。
Shinさま。
ありがとうございます。
>テキストで扱う場合には、月日が2桁になるようなフォーマットに統一できれば、誤動作は回避できます。
未熟で"月日が2桁"の方法が解かりません。
Offline
FMの日付入力では以下の2通りが有効です。
[2018/10/01] と [2018/10/1] で、 日付 としては全く等価、同一日ですが、
"2018/10/01" と "2018/10/1" は 文字列 としては等価ではありません。
また、"2018/10/11" と "2018/10/1" も もちろん 等価でありませんよネ。
ところが、PatternCount関数で日付データをテキスト計算すると明らかに間違った結果を得ることになります。
・PatternCount("2018/10/01" ; "2018/10/1") → 0 含まれていない、同日はない
・PatternCount("2018/10/11" ; "2018/10/1") → 1 含まれている、同日がある
この明らかなミスを避けるには、
・日付を定形フォーマット書式(yyyy/mm/dd=2018/01/01)に統一化して、テキスト計算する方法
・日付を日付番号数値(西暦後の経過日数、GetAsNumber(日付[2018/1/1]=736695)に統合して、数値計算する方法
・日付照合のリレーションで関連レコードをカウント計算する方法
などをとるが一般的です。
Offline
Hiroさま。
ありがとうございます。
すべてテキストに変換して実行してみました。
当月数字=
RomanZenkaku ( GetAsNumber ( 日付 ))
祝日数字=
RomanZenkaku ( GetAsNumber ( 日付 ))
>>>> と設定し
フラグ=
Case (
PatternCount (List ( 祝日数字 ) ; List ( 当月数字 ) )
; "●" ; "" )
としましたが、やはり応答がありません。
Offline
祝日のレコードは、どの様に保存していますか?
Offline
それと、
リレーションの説明も
Offline
ありがとうございます。
本ファイルの前の習作ファイルをアップしますので
よろしくお願いします。
Offline
習作拝見しましたが、設定ロジックがほぼダメ、全滅です。
日付同士の照合判定フラグが目的だから、単にリレーション照合だけで十分です。
全くのサラから説明すると、
祝日テーブルを作り、
日付フィールド「祝日」を設定し、
それへ祝日の日付データを入力保存しておく。
暦テーブル(旧名:1日1レコード)を作り、
日付フィールド「日付」を設定し、
それへ暦の日付データを入力保存する。
「祝日テーブル::祝日」と「暦テーブル::日付」との間でリレーションを設定する。
暦テーブルに計算フィールド「フラグ」を作り、下式から希望する方を設定する。
・自己日付が祝日なら「"●"」を表示する場合の式は、
Choose(IsEmpty(祝日テーブル::祝日); "●")
あるいは、
・自己日付が祝日かつ日曜日なら「"■"」を、祝日かつ日曜以外なら「"●"」を、表示する場合の式は、
Choose((IsEmpty(祝日テーブル::祝日)=0) + (DayOfWeek(日付)=1)*2; ""; "●"; ""; "■")
これだけで完了です。
その他のフィールドは、本命題の解決に限っては、一切不要です。
Last edited by Hiro (2018-07-01 15:02:05)
Offline
Hiroさん すごいです。
でも、私には難解で理解するのに時間がかかりそうです。
ありがとうございました。
Offline
Hiroさま。
昨日はありがとうございました。
お陰様で日曜日にもフラグを立てることができました。
・自己日付が祝日なら「"■"」と、すべての日曜日を「"●"」表示する場合の式は、
Choose((IsEmpty(祝日テーブル::祝日)=0) + (DayOfWeek(日付)=1)*3; "";"■"; ""; "●"; ""; "●")
返す返す感謝を申し上げます。
Offline
日曜日を「"●"」、祝日なら「"■"」と表示する場合の式は、
Choose ( IsEmpty ( 祝日::祝日日付 ) * DayOfWeek ( 日付 ) ; "■" ; "●" )
simpleでしょう。
日曜日の祝日は、祝日が優先されます。
Offline
>#17 『・自己日付が祝日なら「"■"」と、すべての日曜日を「"●"」表示する場合の式は、』
この条件なら、Choose() より、Case() がより直観的で分かり易いでしょう。
説明からは、日曜日の「"●"」を優先したいようなので、
Case関数は上位から順に条件判断するから、その場合の式は、
Case(
DayOfWeek(日付)=1; "●";
IsEmpty(祝日テーブル::祝日)=0; "■"
)
Last edited by Hiro (2018-07-02 12:00:56)
Offline
ありがとうございます。
お二人の先生には頭が下がるばかりです。
Offline
Pages: 1
[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 566.14 KiB (Peak: 587.05 KiB) ]