Midnightjapan

Tag: バブルソート

ファイルメーカー 複数選択値のバブルソート実装

by jun on 6月.25, 2014, under FileMaker

久々に技術ネタ

ファイルメーカーではチェックボックスを実装すると、複数選択できます。
繰り返しフィールドでもないのに、どういう値が入っているのか。

答えは選択された値が改行されて入ってるんですね。そうです。GetValueで取得できます。

じゃあ選択順はどうなるかというと、選択された順に開業されます。

チェックを外すと、切り取られるのでいなくなります。わかるかな?

選んだ値が■ 未選択が□だとすると
フィールド選択値:□01 □02 □03 □04 □05 として
01→02→03→04→05→03→03 と選択していくと

結果
01
02
04
05
03

となってしまう。これをバブルソートで

結果
01
02
03
04
05

となるスクリプトを作成した。
このスクリプトだけではどうにもならないが、このソートをスクリプトの変数に割り当てれば
結果は変数に代入される。

Let([
 // フィールド値をパラメータ引数に設定
  $prm=フィールド値;
 // ソート条件をフラグで分岐:昇順=1,降順=0)
  $sor=1;
 // ソートタイプ指定:テキスト比較=1,数値比較=0)
  $typ=1;
 // サブルーチン関数定義
  $lst=$prm;
  $sub="
   Case(
    $i< =1;$top;
      Let([
       $i=$i-1;
       $itm=GetValue($lst;$i);
       $_top=Case($typ;$top;$top*1);
       $_itm=Case($typ;$itm;$itm*1);
       $flg=Case($sor;$_top<$_itm;$_top>$_itm);
       $rtn=Case($flg;List($rtn;$itm);List($rtn;$top));
       $top=Case($flg;$top;$itm)
      ];
      Evaluate($sub)
     )
    )
   ";
 // バブルソート関数定義
 $n=0;
 $res="";
 $fnc="Case(
  $n=ValueCount($prm);$res;
  Let([
   $n=$n+1;
   $i=ValueCount($lst);
   $top=GetValue($lst;$i);
   $rtn=\"\";
   $res=List($res;Evaluate($sub));
   $lst=$rtn
  ];Evaluate($fnc))
 )"
];
 Evaluate($fnc) // バブルソート計算実行
)

さぁ、たまたまこんなことしたかった方は、サンプルを参考に実装してみましょう。

コメントなし :, , , more...



何かお探しですか?

以下にキーワードを入力してサイト内検索が可能です:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!