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

[ 最新記事及び返信フォームをトピックトップへ ]

■13327 / inTopicNo.1)  横項目の順位の付け方について
  
□投稿者/ T.S -(2022/06/19(Sun) 14:39:40)
     T.Sと申します。
     いつも勉強させていただいております。
     桐9-2012 です。

     標記の件、次のような処理をしたいと考えていますが、上手い計算式が思い浮かびません。
     皆様方の良いお知恵をお借りできればと思っております。
     よろしくお願いいたします。

    【やりたい事】
    ●_[英語]〜[社会]までの5項目の点数順(100点満点)に、次の項目[強み_英語]〜[強み_社会]の各項目に降順に順位をつけたい。


    [氏名]、[英語]、[数学]、[国語]、[理科]、[社会]、[強み_英語]、[強み_数学]、[強み_国語]、[強み_理科]、[強み_社会]

    東京太郎,90,70,50,60,80,1,3,5,4,2
    神奈川二郎,70,70,60,60,50,1,1,2,2,3
    千葉花子,40,60,50,70,80,5,3,4,2,1
    ・・・

引用返信 [メール受信/OFF] 削除キー/
■13328 / inTopicNo.2)  Re[1]: 横項目の順位の付け方について
□投稿者/ ONnoji -(2022/06/19(Sun) 19:31:04)
    2022/06/22(Wed) 18:13:29 編集(投稿者)
    2022/06/19(Sun) 20:28:23 編集(投稿者)

    >  桐9-2012 です。
    >
    > 【やりたい事】
    > ●_[英語]〜[社会]までの5項目の点数順(100点満点)に、次の項目[強み_英語]〜[強み_社会]の各項目に降順に順位をつけたい。
    >
    > [氏名]、[英語]、[数学]、[国語]、[理科]、[社会]、[強み_英語]、[強み_数学]、[強み_国語]、[強み_理科]、[強み_社会]
    >
    > 東京太郎,90,70,50,60,80,1,3,5,4,2
    > 神奈川二郎,70,70,60,60,50,1,1,2,2,3
    > 千葉花子,40,60,50,70,80,5,3,4,2,1
    > ・・・

    表の項目計算式では難しいでしょうね。

    というよりも、私にはその種の才能がないので[項目計算式による解法]が思いつきませんでした。トホホ。

    なので、フォーム(.wfm)+イベント処理(.kev)+表(.tbl)での解法を作ってみました。

    まったくのコテコテですが、何かのご参考になればと思ってサンプルを作ってみました。

    添付ファイルを解凍して、横項目の順位の付け方について.wfm の[横項目の順位を計算]ボタンを実行してください。

    p.s.

    もっと簡単な方法があるかもしれませんので、他の人の回答も参考にしてください。

    p.p.s.

    添付ファイルを削除したので以下を参考にしてください。

    ■コマンドボタンの設定

     横項目の順位の付け方について.wfm

     オブジェクト名: cmd横項目の順位を計算
     標題     : 横項目の順位を計算

      機能名   機能パラメータリスト
     1 表示
     2 手続き実行 cmd横項目の順位を計算Click
     3 なし
     4 なし

    ■イベント処理の内容

     横項目の順位の付け方について.kev

    名札 メイン



    手続き定義開始 cmd横項目の順位を計算Click( )
     変数宣言 自動,文字列{ &title = "cmd横項目の順位を計算Click( )", &msg }
     変数宣言 自動,文字列{ &fieldNameDim[5], &fieldName }
     変数宣言 自動,整数 { &rankingDim[5], &fieldNum }
     変数宣言 自動,数値 { &scoreDim[5], &score }
     変数宣言 自動,整数 { &ranking }
     変数宣言 自動,整数 { &i, &loop, &step = 1 }

     &fieldNameDim = { "強み_英語", "強み_数学", "強み_国語", "強み_理科", "強み_社会" }

     ジャンプ 行番号 = 先頭
     繰り返し ( .not #eof )

      *----- begin [英語]〜[社会]の点数を降順ソートして配列変数:&scoreDim に代入する ------*
      &scoreDim[1] = [英語]
      &scoreDim[2] = [数学]
      &scoreDim[3] = [国語]
      &scoreDim[4] = [理科]
      &scoreDim[5] = [社会]

      手続き実行 prcSort( &scoreDim ) /* [英語]〜[社会]の点数を降順ソートして配列変数:&scoreDim に代入する */
      *----- end [英語]〜[社会]の点数を降順ソートして配列変数:&scoreDim に代入する ------*

      *----- begin 点数:&scoreDim に対応するランキング配列変数:&rankingDim にランクを代入する ------*
      &ranking = 1
      &score = &scoreDim[1]
      &loop = #配列要素数( "scoreDim" )
      繰り返し &i = 1 , &loop, &step

       if ( &scoreDim[ &i ] <> &score )
        &ranking = &ranking + 1
        &score = &scoreDim[ &i ]
       end
       &rankingDim[ &i ] = &ranking
       トレース出力 _&scoreDim[ &i ], " ", _&rankingDim[ &i ]

      繰り返し終了
      *----- end 点数:&scoreDim に対応するランキング配列変数:&rankingDim にランクを代入する ------*

      *----- begin スコアに対応するランクを探索して、[強み_英語]〜[強み_社会]へランクを代入する ------*
      &loop = #配列要素数( "fieldNameDim" )
      繰り返し &i = 1 , &loop, &step

       &fieldNum = #項目番号( #文字置換( &fieldNameDim[ &i ], "強み_", #u ) )
       &score = #項目属性( &fieldNum, 0 )
       トレース出力 _&fieldNum, " ", _&score

       手続き実行 prcRankingSeek( &score, &scoreDim, &rankingDim, &ranking ) /* スコアに対応するランクを探索する */
       &fieldName = &fieldNameDim[ &i ]
       トレース出力 _&fieldName
       行訂正 &fieldName = &ranking

      繰り返し終了
      *----- end スコアに対応するランクを探索して、[強み_英語]〜[強み_社会]へランクを代入する ------*

      ジャンプ 行番号 = 次行
     繰り返し終了

     &msg = "finished"
     メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = する

    手続き定義終了

    手続き定義開始 prcRankingSeek( 数値 &score, 参照 数値 &scoreDim[], 参照 整数 &rankingDim[], 参照 整数 &ranking )
     ** 注意:要素数を固定しないで配列を受け取るために引数リストで参照にしている ⇒ 参照 数値 &scoreDim[], 参照 整数 &rankingDim[]
     変数宣言 自動,文字列{ &title = "prcRankingSeek( )", &msg }

     トレース出力 _&title, " ", _&score
     &ranking = #u /* 戻り値:&ranking の初期化 */

     変数宣言 自動,整数{ &i, &loop, &step = 1 }
     &loop = #配列要素数( "scoreDim" )
     繰り返し &i = 1 , &loop, &step

      トレース出力 _&score, " ", _&scoreDim[ &i ], " ", _( &score = &scoreDim[ &i ] ), " ", _&rankingDim[ &i ]
      if ( &score = &scoreDim[ &i ] )
       &ranking = &rankingDim[ &i ]
       トレース出力 _&ranking
       繰り返し中止
      end
     繰り返し終了

    手続き定義終了

    手続き定義開始 prcSort( 参照 数値 &dim[] )
     変数宣言 自動,文字列{ &title = "prcSort( )", &msg }

     *----- begin 参考図書 現代データ構造とプログラム技法 萩原宏・西原清一 著 オーム社刊 ISBN4-274-12831-8 -----*
     変数宣言 自動, 数値{ &s, &fin, &n, &i, &numA, &numB }
     &n = #配列要素数( "dim" )

     &s = 2
     繰り返し

      &fin = &s, &s = &n
      繰り返し &i = &n, &fin, -1

       &numA = &dim[ &i ]
       &numB = &dim[ &i - 1 ]

       if ( &numA > &numB )
        &dim[ &i - 1 ] = &numA
        &dim[ &i ] = &numB
        &s = &i
       end
      繰り返し終了

      if ( &s = &n )
       繰り返し中止
      end
     繰り返し終了
     *----- end 参考図書 現代データ構造とプログラム技法 萩原宏・西原清一 著 オーム社刊 ISBN4-274-12831-8 -----*

    手続き定義終了




引用返信 [メール受信/OFF] 削除キー/
■13329 / inTopicNo.3)  項目計算式で出来ました
□投稿者/ ONnoji -(2022/06/20(Mon) 19:48:56)
    2022/06/22(Wed) 18:18:22 編集(投稿者)
    2022/06/21(Tue) 19:05:14 編集(投稿者)
    2022/06/20(Mon) 19:56:31 編集(投稿者)

    > 東京太郎,90,70,50,60,80,1,3,5,4,2
    > 神奈川二郎,70,70,60,60,50,1,1,2,2,3
    > 千葉花子,40,60,50,70,80,5,3,4,2,1

    名前には特に意味が無いので除外して考えよう。

     90,70,50,60,80,1,3,5,4,2
     70,70,60,60,50,1,1,2,2,3
     40,60,50,70,80,5,3,4,2,1

    なので、

      点数         順位
     { 90,70,50,60,80 } { 1,3,5,4,2 }
     { 70,70,60,60,50 } { 1,1,2,2,3 }
     { 40,60,50,70,80 } { 5,3,4,2,1 }

    という対応関係になります。

    しかし、順位を求めるためにはソートする必要があります。

    なので、普通これを桐の関数だけで計算できると思いませんよね。

    でも、項目計算式にチャレンジしてみましたら出来ました。

    やはり、キモはソートでした。⇒ 1次ソート #大( [英語],#大( [数学],#大( [国語],#大( [理科],[社会] ) ) ) )

    結局、項目計算式で5段ソートします。

    ソートが出来ればその後は一本道です。⇒ #cond( [英語] = [最大値1], 1, [英語] = [最大値2], 2, [英語] = [最大値3], 3, [英語] = [最大値4], 4, [英語] = [最大値5], 5 )

    なお余談ながら、今回の解法は冗長な計算式のオンパレードになるのでケアレスミスの温床のような状態になります。
            ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    つまり、1文字でも間違えがあると正しい結果が得られません。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    あくまでも私( ONnoji )の個人的な感想ですが、自分で作って置きながらハッキリ言ってこれって超センスが悪いと思います。

    でも、求める結果が得られましたので、サンプルファイルを用意しました。

    p.s.

    私( ONnoji )は、ケアレスミスの温床となり、かつ暗号のような項目計算式よりも、イベント処理の手続きの方が好みです。

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

    添付ファイルを削除したので以下を参考にしてください。

    ■横項目の順位の付け方の項目計算.tbl

    項目番号 項目名   データ型 項目計算式
     1    氏名    文字列
     2    英語    数値
     3    数学    数値
     4    国語    数値
     5    理科    数値
     6    社会    数値
     7    最大値1  数値  #大( [英語],#大( [数学],#大( [国語],#大( [理科],[社会] ) ) ) )

     8    最大値2  数値  #大( #cond( [英語]<>[最大値1],[英語], 1, -1 ),#大( #cond( [数学]<>[最大値1],[数学], 1, -1 ),
                    #大( #cond( [国語]<>[最大値1],[国語], 1, -1 ),
                    #大( #cond( [理科]<>[最大値1],[理科], 1, -1 ), #cond([社会]<>[最大値1],[社会], 1, -1 ) ) ) ) )

     9    最大値3  数値  #大( #cond( [英語]<>[最大値1] .and [英語]<>[最大値2],[英語], 1, -1 ),
                    #大( #cond( [数学]<>[最大値1] .and [数学]<>[最大値2],[数学], 1, -1 ),
                    #大( #cond( [国語]<>[最大値1] .and [国語]<>[最大値2],[国語], 1, -1 ),
                    #大( #cond( [理科]<>[最大値1] .and [理科]<>[最大値2],[理科], 1, -1 ),
                    #cond([社会]<>[最大値1] .and [社会]<>[最大値2],[社会], 1, -1 ) ) ) ) )

     10   最大値4  数値  #大( #cond( [英語]<>[最大値1] .and [英語]<>[最大値2] .and [英語]<>[最大値3],[英語], 1, -1 ),
                    #大( #cond( [数学]<>[最大値1] .and [数学]<>[最大値2] .and [数学]<>[最大値3],[数学], 1, -1 ),
                    #大( #cond( [国語]<>[最大値1] .and [国語]<>[最大値2] .and [国語]<>[最大値3],[国語], 1, -1 ),
                    #大( #cond( [理科]<>[最大値1] .and [理科]<>[最大値2] .and [理科]<>[最大値3],[理科], 1, -1 ),
                    #cond([社会]<>[最大値1] .and [社会]<>[最大値2] .and [社会]<>[最大値3],[社会], 1, -1 ) ) ) ) )

     11   最大値5  数値  #大( #cond( [英語]<>[最大値1] .and [英語]<>[最大値2] .and [英語]<>[最大値3] .and [英語]<>[最大値4],[英語], 1, -1 ),
                    #大( #cond( [数学]<>[最大値1] .and [数学]<>[最大値2] .and [数学]<>[最大値3] .and [数学]<>[最大値4],[数学], 1, -1 ),
                    #大( #cond( [国語]<>[最大値1] .and [国語]<>[最大値2] .and [国語]<>[最大値3] .and [国語]<>[最大値4],[国語], 1, -1 ),
                    #大( #cond( [理科]<>[最大値1] .and [理科]<>[最大値2] .and [理科]<>[最大値3] .and [理科]<>[最大値4],[理科], 1, -1 ),
                    #cond([社会]<>[最大値1] .and [社会]<>[最大値2] .and [社会]<>[最大値3] .and [社会]<>[最大値4],[社会], 1, -1 ) ) ) ) )

     12   強み_英語  整数  #cond( [英語] = [最大値1], 1, [英語] = [最大値2], 2, [英語] = [最大値3], 3, [英語] = [最大値4], 4, [英語] = [最大値5], 5 )
     13   強み_数学  整数  #cond( [数学] = [最大値1], 1, [数学] = [最大値2], 2, [数学] = [最大値3], 3, [数学] = [最大値4], 4, [数学] = [最大値5], 5 )
     14   強み_国語  整数  #cond( [国語] = [最大値1], 1, [国語] = [最大値2], 2, [国語] = [最大値3], 3, [国語] = [最大値4], 4, [国語] = [最大値5], 5 )
     15   強み_理科  整数  #cond( [理科] = [最大値1], 1, [理科] = [最大値2], 2, [理科] = [最大値3], 3, [理科] = [最大値4], 4, [理科] = [最大値5], 5 )
     16   強み_社会  整数  #cond( [社会] = [最大値1], 1, [社会] = [最大値2], 2, [社会] = [最大値3], 3, [社会] = [最大値4], 4, [社会] = [最大値5], 5 )


