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

■15136 / 親記事)  配列変数の扱いについて
  
□投稿者/ ジェダイの桐 -(2025/10/22(Wed) 17:46:01)
    桐10s Windows10を使用しています。


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

    知りたい事

    配列変数は #対応番号 のような 要素数に対応する文字列で 要素数を取得する
    関数が有るのか?


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

    今やっている取得方法 例

    変数宣言 自動,文字列{ &月名Dim[12] }
    変数宣言 自動,文字列{ &targetNum }
    変数宣言 自動,整数 { &i, &loop, &step = 1 }

     &月名Dim = { "睦月","如月","弥生","卯月","皐月","水無月","文月", "葉月", "長月", "神無月", "霜月", "師走" }

     &loop = #配列要素数( "月名Dim" )

     繰り返し &i = 1, &loop, &step
       if ( &月名Dim[ &i ] = "葉月" )
         &targetNum = #文字列( &i )
         繰り返し中止
       end
     繰り返し終了

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

    こんにちは。

    今やっている方法で、要素数を取得できているんですが、要素数が 257 あります。
    なので、 #対応番号 のような関数があればなぁ・・・

    と思い質問しました。

    ヘルプを見てみたんですが、自分では見つける事が出来ませんでした。

    お時間がある時、分かる方回答頂けたら幸いですm(__)m





