| 2025/08/17(Sun) 15:40:32 編集(投稿者)
> 手続き実行 procedureName( "6000,7000,4000", &result )
このイメージで、併合の[連結]を使って加工数リストを作成しました。(^^♪
添付ファイルがあります。
解凍すると4つのファイルがあります
test2_参照表.tbx test2_中央値.kex test2_中央値.tbx test2_中央値.wfx ← コマンドボタンを実行してください
数日を目途に削除しますのでダウンロードはお早めに願います。
◇ ◇ ◇ ◇
■ test2_参照表.tbx
項目番号 項目名 データ型 項目計算式 1 部品コード 文字列 2 加工数 数値 3 作業用 文字列 "," + #str( [加工数] )
部品コード 加工数 作業用 -------------------------- 部品A 6000 ,6000 部品A 7000 ,7000 部品A 4000 ,4000 部品A 10000 ,10000 部品B 7000 ,7000 部品B 4000 ,4000 部品B 10000 ,10000 部品C 500 ,500
■ test2_中央値.tbx
項目番号 項目名 データ型 項目計算式 1 部品コード 文字列 2 連結リスト 文字列 3 中央値 数値
部品コード 連結リスト 中央値 ---------------------------------------- 部品A ,6000,7000,4000,10000 6500 部品B ,7000,4000,10000 7000 部品C ,500 500
※このデータはフォームの[中央値を求める]ボタンを実行した結果の値
■ test2_中央値.wfx
フォーム ├ ファミリ ├ ワークスペース ├ フォーム操作バー ├ フォームヘッダ部 │ ├ cmd中央値を求める ← コマンドボタンを実行してください │ ├ a │ ├ lbl部品コード │ ├ lbl中央値 │ └ lbl連結リスト └ フォーム明細部 ├ 行セレクタ ├ txt部品コード ├ txt中央値 └ txt連結リスト
オブジェクト名: cmd中央値を求める 標題 : 中央値を求める
機能名 機能パラメータリスト 1 表示 2 手続き実行 cmd中央値を求めるClick 3 なし 4 なし
■ test2_中央値.kex
名札 メイン
*
手続き定義開始 prcSort(参照 数値 &dim[] ) 変数宣言 自動,数値{ &s, &fin, &n, &i, &numA, &numB }
&n = #配列要素数( "dim" ) &s = 2 繰り返し
&fin = &s &s = &n 繰り返し &i = &n, &fin, -1
&numA = &dim[ &i ] /* 数値の場合は &numA */ &numB = &dim[ &i - 1 ] /* 数値の場合は &numB */
if ( &numA < &numB ) /* 数値の場合は &numA < &numB */ &dim[ &i - 1 ] = &numA /* 数値の場合は &numA */ &dim[ &i ] = &numB /* 数値の場合は &numB */ &s = &i end 繰り返し終了
if ( &s = &n ) 繰り返し中止 end 繰り返し終了
**<参考書籍> **現代データ構造とプログラム技法 萩原宏・西原清一 著 オーム社刊 ISBN4-274-12831-8 手続き定義終了
手続き定義開始 cmd中央値を求めるClick( ) 変数宣言 自動,文字列{ &title = "cmd中央値を求めるClick( )" } 変数宣言 自動,文字列{ &targetTbl } 変数宣言 自動,整数 { &status }
解除 * 行削除 *, 圧縮
&targetTbl = #一括パス名 + "test2_参照表.tbx" 併合 &targetTbl, 両方, 編集表 = する, 終了状態 = &status, { [部品コード]照合[部品コード],[連結リスト]連結[作業用] } **戻り値 説明 ** 1 正常に終了した ** 0 共有違反以外のエラーが発生した **-2 他の利用者が置換や併合などの処理を実行中(ファイル排他) トレース出力 _&status, " ", _&targetTbl
if ( &status = 1 ) 手続き実行 prc中央値を求める( ) else メッセージボックス &title, "[併合]コマンドの実行に失敗しました:終了状態 = " + #str( &status ), アイコン = e, ボタン指定 = 1 end
手続き定義終了
手続き定義開始 prc中央値を求める( ) 変数宣言 自動,文字列{ &title = "prc中央値を求める( )" } 変数宣言 自動,数値 { &result }
解除 * ジャンプ 行番号 = 先頭 繰り返し ( .not #eof )
手続き実行 prc中央値の計算( [部品コード], #sstr([連結リスト], 2 ), &result ) /* #sstr([連結リスト], 2 ) は、先頭のコンマ(,)が不要のため */ 行訂正 [中央値] = &result
ジャンプ 行番号 = 次行 /* これを忘れると無限ループになるよ */ 繰り返し終了
手続き定義終了
手続き定義開始 prc中央値の計算( 文字列 &partsCode, 文字列 &pcsList, 参照 数値 &result ) 変数宣言 自動,文字列{ &title = "prc中央値の計算( )" } 変数宣言 自動,文字列{ &comma = #jis( #hex("2C") ) } 変数宣言 自動,整数 { &dimMax } 変数宣言 自動,整数 { &oddNumber } /* 奇数ならば1 偶数ならば0 */ 変数宣言 自動,整数 { &i, &loop, &step = 1 } 変数宣言 自動,整数 { &targetDimNum } 変数宣言 自動,整数 { &targetDimNumPrimary, &targetDimNumSecondary }
**メッセージボックス &title, &partsCode + ":" + &pcsList, アイコン = i, ボタン指定 = 1
&dimMax = 1 + #文字数( &pcsList ) - #文字数( #文字置換( &pcsList, &comma, #u ) ) &oddNumber = #mod( &dimMax, 2 ) トレース出力 _&dimMax, " ", _&oddNumber, " ", _&pcsList
変数宣言 自動,数値{ &pcsListDim[ &dimMax ] } &loop = &dimMax 繰り返し &i = 1, &loop, &step &pcsListDim[ &i ] = #num( #対応文字列( &pcsList, &i ) ) トレース出力 "ソート前", " ", &i, " ", _&pcsListDim[ &i ] 繰り返し終了 トレース出力 ""
手続き実行 prcSort( &pcsListDim) /* 配列変数:&pcsListDim を昇順でソートする */
&loop = &dimMax 繰り返し &i = 1, &loop, &step トレース出力 "ソート後", " ", &i, " ", _&pcsListDim[ &i ] 繰り返し終了 トレース出力 ""
if ( &oddNumber ) /* &oddNumber は1(イチ)または0(ゼロ)の論理値なので &oddNumber = 1 と書かなくて良い */
** 奇数 if ( &dimMax > 1 )
&targetDimNum = #切り上げ( &dimMax / 2, 0 ) &result = &pcsListDim[ &targetDimNum ] トレース出力 "奇数", " ", _&dimMax, " ", _&targetDimNum, " ", _&result トレース出力 ""
else
&result = &pcsListDim[ 1 ] トレース出力 "奇数", " ", _&dimMax, " ", _&targetDimNum, " ", _&result トレース出力 ""
end
else
** 偶数 &targetDimNumPrimary = &dimMax / 2 &targetDimNumSecondary = &targetDimNumPrimary + 1 &result = ( &pcsListDim[ &targetDimNumPrimary ] + &pcsListDim[ &targetDimNumSecondary ] ) / 2 トレース出力 "偶数", " ", _&dimMax, " ", _&targetDimNumPrimary, " ", _&targetDimNumSecondary トレース出力 _&targetDimNumPrimary, " ", _&targetDimNumSecondary, " ", _&result トレース出力 "" end
メッセージボックス &title, &partsCode + "の中央値:" + #str( &result ), アイコン = i, ボタン指定 = 1
手続き定義終了
p.s.
なお、文字列型の配列変数のソートについては拙作webページをご覧ください。
コチラ ↓ 桐の釣魚大全のトップ > フォームアプリケーション教書 第2部 https://silicon7565.cloudfree.jp/guide/guide_Part2.htm#section28-1 28.1 配列変数のソート ■配列変数をソートする方法 ― 桐のイベント道場 かっこうログ 2002年06月03日より
|