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

■15141 / 親記事)  繰り返しコマンドについて
  
□投稿者/ ひで -(2025/10/23(Thu) 17:18:15)
    「繰り返し」コマンドを使うときにあまり理解できていません
    皆様の例題とか見ていますと、もっと簡略化できるのではと思っています

    今回の場合ですと
    [連番]項目の1から21を順に選んで
    [連番2]項目を#連番で置換するという事です
    (皆様はすぐおわかりですよね・)

    桐のホームページのヘルプで
    配列変数(?)とか出てきて
    繰り返し &回数 = 1,64
    &氏名[ &回数 ] = [氏名]

    なんのことだか分からないのですが・
    こういう感じで、コマンドの意味がわかればもっと楽に利用できるのではと思い質問させていただきました

    初心者過ぎる質問で申し訳ありませんが
    どなたか解説していただける助かります
    どうか、よろしくお願い致します


    -------------------------------

    変数宣言 整数{&回数, &回数2 }

    表 ”AAA.tbl”
    &回数 = 1

    繰り返し
    条件 (22=&回数)繰り返し中止

    並べ替え 条件名="番号"
    絞り込み [連番]{=&回数}
    置換 [連番2]=#連番
    代入 &回数2=&回数+1
    代入 &回数=&回数2
    解除 *
    繰り返し終了

    名札 中止
    終了



引用返信 [メール受信/OFF] 削除キー/
■15142 / ResNo.1)  Re[1]: 繰り返しコマンドについて
□投稿者/ ONnoji -(2025/10/23(Thu) 18:27:52)
    No15141に返信(ひでさんの記事)
    > 「繰り返し」コマンドを使うときにあまり理解できていません
    > 皆様の例題とか見ていますと、もっと簡略化できるのではと思っています
    >
    > 桐のホームページのヘルプで
    > 配列変数(?)とか出てきて
    > 繰り返し &回数 = 1,64
    > &氏名[ &回数 ] = [氏名]
    >
    > なんのことだか分からないのですが・
    > こういう感じで、コマンドの意味がわかればもっと楽に利用できるのではと思い質問させていただきました

    プログラミングの経験が(ほとんど)無い人にとっては、[桐 - ヘルプ]の内容は中々難しく感じますよね。

    何故ならば、桐(またはVBやVBA等を含む)のプログラミング経験が無い人にとって、

    [桐 - ヘルプ]には[プログラミングの基本]がほとんど書かれていないからです。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

     ◇ ◇ ◇ ◇ ◇

    おそらく、[プログラミングの基本]を身に着けないで、他人が添削したものをご覧になっても、貴殿にとって意味不明なものに見えると思います。

    そこで、少し遠回りになりますが、拙作の[入門講座]をお読みになる事をおススメします。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

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

     6 プログラムの制御構造
     https://silicon7565.cloudfree.jp/primer/primer_side_reader.html#section6

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

    そして入門講座よりも進んだ内容として拙作の[解説]をお読みになってください。
       ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

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

    [解説]の内容は何となく分るでも構いませんので、一通りお読みください。

    そうすると、何となく分ってくるものです。

    誰でも最初からプログラミングが出来たわけではありません。

    誰でも最初は初級者なんです。かくいう著者( ONnoji )も最初は初級者でした。

    なので、勇気を出して一歩踏み出してみてください。v(^^)v

    p.s.

    > 今回の場合ですと
    > [連番]項目の1から21を順に選んで
    > [連番2]項目を#連番で置換するという事です
    > (皆様はすぐおわかりですよね・)

    添削は簡単に出来ますが、「なんでそうするのか」という「基本的な事」は添削を見てもなかなか理解出来ないと思います。

    まずは、[急がば回れ]です。

    プログラミングの基本知識をご自身が吸収してから、この掲示板で他人が添削したものをご覧になることをおススメします。

