みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
あるレコードがあるのですが、そのレコードから検索テキストに合致するもので、且つそこから右に1項目のテキストを抽出することはできませんか?
そのあるレコードは、List関数で取得しており Substitute 関数で改行をなくして表示しています。
Aさん 10:00 Bさん 15:00 Cさん 16:00
こんな風に1顧客に対して担当者が関わる時間がリストで表示されます。
このレコードから、
もしAさんが含まれたらAさんの関わる時間のみを抽出
もしBさんが含まれたらAさんの関わる時間のみを抽出
もしCさんが含まれたらAさんの関わる時間のみを抽出
もしDさんが含まれたらAさんの関わる時間のみを抽出
という風に検索抽出したいです。
A~Dさんまでいます。
→Aさん 10:00
→Bさん 15:00
→Cさん 16:00
分かりにくい文すいませんがよろしくお願いします。
Offline
List() で取得した結果はどうなっていますか。
Offline
再帰ループ式で求める方法
Let([
$key=検索氏名 フィールド; // "Aさん"
$txt=連結データ フィールド; // "Aさん 10:00 Bさん 15:00 Cさん 16:00"
$txt=Substitute($txt; [Char(32);¶]);
$i=0;
$res="";
$fnc=
"Case(IsEmpty($res)=0 or $i=ValueCount($txt); $res;
Let([
$i=$i+1;
#itm=GetValue($txt; $i);
$res=Case(#itm=$key; GetValue($txt; $i+1))
]; Evaluate($fnc) )
)"
];
Evaluate($fnc) // $fnc ループ式 実行結果 → "10:00"
)
+++++++++++++++++++++++++++++
【 補足 】
上記 再帰ループ式でなくとも、単純変数のベタベタ式でもできますネ。
Let([
#key=検索氏名 フィールド; // "Bさん"
#arg=連結データ フィールド; // "Aさん 10:00 Bさん 15:00 Cさん 16:00"
#arg=Substitute(#arg; [#key&Char(32); #key&¶]); // → "Aさん 10:00 Bさん ¶15:00 Cさん 16:00"
#arg=GetValue(#arg; 2); // → "15:00 Cさん 16:00"
#arg=Substitute(#arg; [Char(32); ¶]); // → "15:00¶Cさん¶16:00"
#arg=GetValue(#arg; 1) // → "15:00"
];
#arg // 最終結果 = "15:00"
)
Last edited by Hiro (2018-06-26 14:52:41)
Offline
List() で取得した結果はどうなっていますか。
Shin様、ありがとうございます。
前述したように
Aさん 10:00 Bさん 15:00 Cさん 16:00
といったように出てきます。
フィールド定義は、
List(担当者 & 時間)となっています。
上記で抽出した結果を以下のように検索置換して一列表示しています。
Substitute ( フィールド ; ¶ ; " " )
Last edited by terra (2018-06-26 12:57:30)
Offline
let (
[
t = List(担当者 & 時間) ;
n = ValueCount ( Left ( t ; Position ( t ; "" )
] ;
GetValue ( t ; n )
)
これを、時刻で返すだけです。
Offline
Shin様、ありがとうございました。
ご返答が遅れてしまい申し訳ありませんでした。
Offline
[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 563.95 KiB (Peak: 588.96 KiB) ]