引用返信 [メール受信/OFF] 削除キー/
■15137 / ResNo.1)  Re[1]: 配列変数の扱いについて
□投稿者/ ONnoji -(2025/10/22(Wed) 18:47:54)
    2025/10/23(Thu) 00:24:15 編集(投稿者)

    > 知りたい事
    > 配列変数は #対応番号 のような 要素数に対応する文字列で 要素数を取得する
    > 関数が有るのか?

    #対応番号( )関数は半角コンマで区切られた文字列のn番めの値を返すものですね。
             ・・・・・・・・・・・・・・・・・・

    この場合、半角コンマで区切られた文字列は、文字列定数であっても、文字列型変数であってもよいわけですが、

    いずれにしても、関数の対象は1つのストリング(ひも:文字列)なワケです。
            ・・・・・・・・・・・・・・・・・・・・・・・

    お尋ねの内容は、配列だからと言っても本質的には複数の変数と同じワケで、ひとまとめには扱えないですよ。

    従って、1つのストリング(ひも:文字列)を扱う#対応番号( )関数のように、

    配列変数(または複数の変数)を対象にして、ひとまとめに扱う関数はありませんね。

    最初からそのような関数はありませんで済むのですが、以上のように長々と講釈しました。失礼しました。(^^ゞ

     ◇ ◇ ◇ ◇ ◇

    さて、本題ですが、この質問の趣旨は、

    1.個々の配列変数を[繰り返し...繰り返し終了]で探索するスピードが遅いからでしょうか?

    2.それとも、毎回のコーディングの手間が大変だから、もう少し簡便にしたいからなのでしょうか??

    もしも、1.ならば処理速度が速いPCを使うしか方法がありませんよ。

    しかし、2.ならば、

    探索する文字列と探索する配列変数名を引数にしたプロシージャ(手続き定義開始...手続き定義終了)を用意すればOKだと思いますよ。

    例えば、

      :
      :
     &月名Dim = { "睦月","如月","弥生","卯月","皐月","水無月","文月", "葉月", "長月", "神無月", "霜月", "師走" }
      :
      :
     &string = "葉月"
     手続き実行 prcStringDimSeek( &string, &月名Dim, &foundNum ) /* 配列変数全体を渡す時には、角かっこ([])と要素数は書かない */
     if ( &foundNum <> 0 )

      ** found!
     else

      ** not found!
     end
      :
      :


    手続き定義開始 prcStringDimSeek( 文字列 &string, 参照 文字列 &stringDim[], 参照 整数 &foundNum )
     変数宣言 自動,文字列{ &icon, &title = "prcStringDimSeek( )", &msg }
     変数宣言 自動,整数 { &found }
     変数宣言 自動,整数 { &i, &loop, &step }

     &foundNum = 0
     &found  = 0

     &loop = #配列要素数( "stringDim" )
     &step = 1
     繰り返し &i = 1, &loop, &step

      if ( &stringDim[ &i ] = &string )

       &foundNum = &i
       &found  = 1
       繰り返し中止
      end

     繰り返し終了

    手続き定義終了

    p.s.

    プロシージャ:prcStringDimSeek() は、utx_list3.kex / INF_都道府県picker.kex / IPS_MV2LBX.kex において既に使用されています。(^^ok

    お試しあれ。(@^^)/~~~

    p.p.s.

    配列変数を手続きの引数にする場合のキモは次の通りです。

    ・[手続き実行]コマンドの実引数で配列変数全体を渡す時には、角かっこ([])と要素数は書かないこと

    ・[手続き定義開始]コマンドの仮引数は必ず[参照]として、角かっこ([])だけを書くこと

    以上です。アハハハha (^^ok

    <参考>

    桐の釣魚大全のトップ > フォームアプリケーション教書 第2部
    28.4 指定した文字列の要素番号を得る
    https://silicon7565.cloudfree.jp/guide/guide_Part2.htm#section28-4



引用返信 [メール受信/OFF] 削除キー/
■15138 / ResNo.2)  Re[2]: 配列変数の扱いについて
□投稿者/ ジェダイの桐 -(2025/10/23(Thu) 08:22:11)
    ONnojiさん


    おはようございます!


    > いずれにしても、関数の対象は1つのストリング(ひも:文字列)なワケです。
    >         ・・・・・・・・・・・・・・・・・・・・・・・
    >
    > お尋ねの内容は、配列だからと言っても本質的には複数の変数と同じワケで、ひとまとめには扱えないですよ。
    >
    > 従って、1つのストリング(ひも:文字列)を扱う#対応番号( )関数のように、
    >
    > 配列変数(または複数の変数)を対象にして、ひとまとめに扱う関数はありませんね。
    >
    > 最初からそのような関数はありませんで済むのですが、以上のように長々と講釈しました。失礼しました。(^^ゞ


    なるほど。
    納得しました。

    配列変数とは、複数の変数がある事と同じですもんね。
    つまり、ひと繋ぎではない。

    勉強になりましたm(__)m


    > 1.個々の配列変数を[繰り返し...繰り返し終了]で探索するスピードが遅いからでしょうか?
    >
    > 2.それとも、毎回のコーディングの手間が大変だから、もう少し簡便にしたいからなのでしょうか??


    両方なんです・・・

    2に関しては、ONnojiさんに教えて貰った事を実装させてもらいます(^^ゞ
    あの手続きは便利ですね。


    1、の方ですが、257の配列に対して、必要であれば30回前後(動的に回数は変化します)チェックする事をやろうとしています。
    無駄打ちが多くて処理速度が若干気になったので、対応番号のような物があればなぁ・・・

    と思い質問したのでした(^^ゞ

    お昼から、教えて頂いた手続きを組み込みたいと思います。

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





解決済み!
引用返信 [メール受信/OFF] 削除キー/
■15139 / ResNo.3)  Re[3]: 配列変数の扱いについて
□投稿者/ ONnoji -(2025/10/23(Thu) 10:26:21)
    2025/10/23(Thu) 10:42:33 編集(投稿者)

    >>1.個々の配列変数を[繰り返し...繰り返し終了]で探索するスピードが遅いからでしょうか?
    >>2.それとも、毎回のコーディングの手間が大変だから、もう少し簡便にしたいからなのでしょうか??
    >
    > 両方なんです・・・
    > 2に関しては、ONnojiさんに教えて貰った事を実装させてもらいます(^^ゞ
    > あの手続きは便利ですね。
    >
    > 1、の方ですが、257の配列に対して、必要であれば30回前後(動的に回数は変化します)チェックする事をやろうとしています。
    > 無駄打ちが多くて処理速度が若干気になったので、対応番号のような物があればなぁ・・・
    > と思い質問したのでした(^^ゞ

    処理時間が掛かるということですか?

    こういう場合には、どの部分がボトルネックになっているかを確かめる必要がありますよ。
             ・・・・・・・・・・・・・・・・・・・・・・・

     トレース出力 _#時刻

    とかを挿入して、時間が掛かっている部分を確かめてください。

     ◇ ◇ ◇ ◇ ◇

    > 257の配列に対して、必要であれば30回前後(動的に回数は変化します)チェックする事をやろうとしています。

    1.ひとつの配列変数を用意して、同じ配列変数を最大30回前後チェックするということでしょうか?
                    ・・・・・・・・・・・・・・・・・・・

    2.それとも、チェックする配列変数はチェックする度に異なる配列変数になるのでしょうか??
                      ・・・・・・・・・・・・・・・・・・

    ひょっとして、部品展開・逆展開のような事をやろうとしていますか??

    もしも、1.ならば、配列変数の文字数に拠りますが、

    事前に半角コンマ区切りストリング(ひも:文字列)を生成すれば、#対応番号( )関数が使えますよ。

    配列変数の文字列中に半角コンマを含む場合には、全角コンマまたは他の文字に文字置換すればOKです。

    もしも、半角コンマ区切りストリング(ひも:文字列)が4000文字を超える場合には、複数の変数にしてもいいですよ。

    (例)

     変数宣言 局所,文字列{ &mStringList1, &mStringList2, &mStringList3 }
      または
     変数宣言 局所,文字列{ &mStringListDim[3] }

     ◇ ◇ ◇ ◇ ◇

    何をしたいのか不明ですが・・・

    配列変数にこだわらないで、表(.tbx)にデータを展開してもいいかもしれません。

    以上です。

    p.s.

    <参考>

     私も配列変数は面倒なので↓こんな事しています。アハハハha (^^ok

     INF_ObjectList.kex より

      定数宣言 局所,文字列{ &mPropertyList998      = "入力支援ボタン,オブジェクト名,入力支援ツールの種別,選択値リスト,選択値の設定,選択時置換,背景モー ・・・ "
      定数宣言 局所,文字列{ &mPropertyList999      = "ファミリ,オブジェクト名,定義時の表示,フォーカス取得,フォーカス喪失,マウス左ダウン,マウス左アッフ ・・・ "
      定数宣言 局所,文字列{ &mPropertyListフォーム     = "フォーム,オブジェクト名,作成者名,スタイル名,フォームの形式,参照表,編集対象表,表の共有,表の更新, ・・・ "
      定数宣言 局所,文字列{ &mPropertyListワークスペース   = "ワークスペース,オブジェクト名,背景モード,背景色,影の太さ,影の色" }       ・・・ "
      定数宣言 局所,文字列{ &mPropertyListフォーム操作バー  = "フォーム操作バー,オブジェクト名,ボタンの大きさ,ジャンプバー,ボタンの種類1,ボタンの種類2 ・・・ "
      定数宣言 局所,文字列{ &mPropertyListグループ操作バー = "グループ操作バー,オブジェクト名,ボタンの大きさ,ジャンプバー,ボタンの種類1,ボタンの種 ・・・ "
      定数宣言 局所,文字列{ &mPropertyListフォームヘッダ部  = "フォームヘッダ部,オブジェクト名,セクションの高さ,背景モード,背景色,背景パターン,パターン色, ・・・ "
      定数宣言 局所,文字列{ &mPropertyListフォーム明細部  = "フォーム明細部,オブジェクト名,セクションの高さ,背景モード,背景色,背景パターン,パターン色,処理対象 ・・・ "
      定数宣言 局所,文字列{ &mPropertyListフォームフッタ部   = "フォームフッタ部,オブジェクト名,セクションの高さ,背景モード,背景色,背景パターン,パターン色,立 ・・・ "
      定数宣言 局所,文字列{ &mPropertyList001 = "ラベル,オブジェクト名,オブジェクトファミリー,標題,横位置,縦位置,開始位置X,開始位置Y,背景モード,背景色,前 ・・・ "
      定数宣言 局所,文字列{ &mPropertyList010 = "テキストボックス,オブジェクト名,オブジェクトファミリー,ソース,データ型,横位置,縦位置,開始位置X,開始位置Y, ・・・ "
      定数宣言 局所,文字列{ &mPropertyList014 = "グループ項目,オブジェクト名,オブジェクトファミリー,グループソース,データ型,グループソート,横位置,縦 ・・・ "
      定数宣言 局所,文字列{ &mPropertyList020 = "グループボックス,オブジェクト名,オブジェクトファミリー,ソース,データ型,背景モード,背景色,前景モード, ・・・ "
      定数宣言 局所,文字列{ &mPropertyList030 = "コマンドボタン,オブジェクト名,オブジェクトファミリー,標題,機能名1,機能パラメータリスト1,機能名2,機能パ ・・・ "
      定数宣言 局所,文字列{ &mPropertyList035 = "トグルボタン,オブジェクト名,オブジェクトファミリー,ソース,データ型,背景モード,背景色,前景モード,前景色 ・・・ "
      定数宣言 局所,文字列{ &mPropertyList037 = "内部トグルボタン,オブジェクト名,オブジェクトファミリー,背景モード,背景色,前景モード,前景色,立体色モード ・・・ "
      定数宣言 局所,文字列{ &mPropertyList060 = "コンボボックス,オブジェクト名,オブジェクトファミリー,ソース,データ型,背景モード,背景色,前景モード,前景 ・・・ "
      定数宣言 局所,文字列{ &mPropertyList070 = "リストボックス,オブジェクト名,オブジェクトファミリー,横位置,ソースリスト,選択値リスト,選択値の設定,サイズの自 ・・・ "
      定数宣言 局所,文字列{ &mPropertyList075 = "入力支援ボタン,オブジェクト名,入力支援ツールの種別,選択値リスト,選択値の設定,選択時置換,背景モード,背景色,前景モ ・・・ "
      定数宣言 局所,文字列{ &mPropertyList080 = "ピクチャ,オブジェクト名,オブジェクトファミリー,ピクチャの取り込み,ピクチャソース,ピクチャ表示サイズ,ピ ・・・ "
      定数宣言 局所,文字列{ &mPropertyList090 = "直線,オブジェクト名,オブジェクトファミリー,背景モード,背景色,立体色モード,境界線の太さ,境界線の種類,境界線の ・・・ "
      定数宣言 局所,文字列{ &mPropertyList092 = "楕円,オブジェクト名,オブジェクトファミリー,背景モード,背景色,境界線の太さ,境界線の種類,境界線の色,画面表示,繰 ・・・ "
      定数宣言 局所,文字列{ &mPropertyList096 = "扇形,オブジェクト名,オブジェクトファミリー,背景モード,背景色,境界線の太さ,境界線の種類,境界線の色,開始角度,終 ・・・ "
      定数宣言 局所,文字列{ &mPropertyList098 = "角丸め矩形,オブジェクト名,オブジェクトファミリー,背景モード,背景色,境界線の太さ,境界線の種類,境界線の色,角丸め ・・・ "
      定数宣言 局所,文字列{ &mPropertyList110 = "サブフォーム,オブジェクト名,オブジェクトファミリー,サブフォーム,リンク元サブフォーム,グループ値リスト,ク ・・・ "
      定数宣言 局所,文字列{ &mPropertyList120 = "グラフ,オブジェクト名,オブジェクトファミリー,グラフ条件名,グラフモード,表示開始行番号,表示対象行数,背景モ ・・・ "
      定数宣言 局所,文字列{ &mPropertyList130 = "バーコード,オブジェクト名,オブジェクトファミリー,ソース,データ型,横位置,バーコードの種類,背景モード, ・・・ "
      定数宣言 局所,文字列{ &mPropertyList200 = "行セレクタ,オブジェクト名,オブジェクトファミリー,縦位置,開始位置Y,行番号の表示,背景モード,背景色,前景モード ・・・ "
      ** 2023.02.17 定数:&mPropertyList140  を新規追加しました                           ・・・ "
      定数宣言 局所,文字列{ &mPropertyList140 = "Webビュー,オブジェクト名,オブジェクトファミリー,リンクソース,背景色,立体色モード,境界線モード,境界線の太 ・・・ "

引用返信 [メール受信/OFF] 削除キー/
■15140 / ResNo.4)  Re[1]: 配列変数の扱いについて
□投稿者/ うにん -(2025/10/23(Thu) 11:00:49)
    要素数は#配列要素数で取得できてるんで、ある値を持つ要素番号を知りたいのですね。。。

    配列値を一括して扱う関数は、合計だけはあるんですねえ。
    連結する関数があればよかったですね。
    #配列代入という関数があるが、代入する値は要素ごとでなく1回しか計算されないので応用できなかった。

    >要素数が 257 あります
    データが多いのが問題なら、配列でなくテーブルにすれば検索できますよね...
引用返信 [メール受信/OFF] 削除キー/
■15147 / ResNo.5)  Re[2]: 配列変数の扱いについて
□投稿者/ ジェダイの桐 -(2025/10/24(Fri) 15:22:25)
    うにんさん


    こんにちは。


    > 要素数は#配列要素数で取得できてるんで、ある値を持つ要素番号を知りたいのですね。。。


    私の意図した事の正しい言葉は 要素番号 だったんですね。
    勉強になりました。


    > >要素数が 257 あります
    > データが多いのが問題なら、配列でなくテーブルにすれば検索できますよね...


    その手がありましたね!
    うわぁー。

    配列変数ではなく、カンマ区切りのリストを作るコードを作っちゃいました(^^ゞ

    この返信を書いている時に、落ち着いて

    > 配列でなくテーブルにすれば検索できますよね...

    これを読むと正にその通りでした・・・
    今後に活かしたいと思います。

    アドバイスありがとうございましたm(__)m



引用返信 [メール受信/OFF] 削除キー/
■15148 / ResNo.6)  Re[4]: 配列変数の扱いについて
□投稿者/ ジェダイの桐 -(2025/10/24(Fri) 15:57:23)
    2025/10/24(Fri) 16:21:38 編集(投稿者)
    2025/10/24(Fri) 16:02:50 編集(投稿者)
    2025/10/24(Fri) 16:00:05 編集(投稿者)

    ONnojiさん


    こんにちは。


    >>257の配列に対して、必要であれば30回前後(動的に回数は変化します)チェックする事をやろうとしています。
    >
    > 1.ひとつの配列変数を用意して、同じ配列変数を最大30回前後チェックするということでしょうか?
    >                 ・・・・・・・・・・・・・・・・・・・


    そうでした。
    しかし、回避方法を考えました(^^ゞ


    > 2.それとも、チェックする配列変数はチェックする度に異なる配列変数になるのでしょうか??
    >                   ・・・・・・・・・・・・・・・・・・


    いえ。同一の配列変数です。


    > ひょっとして、部品展開・逆展開のような事をやろうとしていますか??


    やりたい事は、 ■14473 / inTopicNo.1)  主ウィンドウ と 補助ウィンドウについて と根本的に同じで
    生産指示を入力したら、指示した製品に使用する在庫有無の取得です。

    オペレータが生産指示をしても、材料在庫が無いと生産が出来ないのですが、
    現状はオペレータが材料在庫が有るか無いかが分からないんです。


    > もしも、1.ならば、配列変数の文字数に拠りますが、
    >
    > 事前に半角コンマ区切りストリング(ひも:文字列)を生成すれば、#対応番号( )関数が使えますよ。


    一番最初に カンマ区切りリスト 作成を試みました。
    だけど、意図した値にならなかったんです。

    文字数に引っかかったのだと思います。
    ( これに関しては、最初から気にはなっていたんです・・・ )


    それなら、配列にするか。と思ったんですが、要素番号取得に無駄打ちが多くなるせいか、
    処理速度が若干気になる様になったんです。


    それで、対応番号のような関数がないかと質問したのでした(^^ゞ


    > もしも、半角コンマ区切りストリング(ひも:文字列)が4000文字を超える場合には、複数の変数にしてもいいですよ。
    >
    > (例)
    >
    >  変数宣言 局所,文字列{ &mStringList1, &mStringList2, &mStringList3 }
    >   または
    >  変数宣言 局所,文字列{ &mStringListDim[3] }


    これに インスピレーションを受けて コードを作成しました。
    但し、リストを固定で作るのではなく 動的に 作成したかったので 変則的なコードかな? って自分で思うのですが。
    ( フォーム + イベント で固有変数を意図して使用する事が初めてです )


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

    名札 メイン
     
     変数宣言 局所, 整数  { &mCNT }

     

    手続き定義開始 prcGETウレタン在庫数List( 参照 数値 &当日在庫数Dim[], 数値 &loop )
     変数宣言 自動,文字列 { &title = "prcGETウレタン在庫数List()", &msg }
     変数宣言 自動,文字列 { &comma = #jis( #hex("2C") ), &WQ = #jis( #hex("22") ) }
     変数宣言 自動,整数  { &i, &step = 1 }
     変数宣言 自動,整数  { &j }
     変数宣言 自動,整数  { &traceON }

     &traceON = 1
     条件 ( &traceON ) トレース出力 &title + "を実行開始しました"

     &当日在庫数Dim = { "" }

     ジャンプ 行番号 = 先頭
    ┌繰り返し &i = 1, &loop, &step
    │ &当日在庫数Dim[ &i ] = [当日在庫数]
    │ ジャンプ 行番号 = 次行
    │ 条件 ( &traceON ) トレース出力 _&i, " ", _&当日在庫数Dim[ &i ]
    └繰り返し終了

     ジャンプ 行番号 = 先頭
     &j = 1
     &mCNT = 1
     コマンド "変数宣言 固有,文字列 { &gウレタン品名List" + #STR( &mCNT ) + " }"

    ┌繰り返し &i = 1, &loop, &step
    │┌if ( &j <= 100 )
    ││ コマンド "&gウレタン品名List" + #STR( &mCNT ) + " = &gウレタン品名List" + #STR( &mCNT ) + " + #条件選択( &gウレタン品名List" + #STR( &mCNT ) + " <> #u, " + &WQ + &comma + &WQ + " ) + " + &WQ + [ウレタン品名] + &WQ
    ││ &j = &j + 1
    │├else
    ││ &mCNT =&mCNT + 1
    ││ コマンド "変数宣言 固有,文字列 { &gウレタン品名List" + #STR( &mCNT ) + " }"
    ││ コマンド "&gウレタン品名List" + #STR( &mCNT ) + " = &gウレタン品名List" + #STR( &mCNT ) + " + #条件選択( &gウレタン品名List" + #STR( &mCNT ) + " <> #u, " + &WQ + &comma + &WQ + " ) + " + &WQ + [ウレタン品名] + &WQ
    ││ &j = 2
    │└end
    │ ジャンプ 行番号 = 次行
    └繰り返し終了

     条件 ( &traceON ) トレース出力 &title + "を実行終了しました"

    手続き定義終了

    手続き定義開始 prcGETウレタン仕入情報( 整数 &生産計画ウレタン部TbxNum, 日時 &targetDate, 参照 整数 &canProceed, 参照 文字列 &仕入ウレタン品名NumList, 整数 &loop ) /* &loop = &mCNT */
     変数宣言 自動,文字列 { &title = "prcGETウレタン仕入情報()", &msg }
     変数宣言 自動,文字列 { &targetウレタン品名 }
     変数宣言 自動,文字列 { &comma = #jis( #hex("2C") ) }
     変数宣言 自動,整数  { &仕入計画ウレタン部TbxNum }
     変数宣言 自動,整数  { &i, &step = 1, &offset, &targetNum }
     変数宣言 自動,整数  { &traceON, &return, &logical }

     &traceON = 1
     条件 ( &traceON ) トレース出力 &title + "を実行開始しました"

     &canProceed = 0
     &仕入ウレタン品名NumList = #u

     表 &mTbxFileName仕入計画ウレタン部, モード = 参照
     &仕入計画ウレタン部TbxNum = #is表

     検索 [納期] { = &targetDate }, 文字比較方法 = 自動, 部分一致検索 = しない, 自動調整 = しない, 終了状態 = &return
    ┌if ( &return = 1 )
    │ 絞り込み [納期] { = &targetDate }, 文字比較方法 = 自動, 部分一致検索 = しない
    │ 条件 ( &traceON ) トレース出力 _&loop
    │ ジャンプ 行番号 = 先頭
    │┌繰り返し ( .not #eof )
    ││ &logical = 0
    ││┌繰り返し &i = 1, &loop, &step
    │││ &targetウレタン品名 = [ウレタン品名]
    │││┌if ( &targetウレタン品名 <> "35×70×500" )
    ││││ コマンド "&logical = #対応番号( &gウレタン品名List" + #STR( &i ) + ", &targetウレタン品名 )"
    ││││ 条件 ( &traceON ) トレース出力 _&logical
    ││││ 条件 ( &traceON ) トレース出力 "if ( &logical <> 0 ) : ", if ( &logical <> 0 )
    ││││┌if ( &logical <> 0 )
    │││││ &offset = ( &i - 1 ) × 100
    │││││ &targetNum = &logical + &offset
    │││││ &仕入ウレタン品名NumList = &仕入ウレタン品名NumList + #条件選択( &仕入ウレタン品名NumList <> #u, &comma ) + #文字列( &targetNum )
    │││││ 条件 ( &traceON ) トレース出力 _&i, "  ", _&offset, "  ", _&targetNum
    │││││ 条件 ( &traceON ) トレース出力 _&仕入ウレタン品名NumList
    ││←┼┼─繰り返し中止
    ││││└end
    │││└end
    ││└繰り返し終了
    ││ ジャンプ 行番号 = 次行
    │└繰り返し終了

    │ &canProceed = 1
    └end

     終了 表 &仕入計画ウレタン部TbxNum
     編集表 &生産計画ウレタン部TbxNum

     条件 ( &traceON ) トレース出力 &title + "を実行終了しました"

    手続き定義終了

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

    意図した、&仕入ウレタン品名NumList の取得は出来ました(^^ゞ
    そして、処理速度も比較にならない程、早くなりました。


    ところが、


    > 配列変数にこだわらないで、表(.tbx)にデータを展開してもいいかもしれません。


    うにんさんにも、同じアドバイスを受けたんですが、在庫表.tbx がある訳ですから、検索して
    #行番号 で取得すれば 同じ結果を求める事が出来たなと気付きました・・・


    この思い込みは、自部署で且つ自分のPCで行う作業ではなく、自部署で自分のデータ(在庫表.tbx)を他部署(生産指示を出す部署)へ
    渡して行う作業の為、何故か発想を難しくしていたからだと思います。


    とは言え、頭の体操にもなり今までの自分では考えつかない、動的な文字列リスト取得方法が分かって勉強になった事は事実なのです。


    アドバイスありがとうございましたm(__)m
    今回の経験は、財産になると思います!


    p.s.

    他部署のフォーム( サブフォーム有り )の為、Thin_INF_Framework は組み込んでいませんm(__)m




引用返信 [メール受信/OFF] 削除キー/
■15150 / ResNo.7)  Re[5]: 配列変数の扱いについて
□投稿者/ ONnoji -(2025/10/24(Fri) 16:27:08)
    2025/10/25(Sat) 16:21:44 編集(投稿者)

    > 他部署のフォーム( サブフォーム有り )の為、Thin_INF_Framework は組み込んでいませんm(__)m

    確か・・・、メインフォームにだけ適用すれば使えるハズですよ。
          ・・・・・・・・・・・・・・・・・・・・・・

    サブフォームに組み込まなければOKのハズだったと・・・(^^ゞ
    ・・・・・・・・・・・・・・・・・・・・

     ◇ ◇ ◇ ◇ ◇ ◇ ◇

    桐の釣魚大全のトップ > フォームアプリケーション教書 第2部
    https://silicon7565.cloudfree.jp/guide/guide_Part2.htm#section37-4
    37.4 INF_Framework とメイン&サブフォーム

     拙作:INF_Framework は、当初はメイン&サブフォームでも動作するようになっていました。
    しかし、メイン&サブフォームでは局所変数が上書きされるために、メイン側とサブフォーム側のフォーカスが切り替わるたびに、
    テキストデータを外部へ値を出力して、保存してあったテキストデータを読み込んでというスワップ動作をしていました。
     しかし、手間が掛かる割には、メイン&サブフォームを利用することが非常に少ないので第3版から完全にスワップ動作を中止しました。
    これによって第3版では、メインフォームだけにしか拙作:INF_Framework を導入出来なくなりました。
    ※サブフォーム側に拙作:INF_Framework を導入しようとしても、自動的に検知して導入をキャンセルするようになっています。

引用返信 [メール受信/OFF] 削除キー/
■15158 / ResNo.8)  Re[6]: 配列変数の扱いについて
□投稿者/ ONnoji -(2025/10/25(Sat) 11:42:02)
    2025/10/26(Sun) 11:31:27 編集(投稿者)

    >>他部署のフォーム( サブフォーム有り )の為、Thin_INF_Framework は組み込んでいませんm(__)m
    >
    > 確か・・・、メインフォームにだけ適用すれば使えるハズですよ。
    >       ・・・・・・・・・・・・・・・・・・・・・・
    >
    > サブフォームに組み込まなければOKのハズだったと・・・(^^ゞ
    > ・・・・・・・・・・・・・・・・・・・・
    >
    > サブフォーム側からメインフォームのコマンドボタンをメソッドで実行すれば・・・
    >
    > Thin_INF_Framework のランチャーとか使えるでしょ。アハハハハha

    試してみました。

    ・メインフォームに Thin_INF_Framework を導入する

    ・サブフォームには Thin_INF_Framework を導入しない
     ・・・・・・・・・・・・・・・・・・・・・・・・

    状態で、サブフォームのイベント処理(.kex)に以下のプロシージャを作成する

    手続き定義開始 cmdメインの実行Click( )
     変数宣言 自動,文字列{ &icon, &title = "cmdメインの実行Click( )", &msg }

     メソッド呼び出し ハンドル = &hwindow, @INFcmdWhoAreYou.実行( ) /* メインフォームに配置されたコマンドボタンを実行 */

     メソッド呼び出し ハンドル = &hwindow, @cmdテストClick.実行( )  /* メインフォームに配置されたコマンドボタンを実行 */

    手続き定義終了

    ↑このように[実行]メソッドが実行出来ますよ。

    メインフォームのオブジェクトを指定する場合には、ハンドル = &hwindow パラメータが必要です。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    p.s.

    メイン&サブフォームだから Thin_INF_Framework が使えないというのは誤解・迷信ですよ。

    メインフォームでは普通に使えますよ。

    サブフォームでは INF_Framework のプロシージャが実行出来ないので、サブフォームからメインフォームのコマンドボタンをメソッドで実行してください。

    サブフォームに導入できない理由は、サブフォームの[名札 メイン]でINF_FW の局所変数が上書きされるからです。

    メイン&サブフォームというのは、複数のイベント処理(.kex)がオープンされるわけです。

    だから、うっかりするとサブフォームのイベント処理(.kex)の[名札 メイン]で同名の局所変数が上書きされるわけです。

    こういう所に気を付けなければならないので結構神経使いますよ。

    p.p.s.

    当初はサブフォームでも EZW機能( 項目の列固定やスクロール )が使いたかったのです。

    しかし、Thin_INF_Framework は、EZW機能( 項目の列固定やスクロール )が出来ないサブセットなワケですから、

    局所変数の上書きにだけ注意すればいいとカナと割り切れますね。

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



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

このスレッドに書きこむ

Mode/  Pass/

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

- Child Tree -
- Antispam Version -