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

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

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

You are not logged in.

Announcement

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


#1 2019-04-10 19:53:51

zouno33
Member

Listの値を、文字数が少ない順に並べ替えしたいです

Mac FM17です。

SortValuesはListの値を並べ替えてくれますが、文字数の少ない順のようなソートは設定できないですよね?。
文字数の少ない順に、リストを並べ替えて表示する方法はないでしょうか。

テーブル1::ひらがな = テーブル2::平仮名
テーブル1::めも = テーブル2::雑記帳

テーブル2::雑記帳 雑記帳は計算で、SortValues ( List(テーブル1::めも) ; 1 )

あかパジャマ
おかりな
きぱじゃま
にす


わなげ

ですが、理想は
にす
わなげ
おかりな
きぱじゃま
あかぱじゃま

にしたいです。さらに内容が増えたとき、

かさ
にす
うちわ
わなげ
おかりな
はんどる
きぱじゃま
ほうちょう
あかぱじゃま
ふとんたたき

のように、あいうえお順にもしたいです。

どなたか教えてください。よろしくお願いします。

Offline

#2 2019-04-10 21:14:03

Hiro
Member

Re: Listの値を、文字数が少ない順に並べ替えしたいです

  1. ソート中間作業用に計算フィールド「字数付めも」を追加する。その式は、
       Substitute(10^Length(めも)-1; [9;Char(64109)]) & めも
       (例: "あかパジャマ"   →   "舘舘舘舘舘舘あかパジャマ")
       

  2. 目的の計算式は、(「字数付めも」をソートした結果から付加した字数部分を消去)
       Substitute(SortValues(List(テーブル1::字数付めも); 1); [Char(64109);""])

Last edited by Hiro (2019-04-10 21:39:36)

Offline

#3 2019-04-11 09:02:53

チポ
Member

Re: Listの値を、文字数が少ない順に並べ替えしたいです

文字数のフィールドを作り、
リレーションの設定でそのフィールドでソート指定。

こうすれば、
Listはそのソート順に並びます。

あいうえお順も同じに考えればいいでしょう。

Offline

#4 2019-04-11 23:29:00

zouno33
Member

Re: Listの値を、文字数が少ない順に並べ替えしたいです

Hiroさんありがとうございます。
希望通りの動作ができました。

CharでUnicodeを用いるのと、10^というのが見たこと無くて調べ考えました。
元々同じ文字列なら、数でソートされる?。
「ア」と「月」と「館」で検証したところ、「月」以外は少ない順になり、「月」だけが大きい順になりました。
自分で調べた限りでは、FileMakerは検索にSJISを使う。SJISは部分一致で検索される。
Unicodeは完全一致で検索される。だから検索用に、Unicodeを使う?。
また、「館」もSJISとUnicodeなら同じ字でも別々に認識されるから、Unicodeを利用する?。

検証してないですが疑問点
索引のデフォルト言語をUnicodeにしたら、今回のCharで付与するやり方は使えないでしょうか?。

10^は便利だと思いました。
10^Length(めも)-1
だけを実行して、なるほど。と思いました。必ず同じ数のぞろ目になることと、字数がカウントできる点です。
Substitute( 値 ; [ 値 ; 値 ]) も知らなかったので勉強になりました。
リファレンスページに書かれていますが、見えてなかったし理解しようとしてなかったです。

ありがとうございました。

Offline

#5 2019-04-11 23:34:09

zouno33
Member

Re: Listの値を、文字数が少ない順に並べ替えしたいです

チポさんありがとうございます。

今は時間がとれないので、時間あるときに試してみます。
レコードのソート、指定、フィールド指定、ソート方法指定。ですよね?。

Offline

#6 2019-04-12 01:28:05

Hiro
Member

Re: Listの値を、文字数が少ない順に並べ替えしたいです

FMのソート仕様は、
・テキストソートと数値ソートでは、結果が相違します。
・数値は完全一致(=数値)比較でソートします。
      3<22<111
