初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2019-03-24 16:38:07

初心者りとらい
Guest

値一覧内の重複削除と文字種変換のスクリプトを教えて下さい。

WIN10の64bitでFM14の環境です。
以前に何度か質問した内容を連結しようとして行き詰りました。
どうか宜しくご教授願います。

〇値一覧内の重複削除と文字種変換のスクリプトを教えて下さい。

フィールドとして
〇(名称)対象:(タイプ)テキスト:(内容)リスト形式の値
〇(名称)高:(タイプ)テキスト:(内容)小文字、大文字の指定
〇(名称)幅:(タイプ)テキスト:(内容)半角、全角の指定
としております。
なお、
・フィールド高は入力時にチェックボックスで「小文字」と「大文字」を入力できるようにしており、チェックしないことも可能としています。
・フィールド幅は上記フィールド高でチェックボックスは「半角」と「全角」としています。

変換時のフィルターとして
平仮名小書き文字等(小文字)は「ぁぃぅぇぉゕゖっゃゅょゎ」、
平仮名通常(大文字)は「あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをんがぎぐげござじずぜぞだぢづでどばびぶべぼわ゙ゐ゙ゔゑ゙を゙か゚き゚く゚け゚こ゚せ゚つ゚と゚ぱぴぷぺぽ」、
片仮名小文字半角は「ァィゥェォッャュョ」、
片仮名小文字全角は「ァィゥェォヵㇰヶㇱㇲッㇳㇴㇵㇶㇷㇸㇹㇺャュョㇻㇼㇽㇾㇿヮㇷ゚」、
片仮名大文字半角は「アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンガギグゲゴザジズゼゾダヂヅデドバビブベボヷヴヺカ゚キ゚ク゚ケ゚コ゚セ゚ツ゚ト゚パピプペポ」、
片仮名大文字全角は「アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲンガギグゲゴザジズゼゾダヂヅデドバビブベボヷヸヴヹヺカ゚キ゚ク゚ケ゚コ゚セ゚ツ゚ト゚パピプペポ」としています。

フィールド対象の入力値として

あいうえお(←通常サイズの平仮名)
かきくけこ(←通常サイズの平仮名)
ABC(←大文字サイズのローマ字)
アイウエオ(←通常全角サイズの片仮名)
ァィゥェォ(←半角小文字サイズの片仮名)
アイウエオ(←通常半角サイズの片仮名)
カキクケコ(←通常半角サイズの片仮名)
ぁぃぅぇぉ(←平仮名で小書き文字サイズ)
(←未入力で改行もある)
アイウエ(←通常全角サイズの片仮名)
アイウエオ(←通常全角サイズの片仮名)
カキクケコ(←通常全角サイズの片仮名)
ab(←小文字サイズのローマ字)
ァィゥェォ(←半角小文字サイズの片仮名)
ァィゥェォ(←全角小文字サイズの片仮名)

というように、
平仮名は通常の平仮名サイズ(大文字とする)と小書き文字サイズの小さい平仮名(小文字とする)
片仮名は半角と全角の各々に通常サイズ(大文字とする)と拗音等の小書き文字サイズ(小文字とする)
ローマ字(数字を含む)は大文字と小文字
の入力値があります。
フィールド高とフィールド幅によりスクリプトで計算された結果の並び順として、空白行削除、重複値の統一、ローマ字、平仮名、片仮名の順を、高ナシ幅ナシ、高ナシ幅半角、高ナシ幅全角、高小文字幅ナシ、高小文字幅半角、高小文字幅全角、高大文字幅ナシ、高大文字幅半角、高大文字幅全角の順に並び変えたものを求めています。尚、平仮名は片仮名変換します。重複値の判定については行単位で同一か否かを判定しています。

例えば
フィールド高は入力値ナシ、フィールド幅も入力値ナシの際は

ab(←小文字サイズのローマ字)
ABC(←大文字サイズのローマ字)
ぁぃぅぇぉ(←平仮名で小書き文字サイズ)
あいうえお(←通常サイズの平仮名)
かきくけこ(←通常サイズの平仮名)
ァィゥェォ(←小文字半角サイズの片仮名)
ァィゥェォ(←小文字全角サイズの片仮名)
アイウエオ(←通常半角サイズの片仮名)
カキクケコ(←通常半角サイズの片仮名)
アイウエ(←通常全角サイズの片仮名)
アイウエオ(←通常全角サイズの片仮名)
カキクケコ(←通常全角サイズの片仮名)