引用返信 [メール受信/OFF] 削除キー/
■13330 / inTopicNo.4)  Re[1]: 横項目の順位の付け方について
□投稿者/ natsu -(2022/06/20(Mon) 23:40:56)
    桐を使いだした当初(Ver3です)は項目計算式を多用していましたが、後々のメンテナンスが大変なので可能な限り一括で処理していました。

    今回のケースは、順位付けの項目数が5つであり、コピー・貼り付けと項目名の変更を間違わなければ一括より項目計算式の方が手っ取り早く作成できます。
    これ以上、評価すべき項目数が増えるのであれば、自分なら迷わず一括です。

    さて、[英語]〜[強み_社会]までのデータ型は整数とします。ファイル属性[未定義項目値処理]は未定義を選択し、0点と点数が記録されていない(その科目の試験を受けていない)場合とを区別します。

    [強み_英語]の項目計算式は下記の通りです。わかりにくいので、メモ帳などに貼りつけて眺めてください。

    #cond([英語]=#U,=#U,1,1+#cond([数学]=#U,0,[数学]>[英語],1,1,0)+#cond([国語]=#U,0,[国語]>[英語],1,1,0)+#cond([理科]=#U,0,[理科]>[英語],1,1,0)+#cond([社会]=#U,0,[社会]>[英語],1,1,0))

    以下、参考までに数学から社会までの項目計算式です。
    数学:
    #cond([数学]=#U,=#U,1,1+#cond([英語]=#U,0,[英語]>[数学],1,1,0)+#cond([国語]=#U,0,[国語]>[数学],1,1,0)+#cond([理科]=#U,0,[理科]>[数学],1,1,0)+#cond([社会]=#U,0,[社会]>[数学],1,1,0))

    国語:
    #cond([国語]=#U,=#U,1,1+#cond([数学]=#U,0,[数学]>[国語],1,1,0)+#cond([英語]=#U,0,[英語]>[国語],1,1,0)+#cond([理科]=#U,0,[理科]>[国語],1,1,0)+#cond([社会]=#U,0,[社会]>[国語],1,1,0))

    理科:
    #cond([理科]=#U,=#U,1,1+#cond([数学]=#U,0,[数学]>[理科],1,1,0)+#cond([国語]=#U,0,[国語]>[理科],1,1,0)+#cond([英語]=#U,0,[英語]>[理科],1,1,0)+#cond([社会]=#U,0,[社会]>[理科],1,1,0))

    社会:
    #cond([社会]=#U,=#U,1,1+#cond([数学]=#U,0,[数学]>[社会],1,1,0)+#cond([国語]=#U,0,[国語]>[社会],1,1,0)+#cond([理科]=#U,0,[理科]>[社会],1,1,0)+#cond([英語]=#U,0,[英語]>[社会],1,1,0))


    順位付けは大きい(小さい)ものから順に並べる作業ですが、順位を付けられる各アイテムの視点からは、自分より大きい(小さい)ものが何個あるかをカウントしていることになります。ただし、この項目計算式では、神奈川二郎の様に同一順位が複数ある場合、つまり、1位が2教科ある場合、その次は2位ではなく、3位として出力されますのであしからず。これは桐の置換で用いる[#順位]の仕様と同じです。もし、1位の次は2位にしたいとうニーズが強いのであれば、やはり一括を組むことになりそうです。
引用返信 [メール受信/OFF] 削除キー/
■13333 / inTopicNo.5)  Re[2]: 横項目の順位の付け方について
□投稿者/ ONnoji -(2022/06/21(Tue) 15:18:36)
    2022/06/21(Tue) 16:28:17 編集(投稿者)

    No13330に返信(natsuさんの記事)

    No13330 の計算式は、定数1に条件を満たせばイチ( 1 )を加算、そうでなければゼロ( 0 )を加算していますね。

    ならば簡略化できますよ。(*^^)ok

    案外と知られていませんが、条件式はそれ自身が真の時にイチ( 1 )、偽の時にはゼロ( 0 )を返します。

    例えば、( [数学] > [英語] )の値は、イチ( 1 )かゼロ( 0 )のどちらか一方です。

    なので、次のように式を簡略化できますよ。

     項目名     データ型 項目計算式
     簡略_強み_英語 整数    1 + ( [数学] > [英語] ) + ( [国語] > [英語] ) + ( [理科] > [英語] ) + ( [社会] > [英語] )
     簡略_強み_数学 整数   1 + ( [英語] > [数学] ) + ( [国語] > [数学] ) + ( [理科] > [数学] ) + ( [社会] > [数学] )
     簡略_強み_国語 整数   1 + ( [数学] > [国語] ) + ( [英語] > [国語] ) + ( [理科] > [国語] ) + ( [社会] > [国語] )
     簡略_強み_理科 整数   1 + ( [数学] > [理科] ) + ( [国語] > [理科] ) + ( [英語] > [理科] ) + ( [社会] > [理科] )
     簡略_強み_社会 整数    1 + ( [数学] > [社会] ) + ( [国語] > [社会] ) + ( [理科] > [社会] ) + ( [英語] > [社会] )


    p.s.

    手前味噌ながら拙作webページもご参考にしてください。

    こちら
     ↓
    30 論理と条件式|フォームアプリケーション教書 第2部
    http://silicon7565.html.xdomain.jp/guide/guide_Part2.htm#section30

    30   論理と条件式
    30.1 [比較式]と[条件式]の違い
    30.2 桐の論理値
    30.3 条件式の書き方