・テキストは前方1文字づつ文字コード番号順で比較ソートします。
      "111"<"22"<"3"
   (※>#4の文字数比較 ではありません。文字コード順です。)
・文字数(=数値)要素をテキストソートに持ち込む方策、つまり、
   数値要素→テキスト要素への転換策が必須です。

>#2の提案では、
ある文字〇を字数分〇を連ねて、それを対象文字列XXX...の
前につけています。
これで意図した文字数順でソートするためには、ソートの仕様から、
〇は以下に続くXXX...が何であれ絶対にノックアウトされない
最大文字コードであることが必要です。
その〇が、Char(64109)(="舘")な訳です。
(>#4 "館"=Char(39208) ではありませんヨ)

なお、FM内使用文字コードはUnicode(=UTF-16)で、
"舘"=u_64109番 と云うことです。

Offline

#7 2019-04-12 08:57:59

チポ
Member

Re: Listの値を、文字数が少ない順に並べ替えしたいです

> リレーションの設定でそのフィールドでソート指定
これはレコードのソートではありません。

リレーションシップグラフ > リレーションシップ編集 > レコードのソート
これを設定することで
照合順を指定することができます。

Offline

#8 2019-04-15 00:29:36

zouno33
Member

Re: Listの値を、文字数が少ない順に並べ替えしたいです

チポさん回答ありがとうございます。

わからなくなってきたので、改めて教えて下さい。
弄ってる内に混乱してきています。
分からない点は、リレーションペアはどれとどれかです。

基本:
テーブル1::ひらがな = テーブル2::平仮名
テーブル1::めも = テーブル2::雑記帳
テーブル2::雑記帳 雑記帳は計算で、SortValues ( List(テーブル1::めも) ; 1 )

文字数のフィールド
テーブル1::もじすう = テーブル1'::もじすう
リレーションシップグラフ > リレーションシップ編集 > レコードのソート
にて、テーブル1'::もじすう 側にソートを指定。指定フィールドはもじすうの昇順

でうまくいかずです。

Offline

#9 2019-04-15 01:22:21

Hiro
Member

Re: Listの値を、文字数が少ない順に並べ替えしたいです

チポさんではないですが、>#8にちょっと代返。

●基本リレーションのキー設定は、
   「テーブル1::ひらがな」 = 「テーブル2::平仮名」
   〇そのソートオプション設定は、(2段ソート設定で、)
   ・1段目は、「テーブル1::文字数」数値の昇順ソートを設定
   ・2段目は、「テーブル1::ひらがな」テキストの昇順ソートを設定

●目的の「テーブル2::雑記帳」 の計算式は、
   List(テーブル1::めも)
(※ソートはリレーションで処理済で、SortValues処理はもはや不要)

Offline

#10 2019-04-15 09:19:30

チポ
Member

Re: Listの値を、文字数が少ない順に並べ替えしたいです

リレーションの考え方はHiroさんの通りですが、、

単なる疑問です
最初の質問の
> テーブル1::ひらがな = テーブル2::平仮名
これはリレーションの説明ですか?

「ひらがな」フィールド
「平仮名」フィールド
にはどのような値が入っているのでしょうか?

また、
> テーブル1::めも = テーブル2::雑記帳
これも分かりません。。

Offline

#11 2019-04-16 19:31:06

zouno33
Member

Re: Listの値を、文字数が少ない順に並べ替えしたいです

チポさん
> テーブル1::ひらがな = テーブル2::平仮名
は、リレーションの説明のつもりでした。
よく見るとHiroさんは、カギ括弧で区切りを付けてるので意味の区切れが明確ですね。
いくつか表現の仕方があるのかも知れませんが、今後は伝わるように意識をします。

「ひらがな」「平仮名」フィールドは、それぞれに「あ」〜「ん」のひらがな文字が入ります。
これも、私だけわかってるつもりでした。
共通の値が存在しているフィールドです。

> テーブル1::めも = テーブル2::雑記帳
は、文字の並び順を書いた、あかパジャマ、おかりな、、、等々の単語が入ります。

Offline

#12 2019-04-17 08:59:55

チポ
Member

Re: Listの値を、文字数が少ない順に並べ替えしたいです

> テーブル1::ひらがな = テーブル2::平仮名
これがリレーションの照合だと、
両者が同じ平仮名一文字を持ったレコードが照合されますよね。

説明からは
> あかパジャマ
> おかりな
> きぱじゃま
> にす
> ・
> ・
> わなげ

これらが同じ「ひらがな」を持っていることになりますよね。
理解できません。。

また、
> テーブル1::めも = テーブル2::雑記帳
これもリレーションの照合とすると、
値から考えて、照合するレコードはあり得ないと思いますが。。

Offline

#13 2019-04-18 00:43:26

zouno33
Member

Re: Listの値を、文字数が少ない順に並べ替えしたいです

チポさん、ご指摘ありがとうございます。
おっしゃるとおり、私の説明の通りではうまくいきません。
もう一度見直すと、説明と違っていました。手を煩わせてすいません。
そしておつきあいいただいてありがとうございます。

表示できてるフィールドが、違うリレーションに紐付いてると思い込み違いをしていました。
自分で色々弄ってるうちに、わからなくてもなんとなくできていたようです。
他にも色々弄って、追加していき、そのままゴミとして残ってるものもあったりで散らかった部屋のようです。
わかってないので、説明も伝わらず、見返すと自分でもわからなくなってきました。
表示できてるリレーションは次に基づいています。
「テーブル1::ひらがな」 = 「テーブル2::平仮名」

「テーブル1::ひらがな」には「あ」〜「ん」のどれかが、入ります。例えば「あ」が17レコード、「い」が4レコードなどです。
「テーブル2::平仮名」には「あ」〜「ん」がそれぞれ1レコードずつ入ります。
「テーブル1::めも」に、あかパジャマ、おかりな、、などが入ります。
「テーブル2::雑記帳」は、 Substitute(SortValues(List(テーブル1::字数付めも); 1); [Char(64109);""]) が入っています。
これで希望する表示がされています。

「テーブル1::文字数」 を作って、
リレーションシップグラフ > リレーションシップ編集 > レコードのソート
をするためにつなぐのは、何をつなげば良いのでしょう?
それは、左側にくるテーブルに設定してやればいいのでしょうか?

また、Hiroさんも示してくださってる
> 〇そのソートオプション設定は、(2段ソート設定で、)
>    ・1段目は、「テーブル1::文字数」数値の昇順ソートを設定
>    ・2段目は、「テーブル1::ひらがな」テキストの昇順ソートを設定
が、それぞれ何とペアになるかがわかりません。
「テーブル2::ひらがな」や「テーブル2::文字数」でしょうか?
文字数のフィールドは、テーブル2にも作るということですよね?
そのとき、入れる値は何が入るのでしょう?。

Offline

#14 2019-04-18 11:40:05

チポ
Member

Re: Listの値を、文字数が少ない順に並べ替えしたいです

「ひらがな」
に疑問が残りますが、置いておいて。。

> リレーションシップグラフ > リレーションシップ編集 > レコードのソート
> をするためにつなぐのは、何をつなげば良いのでしょう?

現在のリレーションをそのまま使います。
そのリレーションの設定で、上記のソートの設定をします。

> 文字数のフィールドは、テーブル2にも作るということですよね
テーブル1のみで、テーブル2には不要ですよ。

Offline

#15 2019-04-18 19:43:13

zouno33
Member

Re: Listの値を、文字数が少ない順に並べ替えしたいです

チポさん、ありがとうございます。できました。
すっきりしました。できてみるとこんな簡単な事だったんだって思います。
おつきあいいただいてありがとうございます。

「テーブル1::ひらがな」は、「テーブル1::めも」に入る、
あかパジャマ、おかりな、きぱじゃま、にす、、、
の一文字目を取り出して使っています。
チポさんの疑問は、「あ」や「い」だけのレコードと、「あかパジャマ」「おかりな」
がイコールなわけはない。ってことでしょうか。

リレーションを結ぶのは、一文字のひらがな同士なので、
「テーブル1::めも」は直接関係ないので特に説明しませんでした。

チポさんの疑問が、私の思い込みでしたら、もっと教えて下さい。
説明します。

Offline

#16 2019-04-19 09:16:57

チポ
Member

Re: Listの値を、文字数が少ない順に並べ替えしたいです

テーブル1の「ひらがな」フィールドには、
「めも」フィールドの値の最初の一文字が入る。

ならば、
テーブル2で
> List(テーブル1::めも)
とすると、
最初の一文字が同じものがリストされるはずで、
> あかパジャマ
> おかりな
> きぱじゃま
> にす
> ・
> ・
> わなげ

こうなり得ないのでは??

説明と実際の設定がどこかで違っていますよね。

Offline

#17 2019-04-19 19:34:50

zouno33
Member

Re: Listの値を、文字数が少ない順に並べ替えしたいです

ちぽさん、こん**わ。
やっと気付きました。ありがとうございます。
あかパジャマ
あきはばら
あくろばっと
あけぼの
あこーでぃおん


あわび
です。

Offline

#18 2019-04-21 05:38:57

zouno33
Member

Re: Listの値を、文字数が少ない順に並べ替えしたいです

Hiroさん、
足りないところだらけの説明を理解してくれて
答えをだしてくれて、ありがとうございます。

チポさん、
思い込み違いな私につきあって、指導してくれて
ありがとうございます。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 565.98 KiB (Peak: 586.52 KiB) ]