となる。

フィールド高は入力値ナシ、フィールド幅は半角の際は

ァィゥェォ(←半角小文字サイズの片仮名)
ァィゥェォ(←全角小文字サイズの片仮名)
アイウエオ(←通常半角サイズの片仮名)
カキクケコ(←通常半角サイズの片仮名)
アイウエ(←通常全角サイズの片仮名)
アイウエオ(←通常全角サイズの片仮名)
カキクケコ(←通常全角サイズの片仮名)

となります。これはローマ字は半角全角が無いので削除し、平仮名は片仮名半角に変換した際に同一値があった為に統一しています。

フィールド高は大文字、フィールド幅は入力値ナシの際は

AB(←小文字サイズのローマ字の大文字変換値)
ABC(←大文字サイズのローマ字)
あいうえお(←通常サイズの平仮名)
かきくけこ(←通常サイズの平仮名)
アイウエオ(←通常半角サイズの片仮名)
カキクケコ(←通常半角サイズの片仮名)
アイウエ(←通常全角サイズの片仮名)
アイウエオ(←通常全角サイズの片仮名)
カキクケコ(←通常全角サイズの片仮名)

となります。これはローマ字は小文字サイズを大文字に変換し統一する値が無いので残存し、平仮名は通常サイズに変換した際に同一値があった為に統一しています。

どうか宜しくお願い致します。

#2 2019-03-24 17:07:22

初心者りとらい
Guest

Re: 値一覧内の重複削除と文字種変換のスクリプトを教えて下さい。

追記です。

フィールド高は小文字と大文字、フィールド幅は半角と全角の場合として、

ァィゥェォ(←片仮名小文字半角)
ァィゥェ(←片仮名小文字半角)
ァィゥェォ(←片仮名小文字全角)
ァィゥェ(←片仮名小文字全角)
ヵㇰヶ(←片仮名小文字全角)
アイウエオ(←片仮名大文字半角)
カキクケコ(←片仮名大文字半角)
アイウエオ(←片仮名全角大文字)
アイウエ(←片仮名全角大文字)
カキクケコ(←片仮名全角大文字)

となります。

#3 2019-03-25 13:19:27

Hiro
Member

Re: 値一覧内の重複削除と文字種変換のスクリプトを教えて下さい。

回答ではありませんが、レスが着きそうも無いので……。

後学のため、お聞きします。
・非常に難解な設問ですが、最終目的・使途は何でしょうか?(後学のため)
・行内の文字種は、統一で混在は無いのでしょうか?(混在なら困難かも?)
・FM標準機能で絶体絶命そうな点は、値一覧内のカスタム条件順ソート?(文字コード順ソートでも不可?)

Offline

#4 2019-03-25 18:47:16

初心者りとらい
Guest

Re: 値一覧内の重複削除と文字種変換のスクリプトを教えて下さい。

Hiro様
ありがとうございます。

目的・使途について
・平仮名や片仮名の表示を変換可能とすることにより書類作成時に即応性を発揮する。
例1)領収書の数字の表示を変える。
例2)仮名に用いた際は、仮名の表示文字を一括変換出来る。
例3)校正の手間を減らす(文字サイズや拡大縮小が認められない書類において、表示するテキストをフィールドの結合体とすることにより幅を変える事で解決する。)
・変換値を用いてフィルターとして使う。
前提)日本語に関してはユーザー側で変換(フィルターにヒットした場合、特定の指定文字列に置換え)をしないと使用する際に支障をきたす場合が多々見受けられる。今後、この傾向は強くなるように考えている。
例1)従来のテキストやOCRで読み込んだテキスト等の体裁を一括して統一が可能となることに期待。
例2)特定文字列の言語体を判定する際のフィルターとして用いる際のフィルターの作成手間と入力ミスの防止。

行内の文字種は混在が有ります。逆に混在の一括訂正に用いたいです。

FM標準機能については十分な理解はしていませんが、値一覧内の順序をカスタム化したいです。
ソート機能についても絶対絶命なのですね。

