みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつもお世話になっております。
FileMaker17 Windows10で使用中
フィールド1 おおおおお
フィールド2 いいいいい
フィールド3 えええええ
フィールド4 あああああ
フィールド5 ううううう
フィールド6(並び替え後のフィールド)
みたいなレコードがあり、
あああああ→いいいいい→ううううう→えええええ→おおおおお
のように並び替えをし、フィールド6へ並び替えた文字を入力したいです。
現在は、
変数設定[ $Value ;
値:"あああああ" & ¶ &
"いいいいい" & ¶ &
"ううううう" & ¶ &
"えええええ" & ¶ &
"おおおおお"
]
みたいなものを作り、GetValueでフィールド毎に合っているか否かをLoop処理で計算。
ただし、機械的に$Valueにはまっている文字列だけではなく、例えば
あいうえおやかきくけこが急に入って来たり等
Loop処理で漏れる文字列もあり、苦戦しています。
何か簡単に入れ替える方法はありませんでしょうか。
Offline
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
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
実は、フィールド内でも入れ替えが必要になりまして。
フィールド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
Pages: 1
[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 509.16 KiB (Peak: 516.02 KiB) ]