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

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

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

You are not logged in.

Announcement

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


#1 2020-07-10 13:39:35

Chikutaku
Member

フィールドに入っている文字列を判別する

いつもお世話になっております。
FileMaker17 Windows10で使用中

フィールド1 おおおおお
フィールド2 いいいいい
フィールド3 えええええ
フィールド4 あああああ
フィールド5 ううううう
フィールド6(並び替え後のフィールド)

みたいなレコードがあり、
あああああ→いいいいい→ううううう→えええええ→おおおおお
のように並び替えをし、フィールド6へ並び替えた文字を入力したいです。

現在は、
変数設定[ $Value ;
値:"あああああ" & ¶ &
"いいいいい" & ¶ &
"ううううう" & ¶ &
"えええええ" & ¶ &
"おおおおお"
]
みたいなものを作り、GetValueでフィールド毎に合っているか否かをLoop処理で計算。
ただし、機械的に$Valueにはまっている文字列だけではなく、例えば
あいうえおやかきくけこが急に入って来たり等
Loop処理で漏れる文字列もあり、苦戦しています。

何か簡単に入れ替える方法はありませんでしょうか。

Offline

#2 2020-07-10 15:46:15

Hiro
Member

Re: フィールドに入っている文字列を判別する

FMP16以降はSortValues関数が使えるので、
フィールド6を計算フィールドとして、その式にSortValues関数を適用するのが吉です。
(※なお、式は、「空欄行識別」と「末尾改行除去」に対応しています。)

Let([
   #lst=List(フィールド1&Char(1);フィールド2&Char(1);フィールド3&Char(1);フィールド4&Char(1);フィールド5&Char(1));     //「空欄行識別」処理
   #lst=Substitute(#lst;[Char(1);Char(0)]);
   #lst=SortValues(#lst;1)
];
   Substitute(#lst&Char(1);[Char(13)&Char(1);Char(0)];[Char(1);Char(0)])      //「末尾改行除去」処理
)

Offline

#3 2020-07-10 16:10:29

Chikutaku
Member

Re: フィールドに入っている文字列を判別する

Hiro wrote:

FMP16以降はSortValues関数が使えるので、
フィールド6を計算フィールドとして、その式にSortValues関数を適用するのが吉です。
(※なお、式は、「空欄行識別」と「末尾改行除去」に対応しています。)

Let([
   #lst=List(フィールド1&Char(1);フィールド2&Char(1);フィールド3&Char(1);フィールド4&Char(1);フィールド5&Char(1));     //「空欄行識別」処理
   #lst=Substitute(#lst;[Char(1);Char(0)]);
   #lst=SortValues(#lst;1)
];
   Substitute(#lst&Char(1);[Char(13)&Char(1);Char(0)];[Char(1);Char(0)])      //「末尾改行除去」処理
)

なるほど。ありがとうございます。
確かにフィールド毎にソートされました。

これを流用して、任意のソートはできますか。
実は、フィールド内でも入れ替えが必要になりまして。
フィールド1におえいうあみたいな文字列が入り、
それをあいうえおに戻す作業も必要になりました。

任意のソートになれば、フィールド・フィールド内問わず、入れ替えができるのかなと思った次第です。
申し訳ございませんが教えてください。

Offline

#4 2020-07-11 00:43:01

Hiro
Member

Re: フィールドに入っている文字列を判別する

#3>Chikutaku wrote:

実は、フィールド内でも入れ替えが必要になりまして。
フィールド1に『おえいうあ』みたいな文字列が入り、
それを『あいうえお』に戻す作業も必要になりました。

ループ式で求める方法。
空白「□」も識別してソートします。  「おえ□いうあ」→「□あいうえお」


Let([
   $LOOP=
      "Case(
            IsEmpty($txt)
            ; Substitute(SortValues($res);[Char(13);Char(0)])
            ; Let([$res=List($res; Left($txt;1)); $txt=Replace($txt;1;1;Char(0))]; Evaluate($LOOP))
      )"
];
   Let([$txt=テキスト;$res=Char(0)];Evaluate($LOOP))
)

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.012 seconds, 9 queries executed - Memory usage: 509.13 KiB (Peak: 515.98 KiB) ]