蛇足ですが、
そもそもFM標準機能においての日本語の片仮名や数字やローマ字のFilter関数での抽出の正確さを欠く点については悪影響の方が多いと考えています。
例えば、JAPAN=日本とjapan=漆器や、CHINA=中国とchina=磁器、陶磁器、God=キリスト教の唯一神とgod=多神教の神といった表示によって意味が異なるのですが完全一致とアイマイな一致の両側面をフォローする為には必要と考えています。
逆説的には、上記機能を持たせたFilter関数が有れば良いかと考えています。
クラリスで事足りた時代から現在は随分発展し、情報化社会としてクラウド化が進んでいるのに、ビジネスで用いる際に正確を欠く根本的な要因の改善が無いままでバージョンだけ新しくなっている気がしているのでファイルメーカー社に改善の希望を出してみます。
でも、うるうを含む期間計算についてはExcelより随分マシと考えております。

#5 2019-03-26 02:59:17

Hiro
Member

Re: 値一覧内の重複削除と文字種変換のスクリプトを教えて下さい。

#1&#2の条件仕様 が #4の使途・目的のため?という関連性が良く分かりませんが、
一応、#1と#2の説明仕様に従いサンプルを作ってみました。
検証は甘いので、目的に合わないときは、ご自身で内容修正してください。
なお、スクリプトは面倒なので、ループ計算式と動的値一覧のユニーク化と
カスタム順ソート機能で実装しました。

●サンプル「文字変換値一覧.fmp12」 → https://yahoo.jp/box/ZM3ji8


※>#4『行内の文字種は混在が有ります。』
この場合の具体的例示説明が無いので、実装法が良く分かりません。
1行内文字種混在は#1と#2説明仕様に適用できそうに無いと思うのですが…、
例えば、値一覧内の混成行のソート順位はどうするのですか??

Last edited by Hiro (2019-03-26 03:35:50)

Offline

#6 2019-03-26 11:49:48

初心者りとらい
Guest

Re: 値一覧内の重複削除と文字種変換のスクリプトを教えて下さい。

Hiro様
サンプルありがとうございます。早速ダウンロードしました。検証は未実行です。

ご質問いただきました1行内文字種混在の例としまして所在地は如何でしょう。
入力時に制限が出来れば良いのですが、元になるデータにより表示が異なる事は多いかと思います。

例)
開キ町

変換値)高(小文字・大文字)幅(半角・全角)
開町
開キ町
開キ町

変換値をExactを用いて例の開キ町に統一する。

ソート順については例えば「Abcハイツ1F101号」の文字列を「Abc」・「ハイツ」・「1F」・「101号」の4パーツに分けて各々変換を行い統一する事で複雑化は回避可能とは思いますが、ソート順は希望としては
ローマ字(記号を含む)小文字半角
ローマ字(記号を含む)小文字全角
ローマ字(記号を含む)大文字半角
ローマ字(記号を含む)大文字全角
平仮名小文字サイズ
平仮名大文字サイズ
片仮名小文字サイズ半角
片仮名小文字サイズ全角
片仮名大文字サイズ半角
片仮名大文字サイズ全角
の順で混合の各行の頭文字で良いかと考えています。理由としては頭文字から最終文字までを上記順で並び替えすると複雑すぎて申し訳ないですし、変換値のうち空白になる場合や仮名文字(平仮名・片仮名)の小文字サイズのみ残った場合は順が正確を欠く事が明白であるからです。但し、これは置換の際に空白ではなく小文字サイズに該当しない場合は変換元の大文字とすることにより回避可能となるかと思います。

では具体的に例を分割せずに頭文字のみでソート、置換文字列に該当文字が無い場合は空白で変換すると
ローマ字(記号を含む)小文字半角:abcf
ローマ字(記号を含む)小文字全角:abcf
ローマ字(記号を含む)大文字半角:ABCF
ローマ字(記号を含む)大文字全角:ABCF
平仮名小文字サイズ:
平仮名大文字サイズ:
片仮名小文字サイズ半角:ハイツ
片仮名小文字サイズ全角:ハイツ
片仮名大文字サイズ半角:ッ
片仮名大文字サイズ全角:ハイツ

の順になるかと思います。このままでは使い物にならないので、ハイツやマンション等、階やFのキーワードで変換元を分割して使う予定です。
因みに所在地に関しては住居表示の導入が行われていない自治体もあるので分割は必要と思います。

#7 2019-03-26 20:49:15

初心者りとらい
Guest

Re: 値一覧内の重複削除と文字種変換のスクリプトを教えて下さい。

Hiro様

サンプル拝見致しました。素晴らしいと感じました。
小文字を1として大文字×2にすることで条件分岐が楽になるのですね。
また、フィルタ変換時に番号を振る事によって新たな可能性を感じました。
素晴らしく練られていて、スッと目通しするだけでは理解が追いつかない所もあるので、時間をかけて勉強させて頂こうと思っております。
私自信がもう少し考えねば!と思いました。
取り急ぎご連絡まで