引用返信 [メール受信/OFF] 削除キー/
■13336 / inTopicNo.6)  Re[3]: 横項目の順位の付け方について
□投稿者/ natsu -(2022/06/21(Tue) 23:46:14)
    ONnojiさんへ

    ご指摘と詳細な解説、どうもありがとうございました。
    やっぱり、項目計算式とは相性がよろしくないようです。

    お詫びといっては何ですが、一括にしてみました。
    (一位が複数あるとき、次は二位にしてあります)

    [氏名]、[英語]、[数学]、[国語]、[理科]、[社会]、[強み_英語]、[強み_数学]、[強み_国語]、[強み_理科]、[強み_社会]

    ↑ これを "元表"という名前にして[点数]整数型、[順位]整数型、[名前順]整数型、[科目]文字列の4項目を元表に追加してください。
    今度は、きちんと動作した一括から直接コピーしたので大丈夫です。


    変数宣言 固有,文字列{ &名前,&科目の名称, &s }
    変数宣言 固有,整数{ &科目の順位, &科目の点数, &i }
    表 "元表"
    置換 [名前順]=#連番
    置換 [強み_英語]=#U, [強み_数学]=#U, [強み_国語]=#U, [強み_理科]=#U, [強み_社会]=#U
    繰り返し &i=2, 6
     &s="強み_" + #項目属性(&i,1)
     コマンド "置換 [科目]=&s"
     コマンド "置換 [点数]=[" + #項目属性(&i,1) + "]"

     ケース開始
      ケース (&i=2)
       書き出し 表,"一時ファイル",{[氏名],[科目],[点数],[順位],[名前順]}
      ケース その他
       書き出し 表,"一時ファイル",追加,{[氏名],[科目],[点数],[順位],[名前順]}
     ケース終了

    繰り返し終了

    表 "一時ファイル"
    &名前=""
    絞り込み [点数]{≠#U}
    並べ替え {[氏名]昇順,[点数]降順}
    ジャンプ 行番号=先頭
    繰り返し

     ケース開始
      ケース ([氏名]≠&名前)
       &名前=[氏名]
       &科目の順位=1
       &科目の点数=[点数]
       行訂正 [順位]=&科目の順位
      ケース その他
       ケース開始
        ケース ([点数]≠&科目の点数)
         &科目の順位=&科目の順位+1
         &科目の点数=[点数]
         行訂正 [順位]=&科目の順位
        ケース その他
         行訂正 [順位]=&科目の順位
       ケース終了
     ケース終了

     行訂正 [順位]=&科目の順位

     ジャンプ 行番号=次行
     条件 (#EOF=1) 繰り返し中止
    繰り返し終了

    ジャンプ 行番号=先頭
    繰り返し
     &科目の名称=[科目]
     &科目の順位=[順位]
     &i=[名前順]
     編集表 "元表"
      ジャンプ 行番号=&i
      コマンド "行訂正 [" + &科目の名称 + "]=&科目の順位
     編集表 "一時ファイル"
     ジャンプ 行番号=次行
     条件 (#EOF=1) 繰り返し中止
    繰り返し終了






引用返信 [メール受信/OFF] 削除キー/
■13337 / inTopicNo.7)  Re[4]: 横項目の順位の付け方について
□投稿者/ ONnoji -(2022/06/22(Wed) 01:03:44)
    2022/06/22(Wed) 22:24:13 編集(投稿者)
    2022/06/22(Wed) 12:33:44 編集(投稿者)
    2022/06/22(Wed) 01:07:01 編集(投稿者)

    No13336に返信(natsuさんの記事)

    natsuさん江

    この掲示板は桐のコマンドのお勉強をされる人がご覧になっていると思うので、老婆心ながら書かせていただきます。m(__)m

     ◇ ◇ ◇ ◇ ◇ ◇ ◇

    もしも、表( .tbl )にレコードが無かったら、※理由:絞り込みに失敗した、元々空ファイルだった、すべて削除レコードだった、etc.

     ジャンプ 行番号=先頭
    ┌繰り返し        ← 無条件で繰り返している!
    │ :
    │ :
    │ :
    │ :
    │ ジャンプ 行番号=次行
    ←─条件 (#EOF=1) 繰り返し中止
    └繰り返し終了

    (実際にエラーするか否かは別にして)これはダメでしょ。

    ここは until:後判断型の繰り返しではなくて、while:前判断型の繰り返しにしますよ。

    もちろん、これは予期せぬ失敗に備えてのことです・・・(^^)ok

     ジャンプ 行番号=先頭
    ┌繰り返し ( .not #eof ) ← 条件を指定している
    │ :
    │ :
    │ :
    │ :
    │ ジャンプ 行番号=次行 ← これが無いと終端行へ到達しないので絶対に必要
    └繰り返し終了

    ■参考
    32 繰り返し と 条件式|桐の釣魚大全のトップ > フォームアプリケーション教書 第2部
    http://silicon7565.html.xdomain.jp/guide/guide_Part2.htm#section32

    30.3 条件式の書き方|桐の釣魚大全のトップ > フォームアプリケーション教書 第2部
    http://silicon7565.html.xdomain.jp/guide/guide_Part2.htm#section30-3


引用返信 [メール受信/OFF] 削除キー/
■13338 / inTopicNo.8)  Re[5]: 横項目の順位の付け方について
□投稿者/ 尾形 -(2022/06/22(Wed) 04:39:20)
    どうも、こんにちは


    > ┌繰り返し ( .not #eof ) ← 条件を指定している
    > └繰り返し終了

    この書き方だと
    どの表に対しての .not #eof 判定なのか
    分かりにくいので好みが分かれる気もします


引用返信 [メール受信/OFF] 削除キー/
■13340 / inTopicNo.9)  Re[6]: 横項目の順位の付け方について
□投稿者/ ONnoji -(2022/06/22(Wed) 10:35:45)
    2022/06/22(Wed) 13:05:41 編集(投稿者)

    No13338に返信(尾形さんの記事)
    >>┌繰り返し ( .not #eof ) ← 条件を指定している
    >>└繰り返し終了
    >
    > この書き方だと
    > どの表に対しての .not #eof 判定なのか
    > 分かりにくいので好みが分かれる気もします

    なるほど。

    よく読んでみると[繰り返し...繰り返し終了]は2か所あったんですね。(^^ゞ

     ■1番めの繰り返し

     表 "一時ファイル"
     &名前=""
     絞り込み [点数]{≠#U}      ← この絞り込みで0レコードになる可能性があります
     並べ替え {[氏名]昇順,[点数]降順}
     ジャンプ 行番号=先頭
    ┌繰り返し

    │  :
    │  :
    │  :

    │ ジャンプ 行番号=次行
    ←─条件 (#EOF=1) 繰り返し中止
    └繰り返し終了

    これ↑は絞り込みで0レコードになる可能性があります。

    もちろん、普通にはそんなことは起きませんよね。

    でも、失敗は想定外の事から起きるんですよね。


     ■2番めの繰り返し

    (編集表 "一時ファイル")←必ずレコードが存在するか否かはプログラムの構造に依存します
     ジャンプ 行番号=先頭
    ┌繰り返し       
    │  :
    │  :
    │ &i=[名前順]

    │ 編集表 "元表"
    │ ジャンプ 行番号=&i
    │ コマンド "行訂正 [" + &科目の名称 + "]=&科目の順位

    │ 編集表 "一時ファイル"
    │ ジャンプ 行番号=次行
    ←─条件 (#EOF=1) 繰り返し中止
    └繰り返し終了


    なるほど、よく見たら2つの編集表("一時ファイル"と"元表")を行き来していますね。

    この場合でも、繰り返しに条件の( .not #eof )を付けても動作には影響しないです。

    > どの表に対しての .not #eof 判定なのか

    むしろ、[ジャンプ 行番号=先頭]の直前に[編集表 "一時ファイル"]を補った方が分かり易いですね。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    2つの編集表を行き来する場合には、最初の出発点がどちらなのか最初に[編集表]コマンドで明示した方がよいですね。

    p.s.

    当然ですがプログラムの書き方は自由です。

    しかし、何よりもエラーを起こしにくいように書くことを心掛けるべきだと思います。

    そして、他人(この場合には未来の自分を含みます)が見ても分かり易いように心掛けたいものですね。

    それを踏まえた上で、いわゆる「好み」に関しては個人個人千差万別なので仕方ないですね。


引用返信 [メール受信/OFF] 削除キー/
■13341 / inTopicNo.10)  Re[7]: 横項目の順位の付け方について
□投稿者/ T.S -(2022/06/22(Wed) 20:36:00)
    ONnoji 様
    natsu 様
    尾形 様

     ご回答いただきありがとうございました。
     イベントや複雑な項目計算式、一括処理と回答いただき有難うございました。

     回答いただいたものを使わせていただき、希望どおりの処理が出来ました。
     本当に助かりました。

     イベントや一括処理でのコマンド、項目計算式の関数など私がこれまで使った事の無いもの使われており、

    非常に勉強になりました。

     今後も精進してまいりますので、御指南等よろしくお願いいたします。
解決済み!
引用返信 [メール受信/OFF] 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

Mode/  Pass/

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

- Child Tree -
- Antispam Version -