| 第33回 テキスト加工の計算式テク |
| ・開催日時:2008/03/22 18:00-19:30 |
・開催場所:Apple Store Ginza 3F シアタールーム
|
概要:
テキストから一部分を切り出す、特定条件に合致する場合のみ置換するなど、テキストの加工を計算式で行う必要は多く発生します。こうした計算式には、PatternCount/Middle/Substitute/Filterなどの関数を組み合わせた定番テクニックといえるものが存在するので、これらについてまとめてご紹介します。
例)
・特定の文字列で囲まれた範囲だけ抽出する
・最後に登場した指定文字列だけ置換する
・ひらがな/カタカナだけ取り除く
.....その他いろいろご紹介します。
|
レポート:
今回はインターバルが長めのせいか、地下鉄の駅から出たとき懐かしいような感じも多少。 行き交う人びと、いつもより幾分多いなと思ったが、AppleStoreの中はもっと混んでいてなかなか前に進めないほど。ナゼダラウ? シアターでは常連さん達が前方にしっかりと陣取って開演を待っている。さあ、始まりまっせ。
第33回 FileMaker Fun Night!「テキスト加工の計算式テク」 お題は... ・しっかり覚えるFileMaker 〜はじめて挑戦する伝票印刷(前編)〜 ・【特集:テキスト加工の計算式テク】 ・恒例Tips対決総集編! ・FMスーパーテクニック 〜「前のレイアウトに戻る」ボタンを考える〜
●しっかり覚えるFileMaker 〜はじめて挑戦する伝票印刷(前編)〜 <Shinさん> 伝票の印刷にはツボがあり、きっちり押さえて初めて「スゲ〜」といってもらえます。 普通はあれこれ失敗して覚えていくのかもしれませんが、ここでそのツボを大公開。「スゲ〜」と言われるヒトになれる(かも)とのことです。 FileMaker人になって間もない人たちには、まさしくうってつけの内容。
Shin師匠いわく ・すぐに作れて、感動してもらえる ・FileMakerはダメな道具だと思われない ※今回は、まずできることが最優先なので細かいことは置いとく。
事前の検討ポイントとしては、 ・既存の紙伝票から、必要なレイアウトパート(ヘッダ、ボディ、小計...)を判断する。 ・どの情報をFileMakerから出力すべきか判断する。(リレーション先の関連レコードの...) ・複数関連レコードを1枚に出力するなら、ポータルを使えるどうかを考える。 ・1ページに収まる印刷(これ原則)を目標にする。
ここでデモ。
親子2テーブルで伝票と明細の2要素があり、これらをポータルに表示している。 紙伝票をスキャンした画像を用意し、ひながたとしてレイアウトに貼付ける。 ・ヘッダ部分などの画像を切り取って別名保存しておけば、レイアウト作業中にいろいろ小回りが効く。 ・画像に重ねるようにフィールドなどのオブジェクトを置いていく。 ・ポータルを配置する場合、そのレイアウトの基本テーブルは親テーブルにするべし。
さて、リスト表示のときはかなり難しい「レコード繰り返し部分に置く縦罫線」も、ポータル上では簡単に置くことができます。リレーションの理解さえできていれば、とことん簡単に帳票を作成できる、ポータルとはそういうものです。 でも、実際には工夫が必要になることも。 明細行数が多く、1ページに収まらないときは、2ページ目のためのレイアウトを作り、「関連レコードの何行目から表示するか」を適切に設定すれば良い。 スクリプトを作れば自動的にレイアウトを切り替えることもできますね。
ちょっと簡単すぎたかな...とも思える内容でしたが、これもFileMakerが簡単なせいでしょう。 さて、次回(後編)はリスト表示を使ったパターンに挑戦だぜ。
●【特集:テキスト加工の計算式テク】<茂田さん> さて、計算式ぐりぐり書き〜の、関数ひねり〜の、といえばこのヒト、茂田師匠です。 テキストの加工については、ワシも日常的にかなりFileMakerに依存しているので、「更に徹底して依存するために」、精神集中であります。
テキスト関数は現在のところ43種類。分類してみると...
- 文字処理系(Left()など)文字レベルの処理
- Word系(LeftWords()など)単語レベルの処理
- Value系(LeftValues()など)改行区切り
- 日本語変換系(Hiragana()など)
- 英語変換系(Lower()など)
- データタイプ変換系(GetAsDate()など)
- 形式変換系(GetAsCss()など)
- 比較、置換系(Exact()など)※Filter()関数はいろいろ使い倒せるゾ
- カウント系(Length()など)
- その他
さて、ここから先は嵐の実例攻撃が待っていた。うう、メモが追いつかない。 ・ひらがなを半角カナに KanaHankaku(Katakana(フィールド名)) →先にカタカナにしてから半角にする ・最後の1文字だけ消す Left(フィールド名; Length(フィールド名) - 1) →文字列の長さより1だけ少ない数を作って、左からその文字数ぶんだけ取り出す ・バイト数を数える(Shift_JISの場合のバイト数をUnicode文字列から求める) Length(フィールド名 & Filter(フィールド名; RomanZenkaku(KanaZenkaku(フィールド名)))) →元の文字数と、その中の全角文字だけの文字数を足せば、全角文字だけ2回カウントされてShift_JISバイト数になる! ・数字列の頭にゼロを付けて桁数を統一する Right("0000" & フィールド名; 必要な桁数) →いっぱいゼロを付けておいて、右から必要桁数だけ取り出す...数字以外でもできるゾ ・複数条件の文字列置換の一発処理 Substitute(フィールド名; ["検索文字列1"; "置換文字列1"]; ["検索文字列2"; "置換文字列2"]...) →左から順に置換されていく。1回目の置換が2回目の前提になるような処理もできる ・半角数字以外を消す Filter(フィールド名; "0123456789") →単にフツーに使うだけでもFilter()関数は超強力、Evaluate()関数などとの組み合わせもイケる ・ひらがなを消す Filter(フィールド名; Katakana(フィールド名)) →目的フィールドの「ひらがなをカタカナに変換した文字列」以外を消す、つまりひらがなが消える ・特定の文字以降を取り出す Middle(フィールド名; Position(フィールド名; "難"; 1; 1) + 1; Length(フィールド名))(この例では「難」という文字より後ろを取り出す) →ここでは、取り出す文字数の指定に注目、文字数は不足さえしなければ良いので、Length()で全体の文字数を指定している 「難」を区切文字に見立て、「難」から次の「難」までの間を取り出すこともできる。 こういう場合は式が長くなるので、Let()関数を併用しよう。 ・スタイルを抜く 普通は、TextFormatRemove(フィールド名) でよいが、これはver.8で新設されたものなのでver.7では動かない。 ver.7では、Evaluate(Quote(フィールド名)) とすればよい →よく読めないんだが、やってみると確かにそのフィールドに貼付けた文字スタイルがなくなる。こいつは丸覚えだなw。またテキストフィールドの「入力値の自動化」に仕掛けるなら「self」関数が便利。 さて、ここからはカスタム関数の話に。 ・1文字おきに抜き出す(奇数、偶数番目の文字) カスタム関数でやってみたものをサイトに置いとくので勉強してね、とのコト。 再起定義になってるそうなので、動きをトレースしてみると勉強になりそう。 カスタム関数ゲットのおすすめサイトは→http://www.briandunning.com FileMaker界の超有名人。英語がわかるなら、ぜひこちらへ。日本語サイトではhttp://www.fmpro.jp/(株式会社ジェネコム提供)がおすすめ。 天才以外の皆さん、カスタム関数のキモは「ダウンロードして自分流に改造」でち。がんばってね。
ここでQ&A Q:休日を判定するカスタム関数の現実味は? A:何種類かそういったカスタム関数があるが、最近頻繁に祝日が増えたりするのであまり現実的ではないでしょう。 何年ぶんかのカレンダーを作成しておき参照する、という実例も紹介されました(都立広尾病院の山本先生が客席から回答)。
そりゃそうだ、カレンダー通りならまだしも年末年始やお盆など、会社とかその年でも変わるので計算式では無理だよなあ。 ウチの職場では計算式化を早々と諦め、参照方式でやってましたが、意外と正解やん。
●恒例Tips対決! 今日は今泉師匠は欠席でし。
・日付の範囲検索の際「2007/*/{1..15}」と入力すると、2007年の任意の月の1〜15日が該当する。※「..」は半角ピリ2つなので注意。<竹内さん> ・検証用ダミーデータなどの入力に便利! int (random * 365) + Date (1; 1; 2007) という式で日付フィールドを全置換すると、2007年の任意の月日で置換される。<茂田さん> ・例えばレイアウトにステータスエリアからのドラッグでヘッダを追加するとそのぶんボディが縮んでしまうが、パート設定ダイアログから追加すればボディの高さは影響を受けない。<Shinさん>
今回、茂田さんの計算式が実用度バッチリですね。幾らでも使うとこあります。ここに書いたのをコピペするだけで(自分の代わりに)働いてくれるってのがいい感じでつ。
●FMスーパーテクニック〜「前のレイアウトに戻る」ボタンを考える〜 <竹内さん> 前回のFun Night!において、
>・できるかどうか質問 >「戻る」ボタンは作れるか。 >→できなくはないが、かなり難しく現実的ではない。
こんなQ&Aがありましたが、そこを掘り下げようという企画です。 まずはカンタンなものから。
方法:レイアウト変化の記録を取り、それをたぐって戻る。但し記録を取る都合上、レイアウトの切り替えはスクリプトで行う。
レイアウトを切り替えるスクリプトステップの直前に、画面の切り替え情報を残すためのステップを追加します。 具体的には、Get (レイアウト名) で値を確保してグローバルフィールドまたはグローバル変数(「$$」を付ければグローバル)へ保存します。 「戻る」ボタンを作り、ボタンの動作として「レイアウト切り替え、計算によるレイアウト名...」と指定して、式には「$$MyLayoutName」のようにレイアウト名記憶への参照を書きます。戻れる回数は1回だけです。なぜなら、スクリプトではないので一発芸なのです。
ここで2回以上戻るには、戻る動作もスクリプトにする必要があります。 戻る動作のときにもレイアウトの切り替えを書き込むようにすれば、目的に合うかどうかは別として最後の2レイアウト間を往復するトグル動作もできますね。
他には、計算フィールドで実現することもできます。 できます。 できるんですが... (テキスト計算式のおさらいに追われてメモ取れず...泣) 竹内注:はい、ちょっとデモしました。「直前のレイアウト名をグローバル変数に入れる」という行為を、スクリプトでやるかわりに計算フィールドでやるのです。グローバル変数の値はLet関数で作れますし、レイアウトに計算フィールドを置いておけば、表示されるタイミングで再計算される、と...。
さて、最後に書籍のご紹介であります。 「FileMaker Pro大全」がバージョン9対応に! 初心者からエキスパートまで,幅広い層に絶大な人気を誇る“FileMaker Pro 9: The Missing Manual"の完訳版。プロのワザをやさしく伝授! Geoff Coffey & Susan Prosser=共著/小山香織=訳 定価4,410円で、ブ厚くなるばかり...でも買ってね。 Apple Store並びの書店では今回も先行発売していた模様で、帰り途、重たそうに抱えてるヒト何人か目撃です。
次回は 4/19 土曜日 18:00〜19:30。お題は「サードパーティ便利ツール徹底活用」だよん。
アンケートのご協力、どうもありがとうこざいました! ご意見、ご要望やご感想はこらちからお寄せください。 >> ご意見箱
Special Links: ・FileMaker Pro 大全(ラトルズ) Special Thanks to: FileMakerまんが:たまみそさん(今回のまんがはこちら) イベントレポート:金丸康明さん 会場ヘルプ:新妻利恵さん
|
|
来場のみなさんのご感想:>> Topへ
| 女性 | テキスト関数はとっても簡単なLEFTやTRIM等しか使用していなかったので、とても勉強になりました。前のレイアウトに戻るは、とても要求が多く、かつ、うまく作動しないものならクレームの嵐になります... やはり、行ったり来たりしたい!との要求があります。(めんどいので放ってますが...) |
| 男性 | ありがとうございました。 |
| 男性 | 関数のTipsが色々あってよかったです。 |
| 男性 | 今後も参加していきたいです。 |
| 帳票で画像を出力する際の改ページ(スライド設定で上へスライドなどしてる場合)方法など知りたいです。(途中で改ページされてしまったりして困ってます) |
| 男性 | カスタム関数もっと活用してみます。Tipsの日付検索覚えとこうと思います。 |
| 男性 | 竹内さんの話の続きをもっと聞きたかったです。何かの機会にぜひまたお願いします。 |
| 男性 | 前のレイアウトに戻る、の続編を希望します。 |
| 女性 | 他のアプリで作られたレイアウトを画像でコピってはりつけてレイアウト作るのって便利そう。まねて作る時は使わせていただきます。ありがとーございますぅ。しげたさんの関数はさすが!もっとやってほしいです。Tipsは竹内さんの教えてくださった日付検索。知らなかったー使えます!!ありがとうございました! |
| 男性 | 「どこまでこだわるか?こだわらないか?」このワードはおもしろい!!次回は、Tipsを持ってきたいと...! |
|
|