#8 2019-03-27 04:09:46

Hiro
Member

Re: 値一覧内の重複削除と文字種変換のスクリプトを教えて下さい。

サンプルを少しブラシアップして再アップしました。
一応、>#1の例示と同じ結果になるように改善しましたが、
>#2の事例は解説がないので違った結果のままです。
以降の修正は、ご自分の意向に合わせて、改造くださいネ。

●サンプル「文字変換値一覧.fmp12」 → https://yahoo.jp/box/ZM3ji8

Offline

#9 2019-03-27 21:15:19

初心者りとらい
Guest

Re: 値一覧内の重複削除と文字種変換のスクリプトを教えて下さい。

Hiro様

更なるサンプルありがとうございます。まだサンプル1の私の吟味が未了で理解が追いつかないのです。
改善サンプルの方はダウンロード終えたばかりです。理解できるか不安ですがコツコツと進めていく所存です。
因みに#2とは
例えば
フィールド高は入力値ナシ、フィールド幅も入力値ナシの際は

ab(←小文字サイズのローマ字)
ABC(←大文字サイズのローマ字)
ぁぃぅぇぉ(←平仮名で小書き文字サイズ)
あいうえお(←通常サイズの平仮名)
かきくけこ(←通常サイズの平仮名)
ァィゥェォ(←小文字半角サイズの片仮名)
ァィゥェォ(←小文字全角サイズの片仮名)
アイウエオ(←通常半角サイズの片仮名)
カキクケコ(←通常半角サイズの片仮名)
アイウエ(←通常全角サイズの片仮名)
アイウエオ(←通常全角サイズの片仮名)
カキクケコ(←通常全角サイズの片仮名)

となる。
を指して頂いているのでしたら何とか改造できるレベルになれたら、こうやって解決できました!と報告出来れば!と思ってはいますが・・いつになるるのか・・出来るかな?と不安です。
というか理解できるかが既に自信ないので・・お時間下さいませ。

#10 2019-03-28 12:17:25

Hiro
Member

Re: 値一覧内の重複削除と文字種変換のスクリプトを教えて下さい。

一応ココで、最新サンプルの主内容を明示・ログ記録しておきます。

【● 変換画面のデモ画像】 文字変換値一覧.fmp12
ti_dNW

【● 変換式(ループ再帰計算式)】
※ 本式は、>#1スレの変換3事例の条件説明を反映したもので、
※ >#2スレ以降の条件説明ナシ事例は関与しません。
(理論上、必要となる条件設定総数は、[4*4*文字種数] 通りとなり、全実装には力業 必須!)

