jeyseni's diary

「ジェイセニ」と呼んでください。批判ではなく提案をするのが生き甲斐です。

「MBS」でファイルメーカーのリストソートを実現(Ver16未満で)

「MBS」というファイルメーカープラグインがとんでもなく多機能な件 - jeyseni's diary (hatenablog.com) 2021/5/2 を紹介した。筆者が利用したのはそのごく一部なのだが,1件目がQRコードなどのバーコードを出力する機能,2件目がメールの受信をする機能である。

 その後,データベース処理の一環で,1レコード,1フィールドの中に格納したテキストをソートする必要に迫られた。

 ファイルメーカーPro Ver16以降には,SortValues関数,UniqueValues関数があるので,これを使えば一発でソートできる(ようである)。筆者はいろいろな理由で,現在Ver13だが,業務で標準で使うにはアップデートする必要はあるだろう。

 関数がない場合,テキストをソートする方法としては複数考えられる。一つは,ソートの基本である「バブルソート」をスクリプトで作成する方法,もう一つ,ファイルメーカーでは,1行を別のデータベースの1レコードとして移動させ,そこでレコードをソートし,それを再度出力して読み込ませれば実現できる。いずれもスクリプトで実現できる。またExcelに出力して再読み込みすることでも実現できる。

 実は,2番目の方法はこれまでも何度か使ってきた。1回だけ使うのなら,手作業でデータを移してソートすればいいので,特に問題はないが,今回は1000レコード分ぐらいのデータがあるので,基本的なバブルソートスクリプトを自作してみた。

 バブルソートの原理は,隣同士の値を比べて,たとえば後ろが小さければ前後を入れ替える,という動作を繰り返すことで実現できる。これだと最初の処理で一番大きなデータが一番後ろに移動させることができる。これを対象を1つずつ減らしながら繰り返すと,最終的には小さい順に並べ直すことができる。データ数が少なければいいが,多くなればなるほど処理数が増え時間がかかることになる。

 自作したのは27ステップで構成したスクリプトである。バブルソートは,コンピュータのプログラミングでは基本的な練習問題である。筆者も40年前に初めてBASICでプログラムをしたときに作成した。ファイルメーカースクリプトは,組み立て方も原理も同じなので,一発で成功,と思ったのだが,実は失敗した。

 そこでインターネットでスクリプト例を検索してみたところ,すばらしくスッキリしたスクリプト例を見つけた。わずか16ステップ。これをまず使わせていただいた。ソートするデータは約1000行。これを100秒ぐらいでソートすることができた。全部で1000レコードなので,数時間で処理ができる。これぐらいなら筆者としては自動処理にかけて待つことができるので,使わせていただいた。

 そして翌日,ひょっとして例の「MBS」で機能が提供されていないかどうか調べてみると,List Sortingという関数があった。おそらく標準のSortValues関数と同じ機能かと思われる。サンプルファイルをダウンロードして試したところ,1000行のソートが本当に一瞬だった。日本語を含めたソートも,特に問題なかった。この関数を,元のデータベースに組み込んでも,同様に動作した。1000レコードの処理もほぼ一瞬で終わった。

 筆者は,60歳を過ぎても,65歳を過ぎても(予定だが),幸か不幸か契約社員とはいえ,企業に所属して仕事をしている。本当は,定年後は最近のプログラミングを勉強し直そうと思っていたのだが,残念ながら今はまだその余裕がない。筆者が知っているのは,BASICとFORTRANだけで,C以降のプログラミングも知らない。Javaなども使ってみたいと思うし,スマホアプリも作ってみたい。しかし現実はなかなか厳しい。

 筆者がコンピュータを駆使して自分の仕事を効率化するのに,それぞれのソフトウエアの「スクリプト」を使っている。かつてのLotus 1-2-3スクリプトは,「コピー」や「ペースト」「カーソル移動」など,手で処理する動作をそのまま記号に置き換えるもので,記述が単純だったが繰り返し作業には効率的だった。Excelスクリプトは,作業プロセスを記録させ,これを繰り返し再生することで同じ動作をさせられた。動作の内容を少しずつ変えながら繰り返せば,単純な繰り返し動作をプログラムできた。

 その後,ExcelVBAというプログラミング言語が標準になった。C言語などで採用されているメソッドとプロパティで構成された表記を使うところで,筆者は断念した。ただ,処理プロセスを記録し,これを単純に繰り返すだけの処理なら,パラメータを少し変更するだけで使えるので,VBAを勉強することなく,現在まで利用している。Wordのマクロも同様である。

 Macを使っていたときは,最初はHypercardというオブジェクト言語で動作を記述していた。その後,AppleScriptで簡単な処理はしていたが,仕事の多くはいわゆるユーティリティーと呼ばれるフリーのソフトを利用していた。ユーティリティーを併用することも,現在も続けており,会社の管理部からはいろいろなソフトをダウンロードする筆者は少し煙たがられている。

 その中で,ファイルメーカーは延々と「スクリプト」方式を続けている。筆者にとっては,頭を整理しながら処理を自動化できるので,実にありがたいのである。

 実はこのリストソートを試しながら,MBSのもう一つ興味深い機能を見つけた。今度はこれを評価してみたいと思っている。ファイルメーカーの最新版Ver.18でもまだ搭載していない機能なのだが,日本語で使えるかどうか,少し不安なところはある。またレポートしてみたい。