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

No15144 の記事


■15144 / )  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] 削除キー/


Mode/  Pass/

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

- Child Tree -
- Antispam Version -