Let(
[
   /* 計算パラメータを定義 */
   $txt=対象;
   $key_1=PatternCount(高;"小") + PatternCount(高;"大")*2;   //(←高:ナシ=0,小文字=1,大文字=2,小大文字=3)
   $key_2=PatternCount(幅;"半") + PatternCount(幅;"全")*2;   //(←幅:ナシ=0,半角=1,全角=2,半全角=3))
   /* 文字種別フィルターを定義 */
   $flt_1="abcdefghijklmnopqrstuvwxyz";   //(←小文字サイズのローマ字)
   $flt_2="ABCDEFGHIJKLMNOPQRSTUVWXYZ";   //(←大文字サイズのローマ字)
   $flt_3="ぁぃぅぇぉゕゖっゃゅょゎ";   //(←平仮名小書き文字等(小文字))
   $flt_4="あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをんがぎぐげござじずぜぞだぢづでどばびぶべぼわ゙ゐ゙ゔゑ゙を゙か゚き゚く゚け゚こ゚せ゚つ゚と゚ぱぴぷぺぽ";   //(←平仮名通常(大文字))
   $flt_5="ァィゥェォッャュョ";   //(←片仮名小文字半角)
   $flt_6="ァィゥェォヵㇰヶㇱㇲッㇳㇴㇵㇶㇷㇸㇹㇺャュョㇻㇼㇽㇾㇿヮㇷ゚";   //(←片仮名小文字全角)
   $flt_7="アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンガギグゲゴザジズゼゾダヂヅデドバビブベボヷヴヺカ゚キ゚ク゚ケ゚コ゚セ゚ツ゚ト゚パピプペポ";   //(←片仮名大文字半角)
   $flt_8="アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲンガギグゲゴザジズゼゾダヂヅデドバビブベボヷヸヴヹヺカ゚キ゚ク゚ケ゚コ゚セ゚ツ゚ト゚パピプペポ";   //(←片仮名大文字全角)
   $upper_flt3="あいうえおかけつやゆよわ";
   /* 自家関数を定義 */
   $UpperHiragana="Substitute($itm; [\"ぁ\";\"あ\"]; [\"ぃ\";\"い\"]; [\"ぅ\";\"う\"]; [\"ぇ\";\"え\"]; [\"ぉ\";\"お\"]; [\"ゕ\";\"か\"]; [\"ゖ\";\"け\"]; [\"っ\";\"つ\"]; [\"ゃ\";\"や\"]; [\"ゅ\";\"ゆ\"]; [\"ょ\";\"よ\"]; [\"ゎ\";\"わ\"])";
   $LowerHiragana="Substitute($itm; [\"あ\";\"ぁ\"]; [\"い\";\"ぃ\"]; [\"う\";\"ぅ\"]; [\"え\";\"ぇ\"]; [\"お\";\"ぉ\"]; [\"か\";\"ゕ\"]; [\"け\";\"ゖ\"]; [\"つ\";\"っ\"]; [\"や\";\"ゃ\"]; [\"ゆ\";\"ゅ\"]; [\"よ\";\"ょ\"]; [\"わ\";\"ゎ\"])";
   /* 主ループ式$fncとその変数を定義 */
   $i=0;
   $res="";
   $fnc=
      "Case($i=ValueCount($txt); $res;
         Let([
            $i=$i+1;
            $itm=GetValue($txt; $i);
            $itm=
               Case(IsEmpty($itm); \"\";
                  Filter($itm; $flt_1)=$itm
                     ; Case($key_2=0; Choose($key_1=2; \"1:\"&$itm; \"2:\"&Upper($itm)));
                  Filter($itm; $flt_2)=$itm
                     ; Case($key_2=0; Choose($key_1=1; \"2:\"&$itm; \"1:\"&Lower($itm)));
                  Filter($itm; $flt_3)=$itm
                     ; Choose($key_2
                        ; Choose(Filter($key_1;\"23\")<>\"\";  \"3:\"&$itm; \"4:\"&Evaluate($UpperHiragana))
                        ; \"5:\"&KanaHankaku(Katakana($itm))
                        ; \"6:\"&Katakana($itm)
                        ; List(\"5:\"&KanaHankaku(Katakana($itm)); \"6:\"&Katakana($itm)) );
                  Filter($itm; $flt_4)=$itm
                     ; Choose($key_2
                        ; Choose(Filter($key_1;\"13\")<>\"\"
                           ; \"4:\"&$itm
                           ; Choose(Filter($itm;$upper_flt3)=$itm; \"4:\"&$itm; \"5:\"&Evaluate($LowerHiragana)) )
                        ; \"7:\"&KanaHankaku(Katakana($itm))
                        ; \"8:\"&Katakana($itm)
                        ; List(\"7:\"&KanaHankaku(Katakana($itm)); \"8:\"&Katakana($itm)) );
                  Filter($itm; $flt_5)=$itm
                     ; Case(Filter($key_1;\"013\")<>\"\"; \"5:\"&$itm);
                  Filter($itm; $flt_6)=$itm
                     ; Case(Filter($key_1;\"013\")<>\"\"; \"6:\"&$itm);
                  Filter($itm; $flt_7)=$itm
                     ; Case(Filter($key_1;\"023\")<>\"\"; \"7:\"&$itm);
                  Filter($itm; $flt_8)=$itm
                     ; Case(Filter($key_1;\"023\")<>\"\"; \"8:\"&$itm)
               );
            $res=List($res; $itm)
         ]; Evaluate($fnc))
   )"
];
   /* 定義式 $fnc をEvaluate実行 */
   Evaluate($fnc)
)

Last edited by Hiro (2019-03-30 12:34:21)

Offline

#11 2019-03-30 07:10:07

初心者りとらい
Guest

Re: 値一覧内の重複削除と文字種変換のスクリプトを教えて下さい。

Hiro様

ありがとうございます。出来るかどうか自信無いですがこつこつ仕上げていきますね。
大変助かりました。

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.008 seconds, 11 queries executed - Memory usage: 581.2 KiB (Peak: 618.11 KiB) ]