引用返信 [メール受信/OFF] 削除キー/
■15143 / ResNo.2)  Re[1]: 繰り返しコマンドについて
□投稿者/ うにん -(2025/10/23(Thu) 19:56:14)
    > [連番]項目の1から21を順に選んで
    > [連番2]項目を#連番で置換するという事です
    [連番] [連番2]
    1 1
    1 2
    1 3
    2 1
    2 2
    のようなことですよね。
    [連番]の順に並んでるなら、もう1つ仮の項目を作って全体に連番を振ってしまえば、絞り込みせずに#順位で一度に置換できるかな。

    グループごとに連番を1から始める、のはレポートの機能にありますね。
引用返信 [メール受信/OFF] 削除キー/
■15144 / ResNo.3)  Re[1]: 繰り返しコマンドについて
□投稿者/ ONnoji -(2025/10/24(Fri) 10:48:22)
    2025/10/24(Fri) 11:05:34 編集(投稿者)

    No15141に返信(ひでさんの記事)
    > 「繰り返し」コマンドを使うときにあまり理解できていません
    > 皆様の例題とか見ていますと、もっと簡略化できるのではと思っています
    >
    > 変数宣言 整数{&回数, &回数2 }
    >
    > 表 ”AAA.tbl”
    > &回数 = 1
    >
    > 繰り返し
    > 条件 (22=&回数)繰り返し中止
    >
    > 並べ替え 条件名="番号"
    > 絞り込み [連番]{=&回数}
    > 置換 [連番2]=#連番
    > 代入 &回数2=&回数+1
    > 代入 &回数=&回数2
    > 解除 *
    > 繰り返し終了
    >
    > 名札 中止
    > 終了

    ↑この一括処理を読んでも何をしているのかサッパリわかりませんでした。本当ですよ。(^^ゞ

    何故ならば、普通は[絞り込み→置換]を使わずに、[行訂正]のみで1パスで実行するからです。
                            ・・・・・・・・・・・・・・・・

    うにんさんが、「これ枝番じゃね」と指摘されたので、実際に動かしてみると確かに「枝番の割り振り」でした。(^^ゞ

    せっかくですので、[添削]と[行訂正]のみの例を以下に示します。

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

    ■ 以下は、一応添削しましたが、無駄に絞り込んでいるので効率が非常に悪いです
                    ・・・・・・・・・・・・・・・・・・・・・・

     変数宣言 整数{&回数, &回数2 }

     データパス名 #一括パス名, 固定 = しない
     表 ”AAA.tbl”
     &回数 = 1

    ┌繰り返し

    │ トレース出力 _&回数
    │ **条件 (22=&回数)繰り返し中止
    ←─条件 ( &回数 = 22 ) 繰り返し中止

    │ *条件名="番号" の内容が不明なのでコメントアウト
    │ *並べ替え 条件名="番号"
    │ 並べ替え { [連番]昇順 }

    │ 絞り込み [連番]{ = &回数 }
    │ トレース出力 _( .not #終端行 )
    │┌if ( .not #終端行 )
    ││
    ││ 置換 [連番2] = #連番
    ││ &回数2 = &回数 + 1
    ││ &回数 = &回数2
    ││ *解除 *
    ││ 解除 1
    │└end

    └繰り返し終了

     *不要なのでコメントアウト
     *名札 中止
     終了


    ■ [絞り込み→置換]を使わずに、[行訂正]のみで1パスで実行する例です。
                     ・・・・・・・・・・・・・・・・・

    ※コピペで動くハズです。(^^ゞ

     変数宣言 整数{ &連番, &枝番 }

     データパス名 #一括パス名, 固定 = しない
     表 "AAA"  /* 桐9系か桐10系か不明なので、拡張子は省略しました */

     if ( .not #終端行 ) /* レコードが無ければ実行しません */

      並べ替え { [連番]昇順 } /* 枝番を振るために並べ替えます */

      ** 最初の1レコードは無条件に &枝番 の値はイチ(1)
      &連番 = [連番]
      &枝番 = 1
      行訂正 [連番2] = &枝番

      ジャンプ 行番号 = 次行   /* 2行めから始めます */
      繰り返し ( .not #終端行 ) /* 表の先頭から終端行まで[ジャンプ]コマンドで移動するときの条件 */

       if ( [連番] = &連番 )

        ** 連番が同じなので、変数:&枝番 の値をインクリメント(イチ加算)します
        &枝番 = &枝番 + 1
        行訂正 [連番2] = &枝番
       else

        ** 連番が異なるので、変数:&連番 の値を初期化します
        &連番 = [連番]
        &枝番 = 1
        行訂正 [連番2] = &枝番
       end

       ジャンプ 行番号 = 次行 /* これを忘れると無限ループになりますので注意 */
      繰り返し終了

     end

     *終了


    ■ 以下は同じものを[行動ダイアグラム]で[プログラムの構造]を視覚化したものです

    ※このダイアグラムは拙作:整形ユーティリティを使用して作成しました

     変数宣言 整数{ &連番, &枝番 }

     データパス名 #一括パス名, 固定 = しない
     表 "AAA"  /* 桐9系か桐10系か不明なので、拡張子は省略しました */

    ┌if ( .not #終端行 ) /* レコードが無ければ実行しません */

    │ 並べ替え { [連番]昇順 } /* 枝番を振るために並べ替えます */

    │ ** 最初の1レコードは無条件に &枝番 の値はイチ(1)
    │ &連番 = [連番]
    │ &枝番 = 1
    │ 行訂正 [連番2] = &枝番

    │ ジャンプ 行番号 = 次行   /* 2行めから始めます */
    │┌繰り返し ( .not #終端行 ) /* 表の先頭から終端行まで[ジャンプ]コマンドで移動するときの条件 */
    ││
    ││┌if ( [連番] = &連番 )
    │││
    │││ ** 連番が同じなので、変数:&枝番 の値をインクリメント(イチ加算)します
    │││ &枝番 = &枝番 + 1
    │││ 行訂正 [連番2] = &枝番
    ││├else
    │││
    │││ ** 連番が異なるので、変数:&連番 の値を初期化します
    │││ &連番 = [連番]
    │││ &枝番 = 1
    │││ 行訂正 [連番2] = &枝番
    ││└end
    ││
    ││ ジャンプ 行番号 = 次行 /* これを忘れると無限ループになりますので注意 */
    │└繰り返し終了

    └end

     *終了

    p.s.

    返信される際には、読み難いので不要な引用は削除して、引用は最小限にしてください。
             ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    質問の際には使っている桐のバージョンを明示してください。

    なお、一括処理や[フォーム+イベント処理]を使わなくても出来るのかもしれませんが、頭が回りませんでした。(^^ゞ

    それでは、(@^^)/~~~
引用返信 [メール受信/OFF] 削除キー/
■15145 / ResNo.4)  Re[2]: 繰り返しコマンドについて
□投稿者/ うにん -(2025/10/24(Fri) 11:58:16)
    >頭が回りませんでした。(^^ゞ

    私も関数のヘルプを見て「#順位が使えそうだが同じ値があると同じ順位になってしまうから」余分な項目とか書いてましたけど、#直前値を使えば全体を1回置換だけでできるはずですね。
    長々と条件(前行と同じか、1行目か、など)を書く必要が出てくるんで、それを省略できるのが#順位なんですよね...

    絞り込む前のソート状態がどうなのか明記されてないので、一旦置換用にソートして後で戻す必要があるかもしれませんが...
引用返信 [メール受信/OFF] 削除キー/
■15146 / ResNo.5)  Re[3]: 繰り返しコマンドについて
□投稿者/ ONnoji -(2025/10/24(Fri) 13:12:15)
    2025/10/24(Fri) 16:37:02 編集(投稿者)

    > >頭が回りませんでした。(^^ゞ
    > 直前値を使えば全体を1回置換だけでできるはずですね。

    [ワンライン]コマンドで行けるかと思ったけれど、

    インクリメントに使う変数:&実行リターン の初期化が必要でした。残念 (>_<)

    以下に、組み込み変数:&実行リターン と #直前値を使った例を以下に示します。(^^ok

    ■ [置換]を使った例

     データパス名 #一括パス名, 固定 = しない
     表 "AAA" /* 桐9系か桐10系か不明なので、拡張子は省略しました */

     並べ替え { [連番]昇順 }
     &実行リターン = 0  /* インクリメントに使う変数の初期化 */
     置換 [連番2] = #cond( [連番] <> #直前値( [連番],[連番] ), #代入( &実行リターン, 1 ), 1, #代入( &実行リターン, &実行リターン + 1 ) )

     *終了

    ■ 表の定義

    項目番号 項目名 データ型
    1     連番  数値
    2     連番2  数値

    ちなみに、

    一括処理や[フォーム+イベント処理]では無く、普通の対話操作ならば

    表を開いて、

    1.[変数管理]で組み込み変数:&実行リターンの値をゼロにする

    2.[連番]で整列する

    3.項目置換で計算式に式を入れて実行

    と3ステップでOKです。

    p.s.

    単純に枝番を振るだけならば、今回の例の方が圧倒的に簡単ですね。アハハハハha

    ただし、ちょっと見には、何なのか?分かり難いです。

    トリッキーとまでは言えないですが、分かり難いのでトリッキーに近いですね。


    しかし、ワンパスでグループごとに処理する場合には、No15144 の例が必要ですね。
        ・・・・・・・・・・・・・・・・・・   ・・・・・・・・・

    No15144 の例の方がが断然応用が効きますよ。v(^^)v




引用返信 [メール受信/OFF] 削除キー/
■15149 / ResNo.6)  Re[4]: 繰り返しコマンドについて
□投稿者/ ひで -(2025/10/24(Fri) 16:15:54)
    みなさん、いろいろありがとうございました
    キチンと勉強してみます

引用返信 [メール受信/OFF] 削除キー/
■15154 / ResNo.7)  Re[4]: 繰り返しコマンドについて
□投稿者/ うにん -(2025/10/24(Fri) 22:20:24)
    変数を使わずに、
    #直前値([連番2],0)+1
    でできませんか。

    #cond( [連番] <> #直前値( [連番],[連番] ), 1, 1, #直前値( [連番2] , 0 ) + 1 )

    > No15144 の例の方がが断然応用が効きますよ。v(^^)v

    まあ、DOS桐時代のテクニックですよね。
引用返信 [メール受信/OFF] 削除キー/
■15156 / ResNo.8)  Re[5]: 繰り返しコマンドについて
□投稿者/ ONnoji -(2025/10/25(Sat) 00:37:23)
    No15154に返信(うにんさんの記事)
    > 変数を使わずに、
    > #直前値([連番2],0)+1
    > でできませんか。
    >
    > #cond( [連番] <> #直前値( [連番],[連番] ), 1, 1, #直前値( [連番2] , 0 ) + 1 )

    (例)

     データパス名 #一括パス名, 固定 = しない
     表 "AAA"  /* 桐9系か桐10系か不明なので、拡張子は省略しました */

     並べ替え { [連番]昇順 }
     置換 [連番2] = #cond( [連番] <> #直前値( [連番],[連番] ), 1, 1, #直前値( [連番2] , 0 ) + 1 )

    出来ましたよ。

    p.s.

    >>No15144 の例の方がが断然応用が効きますよ。v(^^)v
    > まあ、DOS桐時代のテクニックですよね。

    いえいえ、同じグループ内の処理をするために Win桐でも非常に有効ですよ。
         ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    むしろ、枝番は副次的な効果ですね。
    ・・・・・・・・・・・・・・・・

引用返信 [メール受信/OFF] 削除キー/
■15157 / ResNo.9)  Re[6]: 繰り返しコマンドについて
□投稿者/ ひで -(2025/10/25(Sat) 10:14:25)
    すごいですね。。
    高度すぎて、、笑
    もっと勉強してみます
    ありがとうございます

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



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

このスレッドに書きこむ

Mode/  Pass/

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

- Child Tree -
- Antispam Version -