HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

■14424 / 親記事)  変数値の取得方法について
  
□投稿者/ ジェダイの桐 -(2024/06/12(Wed) 09:39:57)
    2024/06/12(Wed) 12:37:48 編集(投稿者)

    桐10s Windows10を使用しています。


    万年カレンダ―に、会社の休日を表示させたいと思い
    休日.TBX と カレンダー.WFX と カレンダー.kexを作成しました。


    やりたい事自体は実現出来たのですが、分からない事があります。


    prc休日表示 で 休日.TBXにある日付を &mDate[1] <= [] <= &mDate[42] の範囲絞り込んでいます。


    #総件数でレコード件数を求め、&recordCountに代入する。
    &recordCountの値が 42 の時、休日.TBXの先頭行から最終行まで
    項目名 休日 の値を &m休日 に代入する。


    このやり方だと、レコード数が 42 ないと思い通りになりません。


    &mDate[1] <= [] <= &mDate[42] の範囲を、項目名 休日が定義済のみ絞り込み

    &mDate[&i] と 項目名 日付 の値が同じ時、
    &mDate[&i] と同じ要素数の &m休日[&i] に 項目名 休日 を代入する


    このようなやり方は有りますでしょうか?
    分かる方、お時間のある時教えて頂ければ幸いです。



    名札 メイン
     変数宣言 局所, 日時 { &mReferenceDate, &mFirstDayOfTheMonth, &mDate[42] }
     変数宣言 局所, 整数 { &mYear, &mMonth, &mFirstWeekOfTheMonth, &mDay[42], &m元号 }
     変数宣言 局所, 文字列 { &m休日[42] }

     &mReferenceDate = #日時値
     &m元号 = 0


    手続き定義開始 prcカレンダー作成()
     変数宣言 自動, 整数  { &i, &num, &step = 1 }

     &mYear = #年( &mReferenceDate )
     &mMonth = #月( &mReferenceDate )
     &mFirstDayOfTheMonth = #日時値生成( &mYear, &mMonth, 1 )
     &mFirstWeekOfTheMonth = #文字位置( "日月火水木金土", #曜日( #日時値生成( &mYear, &mMonth, 1 ) ) )

     &num = 1
     繰り返し &i = 1, 42, &step

       &mDate[&i] = #日数加算( &mFirstDayOfTheMonth, -( &mFirstWeekOfTheMonth - &num ) )
       &mDay[&i] = #日( &mDate[&i] )
       &num = &num + 1

     繰り返し終了

     手続き実行 prc休日表示()
     手続き実行 prc当日表示()
     手続き実行 prc今月日付表示()
     手続き実行 prc休日色表示()

    手続き定義終了

    手続き定義開始 prc休日表示()
     変数宣言 自動, 整数  { &i, &step = 1, &multiTblNum }
     変数宣言 自動, 長整数 { &recordNum, &recordCount }
     変数宣言 自動, 文字列 { &休日 }

     多重化
     &multiTblNum = #is表

     解除 *
     絞り込み [日付]{ &mDate[1] <= [] <= &mDate[42] }
     &recordCount = #総件数

     if ( &recordCount = 42 )

       ジャンプ 行番号 = 先頭

       &i = 1
       繰り返し ( .not #eof )

         &休日 = #u
         &休日 = [休日]
         &m休日[&i] = &休日
         &i = &i + 1

         ジャンプ 行番号 = 次行

       繰り返し終了
     else

       繰り返し &i = 1, 42, &step

         &m休日[&i] = #u

       繰り返し終了

     end

     終了 表 &multiTblNum
     編集表 &hwindow

    手続き定義終了

       ・
       ・
       ・
       ・

引用返信 [メール受信/OFF] 削除キー/
■14425 / ResNo.1)  Re[1]: 変数値の取得方法について
□投稿者/ ONnoji -(2024/06/12(Wed) 11:30:32)
    2024/06/12(Wed) 11:30:54 編集(投稿者)

    > 手続き定義開始 prc休日表示()
    >  変数宣言 自動, 整数  { &i, &step = 1, &multiTblNum }
    >  変数宣言 自動, 長整数 { &recordNum, &recordCount }
    >  変数宣言 自動, 文字列 { &休日 }
    >
    >  多重化
    >  &multiTblNum = #is表
    >
    >  解除 *
    >  絞り込み [日付]{ &mDate[1] <= [] <= &mDate[42] }
    >  &recordCount = #総件数

     トレース出力 _&recordCount, " ", _&mDate[1], " ", _&mDate[42] ↓下のトレース結果はコレ
                                        ・・・・・・・・・・・・
    >
    >  if ( &recordCount = 42 )
    >
    >    ジャンプ 行番号 = 先頭
    >
    >    &i = 1
    >    繰り返し ( .not #eof )
    >
    >      &休日 = #u
    >      &休日 = [休日]
    >      &m休日[&i] = &休日
    >      &i = &i + 1
    >
    >      ジャンプ 行番号 = 次行
    >
    >    繰り返し終了
    >  else
    >
    >    繰り返し &i = 1, 42, &step
    >
    >      &m休日[&i] = #u
    >
    >    繰り返し終了
    >
    >  end
    >
    >  終了 表 &multiTblNum
    >  編集表 &hwindow
    >
    > 手続き定義終了

     :&recordCount : 42 &mDate[1] : 2024年 6月30日 0時 0分 0秒 &mDate[42] : 2024年 8月10日 0時 0分 0秒
     :&recordCount : 42 &mDate[1] : 2024年 7月28日 0時 0分 0秒 &mDate[42] : 2024年 9月 7日 0時 0分 0秒
     :&recordCount : 42 &mDate[1] : 2024年 9月 1日 0時 0分 0秒 &mDate[42] : 2024年10月12日 0時 0分 0秒
     :&recordCount : 42 &mDate[1] : 2024年 9月29日 0時 0分 0秒 &mDate[42] : 2024年11月 9日 0時 0分 0秒
     :&recordCount : 42 &mDate[1] : 2024年10月27日 0時 0分 0秒 &mDate[42] : 2024年12月 7日 0時 0分 0秒
     :&recordCount : 42 &mDate[1] : 2024年12月 1日 0時 0分 0秒 &mDate[42] : 2025年 1月11日 0時 0分 0秒
     :&recordCount : 42 &mDate[1] : 2024年12月29日 0時 0分 0秒 &mDate[42] : 2025年 2月 8日 0時 0分 0秒
     :&recordCount : 42 &mDate[1] : 2025年 1月26日 0時 0分 0秒 &mDate[42] : 2025年 3月 8日 0時 0分 0秒
     :&recordCount : 42 &mDate[1] : 2025年 2月23日 0時 0分 0秒 &mDate[42] : 2025年 4月 5日 0時 0分 0秒
     :&recordCount : 42 &mDate[1] : 2025年 3月30日 0時 0分 0秒 &mDate[42] : 2025年 5月10日 0時 0分 0秒
     :&recordCount : 42 &mDate[1] : 2025年 4月27日 0時 0分 0秒 &mDate[42] : 2025年 6月 7日 0時 0分 0秒
     :&recordCount : 11 &mDate[1] : 2025年 6月 1日 0時 0分 0秒 &mDate[42] : 2025年 7月12日 0時 0分 0秒
     :&recordCount : 0 &mDate[1] : 2025年 6月29日 0時 0分 0秒 &mDate[42] : 2025年 8月 9日 0時 0分 0秒
     :&recordCount : 0 &mDate[1] : 2025年 7月27日 0時 0分 0秒 &mDate[42] : 2025年 9月 6日 0時 0分 0秒
     :&recordCount : 0 &mDate[1] : 2025年 8月31日 0時 0分 0秒 &mDate[42] : 2025年10月11日 0時 0分 0秒
     :&recordCount : 0 &mDate[1] : 2025年 9月28日 0時 0分 0秒 &mDate[42] : 2025年11月 8日 0時 0分 0秒

    > prc休日表示 で 休日.TBXにある日付を &mDate[1] <= [] <= &mDate[42] の範囲絞り込んでいます。
    > #総件数でレコード件数を求め、&recordCountに代入する。
    > &recordCountの値が 42 の時、休日.TBXの先頭行から最終行まで
    > 項目名 休日 の値を &m休日 に代入する。
    > このやり方だと、レコード数が 42 ないと思い通りになりません。

    拝見したところ、絞り込み件数が、42レコード未満になっても、カレンダ自体は正しく表示していますけれど・・・???

    何が問題なのでしょうか??

    現状の問題点と、改善したい内容をもう少し具体的に教えていただけると幸いです。


    p.s.

    カレンダを表示するフォームを拝見しました。

    見やすいデザインですね。(^^v

    すでにほぼ完成しているので、現状のままで何の問題はありませんので手直しする必要はありませんが・・・
                  ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    余談を。

    配列変数の名前ですが

     &mDate[1] よりも &mDateDim[1] のように "Dim" の配列を表す接尾辞を付けると配列だと一目瞭然になりますよ。

    もちろん、変数名の付け方は自由ですから、こうしなければならないというわけではありません。

    単純にこれは私( ONnoji )のスタイルというだけですよ。(^^ゞ




引用返信 [メール受信/OFF] 削除キー/
■14426 / ResNo.2)  Re[2]: 変数値の取得方法について
□投稿者/ ジェダイの桐 -(2024/06/12(Wed) 12:37:23)
    ONnojiさん


    こんにちは!


    > 拝見したところ、絞り込み件数が、42レコード未満になっても、カレンダ自体は正しく表示していますけれど・・・???

    > 現状の問題点と、改善したい内容をもう少し具体的に教えていただけると幸いです。


    そうなんです・・・
    カレンダー自体は問題なく表示されるのですが、
    休日.TBX に &mDate[1] <= [] <= &mDate[42] が 42 レコード無い時は
    項目名 [休日] に定義されている "休" が &m休日[&i] に代入されないのです。


    具体的には 休日.TBX の 1レコード目 を削除して、カレンダー.WFXを開くと
    24年4月の "休" 情報が代入されません。


    これは if ( &recordCount = 42 ) があるから当たり前なのです。
    でも実際には 休日.TBX にある 24年4月度 の "休" は 7レコードあります。


    なので、 42 レコードがある前提 (if ( &recordCount = 42 )) は止めて&mDate[1] <= [] <= &mDate[42] かつ [休日] <> #u で絞り込んだ状態で、

    日付     曜日 祝日  休日
    24/ 4/ 7 日  休
    24/ 4/13 土  休
    24/ 4/14 日  休
    24/ 4/20 土  休
    24/ 4/21 日  休
    24/ 4/28 日  休
    24/ 4/29 月 昭和の日 休


    この日付に対応する &m休日[&i] に "休" を代入する方法に改善したいと考えています(^^♪


    よい手だてが思いつきませんでした・・・(T_T)


    > p.s.
    >
    > カレンダを表示するフォームを拝見しました。
    >
    > 見やすいデザインですね。(^^v
    >
    > すでにほぼ完成しているので、現状のままで何の問題はありませんので手直しする必要はありませんが・・・
    >               ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・


    ありがとうございます!
    物凄く嬉しいです!


    > 配列変数の名前ですが
    >
    >  &mDate[1] よりも &mDateDim[1] のように "Dim" の配列を表す接尾辞を付けると配列だと一目瞭然になりますよ。


    そうなんですね!
    勉強になりました(^^ゞ


    "Dim"があったほうが断然分かりやすいので良いですね。
    接尾辞については色んな考えをお持ちの方がいるみたいですね。
    接尾辞自体必要ないとか。


    私は初級者なので、とにかく分かりやすい方が良いので、接尾辞を付けます。


    p.s.


    このカレンダーを作成するのに、約3週間かかりました。
    何度もくじけました。だけど、大活躍したのが "トレース出力" でした。
    ONnojiさんに以前作成して頂いたサンプルにも "トレース出力" がありました。


    AKさんに今どんな変数が入っているか確認しながらプログラムを考えれば、理解度が増すと教えて頂いたので、今回は特に変数にどんな値が入っているかを注視しました。


    "トレース出力" を使用しなかったら、諦めていたと思います・・・


    もう1点。


    今回、プログラムの字下げにも注意しました。
    注意して書いて、さらに utx_list3_launcher.wfx で字下げした物を
    カレンダー.kex にコピペしました。


    utx_list3_launcher.wfx は if else end や 繰り返し 繰り返し終了が一目瞭然になるので、分かりやすかったです!!


引用返信 [メール受信/OFF] 削除キー/
■14427 / ResNo.3)  Re[3]: 変数値の取得方法について
□投稿者/ ONnoji -(2024/06/12(Wed) 15:15:53)
    2024/06/12(Wed) 17:39:39 編集(投稿者)
    2024/06/12(Wed) 16:12:34 編集(投稿者)

    > そうなんです・・・
    > カレンダー自体は問題なく表示されるのですが、
    > 休日.TBX に &mDate[1] <= [] <= &mDate[42] が 42 レコード無い時は
    > 項目名 [休日] に定義されている "休" が &m休日[&i] に代入されないのです。
    > 具体的には 休日.TBX の 1レコード目 を削除して、カレンダー.WFXを開くと
    > 24年4月の "休" 情報が代入されません。

    なるほどでした。

    > これは if ( &recordCount = 42 ) があるから当たり前なのです。
    > でも実際には 休日.TBX にある 24年4月度 の "休" は 7レコードあります。
    > なので、 42 レコードがある前提 (if ( &recordCount = 42 )) は止めて&mDate[1] <= [] <= &mDate[42] かつ [休日] <> #u で絞り込んだ状態で、
    > 日付     曜日 祝日  休日
    > 24/ 4/ 7 日  休
    > 24/ 4/13 土  休
    > 24/ 4/14 日  休
    > 24/ 4/20 土  休
    > 24/ 4/21 日  休
    > 24/ 4/28 日  休
    > 24/ 4/29 月 昭和の日 休


    (当月の1日が日曜の場合を除いて、)前月の最終週の7日分の行が表に必ずあるという条件が付きますが・・・
                      ・・・・・・・・・・・。。。。・・・・

    以下のようにprc休日表示()を改修すると改善すると思いますよ。


    手続き定義開始 prc休日表示()
     変数宣言 自動, 整数  { &i, &step = 1, &multiTblNum }
     変数宣言 自動, 長整数 { &recordNum, &recordCount }
     変数宣言 自動, 文字列 { &休日 }

     多重化
     &multiTblNum = #is表

     解除 *
     絞り込み [日付]{ &mDate[1] <= [] <= &mDate[42] }
     &recordCount = #総件数

     トレース出力 _&recordCount, "  ", _&mDate[1], "  ", _&mDate[42]

     * if ( &recordCount = 42 )

     ジャンプ 行番号 = 先頭

     &i = 1
     繰り返し ( .not #eof )

      &休日 = #u
      &休日 = [休日]
      &m休日[&i] = &休日
      条件 ( &i < 43 ) トレース出力 _&i, "  ", _&mDate[&i], "  ", _&m休日[&i]
      &i = &i + 1

      ジャンプ 行番号 = 次行

     繰り返し終了
     * else
     *
     *   繰り返し &i = 1, 42, &step
     *
     *     &m休日[&i] = #u
     *
     *   繰り返し終了
     *
     * end

     if ( &i < 43 ) /* カウンタが43に満たない場合 */
      繰り返し ( &i < 43 )

       &m休日[&i] = #u /* 不足レコードの休日をクリアする */
       条件 ( &i < 43 ) トレース出力 _&i, "  ", _&mDate[&i], "  ", _&m休日[&i], "  変数クリア"
       &i = &i + 1

      繰り返し終了
     end

     終了 表 &multiTblNum
     編集表 &hwindow

    手続き定義終了


    p.s.

    > (当月の1日が日曜の場合を除いて、)前月の最終週の7日分の行が表に必ずあるという条件が付きますが・・・

    これは、&mDate[1]の値に対応するレコードが 休日.tbx 側に存在しないと日付との対応関係がズレてしまうという意味です。

     :&recordCount : 11 &mDate[1] : 2025年 6月 1日 0時 0分 0秒 &mDate[42] : 2025年 7月12日 0時 0分 0秒
     :&i : 1 &mDate[&i] : 2025年 6月 1日 0時 0分 0秒 &m休日[&i] :
     :&i : 2 &mDate[&i] : 2025年 6月 2日 0時 0分 0秒 &m休日[&i] :
     :&i : 3 &mDate[&i] : 2025年 6月 3日 0時 0分 0秒 &m休日[&i] :
     :&i : 4 &mDate[&i] : 2025年 6月 4日 0時 0分 0秒 &m休日[&i] :
     :&i : 5 &mDate[&i] : 2025年 6月 5日 0時 0分 0秒 &m休日[&i] :
     :&i : 6 &mDate[&i] : 2025年 6月 6日 0時 0分 0秒 &m休日[&i] :
     :&i : 7 &mDate[&i] : 2025年 6月 7日 0時 0分 0秒 &m休日[&i] :
     :&i : 8 &mDate[&i] : 2025年 6月 8日 0時 0分 0秒 &m休日[&i] :
     :&i : 9 &mDate[&i] : 2025年 6月 9日 0時 0分 0秒 &m休日[&i] :
     :&i : 10 &mDate[&i] : 2025年 6月10日 0時 0分 0秒 &m休日[&i] :
     :&i : 11 &mDate[&i] : 2025年 6月11日 0時 0分 0秒 &m休日[&i] :
     :&i : 12 &mDate[&i] : 2025年 6月12日 0時 0分 0秒 &m休日[&i] : 変数クリア ↓以降のレコードは存在しません
     :&i : 13 &mDate[&i] : 2025年 6月13日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 14 &mDate[&i] : 2025年 6月14日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 15 &mDate[&i] : 2025年 6月15日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 16 &mDate[&i] : 2025年 6月16日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 17 &mDate[&i] : 2025年 6月17日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 18 &mDate[&i] : 2025年 6月18日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 19 &mDate[&i] : 2025年 6月19日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 20 &mDate[&i] : 2025年 6月20日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 21 &mDate[&i] : 2025年 6月21日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 22 &mDate[&i] : 2025年 6月22日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 23 &mDate[&i] : 2025年 6月23日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 24 &mDate[&i] : 2025年 6月24日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 25 &mDate[&i] : 2025年 6月25日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 26 &mDate[&i] : 2025年 6月26日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 27 &mDate[&i] : 2025年 6月27日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 28 &mDate[&i] : 2025年 6月28日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 29 &mDate[&i] : 2025年 6月29日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 30 &mDate[&i] : 2025年 6月30日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 31 &mDate[&i] : 2025年 7月 1日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 32 &mDate[&i] : 2025年 7月 2日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 33 &mDate[&i] : 2025年 7月 3日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 34 &mDate[&i] : 2025年 7月 4日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 35 &mDate[&i] : 2025年 7月 5日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 36 &mDate[&i] : 2025年 7月 6日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 37 &mDate[&i] : 2025年 7月 7日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 38 &mDate[&i] : 2025年 7月 8日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 39 &mDate[&i] : 2025年 7月 9日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 40 &mDate[&i] : 2025年 7月10日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 41 &mDate[&i] : 2025年 7月11日 0時 0分 0秒 &m休日[&i] : 変数クリア
     :&i : 42 &mDate[&i] : 2025年 7月12日 0時 0分 0秒 &m休日[&i] : 変数クリア

引用返信 [メール受信/OFF] 削除キー/
■14428 / ResNo.4)  Re[3]: 変数値の取得方法について
□投稿者/ ONnoji -(2024/06/12(Wed) 15:57:17)
    2024/06/12(Wed) 16:19:23 編集(投稿者)

    > 配列変数の名前ですが
    >  &mDate[1] よりも &mDateDim[1] のように "Dim" の配列を表す接尾辞を付けると配列だと一目瞭然になりますよ。
    > "Dim"があったほうが断然分かりやすいので良いですね。
    > 接尾辞については色んな考えをお持ちの方がいるみたいですね。

    プログラミングに関しては個人個人の好みがありますよね。

    しかし、単に好き嫌いというレベルの話も結構ありますし、なるほど!というレベルの話もあります。

    > 接尾辞自体必要ないとか。

    おそらく、ネットで見つかる システム・ハンガリアン のことじゃないでしょうか??

    確かに "システム・ハンガリアン" は無駄なので良くないと思いますよ。これはMS帝国のマッチポンプでしたっけ。グハハ〜。

    > 私は初級者なので、とにかく分かりやすい方が良いので、接尾辞を付けます。

    ネットで "システム・ハンガリアン" が非難されたので、接頭辞も接尾辞もすべて駄目と思い込んでいる人も居るんでしょうね。アハハハ。

    > このカレンダーを作成するのに、約3週間かかりました。
    > 何度もくじけました。だけど、大活躍したのが "トレース出力" でした。
    > ONnojiさんに以前作成して頂いたサンプルにも "トレース出力" がありました。
    > AKさんに今どんな変数が入っているか確認しながらプログラムを考えれば、
    > 理解度が増すと教えて頂いたので、今回は特に変数にどんな値が入っているかを注視しました。
    > "トレース出力" を使用しなかったら、諦めていたと思います・・・

    [トレース出力]コマンドと[トレース出力]ウィンドウは強力なデバッグツールですね。

    でも、使わない人が圧倒的に多いんですよね。アハハハ。


    > 今回、プログラムの字下げにも注意しました。
    > 注意して書いて、さらに utx_list3_launcher.wfx で字下げした物を
    > カレンダー.kex にコピペしました。
    > utx_list3_launcher.wfx は if else end や 繰り返し 繰り返し終了が一目瞭然になるので、分かりやすかったです!!

    使っていただいた感想のフィードバックありがとうございます。m(__)m

    p.s.

    そうそう、「目からウロコのデータベース桐プログラミング入門」の続編を公開しました。

    こちら
     ↓
    桐の釣魚大全のトップ
    http://silicon7565.html.xdomain.jp/

    桐の釣魚大全のトップ > 目からウロコのデータベース桐プログラミング入門 パート2
    http://silicon7565.html.xdomain.jp/primer/primer_side_reader_part2.html

    ブラウザで表示されない場合には、F5キーを押してリロードしてください。
                    ・・・・・・・・・・・・・・・・・
580×442 => 250×190

1718182064.jpg
/44KB
引用返信 [メール受信/OFF] 削除キー/
■14429 / ResNo.5)  Re[4]: 変数値の取得方法について
□投稿者/ ジェダイの桐 -(2024/06/12(Wed) 17:20:01)
    2024/06/12(Wed) 19:36:21 編集(投稿者)

    ONnojiさん


    ありがとうございます!
    見事改善されました!


    >   条件 ( &i < 43 ) トレース出力 _&i, "  ", _&mDate[&i], "  ", 


    条件という物があったのですね。


    ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇


    条件 ( <条件式> ) <コマンド>


     <条件式>の値が真(値がゼロでも未定義でもない)であれば、<コマンド>を実行する。
     <条件式>には通常の計算式を記述する。


    ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇


    使いこなせたら、かなり便利そうですね(^^ゞ
    勉強になりました!



    >  if ( &i < 43 ) /* カウンタが43に満たない場合 */
    >   繰り返し ( &i < 43 )
    >
    >    &m休日[&i] = #u /* 不足レコードの休日をクリアする */
    >    条件 ( &i < 43 ) トレース出力 _&i, "  ", _&mDate[&i], "  ", _&m休日[&i], "  変数クリア"
    >    &i = &i + 1
    >
    >   繰り返し終了
    >  end


    実は、 if と 繰り返し コマンドは便利だと感じている反面、
    狙い通りに動かすまで、かなり時間がかかりました。
    (未だに使いたいけど得意ではないです・・・)


    フォームアプリケーション教書 第2部 32章
    繰り返しと条件式は何度も読んでいます(^^)/


    ご教授ありがとうございましたm(__)m


解決済み!
引用返信 [メール受信/OFF] 削除キー/
■14430 / ResNo.6)  Re[5]: 変数値の取得方法について
□投稿者/ ONnoji -(2024/06/12(Wed) 17:29:27)
    2024/06/12(Wed) 17:33:31 編集(投稿者)

    >>  条件 ( &i < 43 ) トレース出力 _&i, "  ", _&mDate[&i], "  ", 
    > 条件という物があったのですね。

    [条件]コマンドは、たった1行のコマンドを実行するだけの場合には便利ですよ。

    次のように

     if ( &i < 43 )
      トレース出力 _&i, "  ", _&mDate[&i], "  ", 
     end

    と書くと3行になって逆に読み難い場合がありますからね。

    > 実は、 if と 繰り返し コマンドは便利だと感じている反面、
    > 狙い通りに動かすまで、かなり時間がかかりました。
    > (未だに使いたいけど得意ではないです・・・)

    if ... end と 繰り返し ... 繰り返し終了 は繰り返すか繰り返さないかの違いしかありません。

    >> if ( &i < 43 ) /* カウンタが43に満たない場合 */
    >>  繰り返し ( &i < 43 )
    >>
    >>   &m休日[&i] = #u /* 不足レコードの休日をクリアする */
    >>   条件 ( &i < 43 ) トレース出力 _&i, "  ", _&mDate[&i], "  ", _&m休日[&i], "  変数クリア"
    >>   &i = &i + 1
    >>
    >>  繰り返し終了
    >> end

    なので、

     ** if ( &i < 43 ) /* カウンタが43に満たない場合 */
     繰り返し ( &i < 43 )

      &m休日[&i] = #u /* 不足レコードの休日をクリアする */
      条件 ( &i < 43 ) トレース出力 _&i, "  ", _&mDate[&i], "  ", _&m休日[&i], "  変数クリア"
      &i = &i + 1

     繰り返し終了
     **end

    のように if ... end をコメントアウトしても、結局同じなのですよ。

    でも、分かり易いように、冗長になるのを承知で if ... end を使っていますよ。


    > フォームアプリケーション教書 第2部 32章
    > 繰り返しと条件式は何度も読んでいます(^^)/

    初級者の場合、繰り返し ... 繰り返し終了 が一番難しく感じるでしょうね。


引用返信 [メール受信/OFF] 削除キー/
■14431 / ResNo.7)  Re[4]: 変数値の取得方法について
□投稿者/ ジェダイの桐 -(2024/06/12(Wed) 17:30:13)
    ONnojiさん


    > [トレース出力]コマンドと[トレース出力]ウィンドウは強力なデバッグツールですね。
    >
    > でも、使わない人が圧倒的に多いんですよね。アハハハ。


    インターネットを見ていると


    確認 #STR(変数)


    で 変数の値を調べている人もいました。


    この方法でも調べられるのでしょうけど、トレース出力 を知った今なら
    断然 トレース出力 が便利だと思います(^^ゞ


    >>今回、プログラムの字下げにも注意しました。
    >>注意して書いて、さらに utx_list3_launcher.wfx で字下げした物を
    >>カレンダー.kex にコピペしました。
    >>utx_list3_launcher.wfx は if else end や 繰り返し 繰り返し終了が一目瞭然になるので、分かりやすかったです!!
    >
    > 使っていただいた感想のフィードバックありがとうございます。m(__)m


    今は if や 繰り返し、字下げしか出来ていないですが、本当はもっと使い道があるんですよね・・・
    まだまだ使いこなせていませんが、仕様書をもっと読み込んで使っていきます!


    > p.s.
    >
    > そうそう、「目からウロコのデータベース桐プログラミング入門」の続編を公開しました。
    >
    > こちら
    >  ↓
    > 桐の釣魚大全のトップ
    > http://silicon7565.html.xdomain.jp/
    >
    > 桐の釣魚大全のトップ > 目からウロコのデータベース桐プログラミング入門 パート2
    > http://silicon7565.html.xdomain.jp/primer/primer_side_reader_part2.html


    気付いていませんでした!


    早速読ませて頂きます(^^♪
引用返信 [メール受信/OFF] 削除キー/
■14432 / ResNo.8)  (削除)
□投稿者/ -(2024/06/12(Wed) 23:07:13)
    この記事は(投稿者)削除されました
引用返信 [メール受信/OFF] 削除キー/
■14435 / ResNo.9)  Re[1]: 変数値の取得方法について
□投稿者/ ONnoji -(2024/06/13(Thu) 17:46:13)
    2024/06/13(Thu) 19:19:08 編集(投稿者)

    ジェダイの桐さん

    休日.tbx で "休日" だけのレコードに絞り込んで、その結果を元に配列の要素番号インデックスを作成して、

    配列変数:&m休日[ &dimNum ] に "休日" という値を代入する方法を思いつきましたので以下にご案内します。

    体感的なスピードには違いがありませんが、この方がスマートでしょ。アハハハha (^^ok

    トレース出力の結果を見れば何をしているのかご理解いただけると思いますよ。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    手続き定義開始 prc休日表示()
     変数宣言 自動, 整数  { &i, &step = 1, &multiTblNum }
     **変数宣言 自動, 長整数 { &recordNum, &recordCount }
     **変数宣言 自動, 文字列 { &休日 }
     変数宣言 自動, 文字列{ &indexList }
     変数宣言 自動,文字列{ &comma = #jis( #hex("2C") ) }
     変数宣言 自動, 整数 { &indexCount, &loop, &dimNum }

     多重化
     &multiTblNum = #is表

     解除 *
     絞り込み [日付]{ &mDate[1] <= [] <= &mDate[42] }
     絞り込み [休日]{ #trim( [休日], 4 ) <> #u }

     &indexList = #u
     繰り返し ( .not #eof )

      トレース出力 _&mDate[1], "  ", _[日付], "  ", _( 1 + #日数( &mDate[1], [日付] ) )

      &indexList = &indexList + #cond( &indexList <> #u, &comma ) + #str( 1 + #日数( &mDate[1], [日付] ) )

      ジャンプ 行番号 = 次行
     繰り返し終了
     トレース出力 _&indexList

     終了 表 &multiTblNum
     編集表 &hwindow

     ** 配列変数の初期化
     &m休日 = { "" } /* すべての要素値を未定義にします cf. 桐ヘルプ [代入]コマンド */

     if ( &indexList <> #u )

      &indexCount = 1 + #文字数( &indexList ) - #文字数( #文字置換( &indexList, &comma, #u ) )
      &loop = &indexCount
      繰り返し &i = 1, &loop, &step

       &dimNum = #num( #対応文字列( &indexList, &i ) )
       トレース出力 _&loop, "  ", _&i, "  ", _&dimNum

       ** 配列変数へ値を代入
       &m休日[ &dimNum ] = "休日"

      繰り返し終了
     end

    手続き定義終了


    ■2024年06月の時のトレース出力の結果 

     :&mDate[1] : 2024年 5月26日 0時 0分 0秒  [日付] : 2024年 5月26日 0時 0分 0秒  ( 1 + #日数( &mDate[1], [日付] ) ) : 1
     :&mDate[1] : 2024年 5月26日 0時 0分 0秒  [日付] : 2024年 6月 2日 0時 0分 0秒  ( 1 + #日数( &mDate[1], [日付] ) ) : 8
     :&mDate[1] : 2024年 5月26日 0時 0分 0秒  [日付] : 2024年 6月 8日 0時 0分 0秒  ( 1 + #日数( &mDate[1], [日付] ) ) : 14
     :&mDate[1] : 2024年 5月26日 0時 0分 0秒  [日付] : 2024年 6月 9日 0時 0分 0秒  ( 1 + #日数( &mDate[1], [日付] ) ) : 15
     :&mDate[1] : 2024年 5月26日 0時 0分 0秒  [日付] : 2024年 6月15日 0時 0分 0秒  ( 1 + #日数( &mDate[1], [日付] ) ) : 21
     :&mDate[1] : 2024年 5月26日 0時 0分 0秒  [日付] : 2024年 6月16日 0時 0分 0秒  ( 1 + #日数( &mDate[1], [日付] ) ) : 22
     :&mDate[1] : 2024年 5月26日 0時 0分 0秒  [日付] : 2024年 6月22日 0時 0分 0秒  ( 1 + #日数( &mDate[1], [日付] ) ) : 28
     :&mDate[1] : 2024年 5月26日 0時 0分 0秒  [日付] : 2024年 6月23日 0時 0分 0秒  ( 1 + #日数( &mDate[1], [日付] ) ) : 29
     :&mDate[1] : 2024年 5月26日 0時 0分 0秒  [日付] : 2024年 6月29日 0時 0分 0秒  ( 1 + #日数( &mDate[1], [日付] ) ) : 35
     :&mDate[1] : 2024年 5月26日 0時 0分 0秒  [日付] : 2024年 6月30日 0時 0分 0秒  ( 1 + #日数( &mDate[1], [日付] ) ) : 36
     :&mDate[1] : 2024年 5月26日 0時 0分 0秒  [日付] : 2024年 7月 6日 0時 0分 0秒  ( 1 + #日数( &mDate[1], [日付] ) ) : 42
     :&indexList : 1,8,14,15,21,22,28,29,35,36,42
     :&loop : 11  &i : 1  &dimNum : 1
     :&loop : 11  &i : 2  &dimNum : 8
     :&loop : 11  &i : 3  &dimNum : 14
     :&loop : 11  &i : 4  &dimNum : 15
     :&loop : 11  &i : 5  &dimNum : 21
     :&loop : 11  &i : 6  &dimNum : 22
     :&loop : 11  &i : 7  &dimNum : 28
     :&loop : 11  &i : 8  &dimNum : 29
     :&loop : 11  &i : 9  &dimNum : 35
     :&loop : 11  &i : 10  &dimNum : 36
     :&loop : 11  &i : 11  &dimNum : 42

    p.s.

    昨日のアプローチは根本的な改善策になっていませんね。

    さすがに、初めて見せてもらった「フォーム+イベント処理」では内容を理解するのに手間取りました。

    これで一件落着だと思います。v(^^)v



引用返信 [メール受信/OFF] 削除キー/

次のレス10件>

スレッド内ページ移動 / << 0 | 1 >>

このスレッドに書きこむ

Mode/  Pass/

HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -