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

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

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

You are not logged in.

Announcement

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


#1 2018-06-26 10:23:48

terra
Member

あるレコードから検索条件に合致したテキストから数えて2項目のテキストを抽出したい

あるレコードがあるのですが、そのレコードから検索テキストに合致するもので、且つそこから右に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

#2 2018-06-26 12:18:30

Shin
Member

Re: あるレコードから検索条件に合致したテキストから数えて2項目のテキストを抽出したい

List() で取得した結果はどうなっていますか。

Offline

#3 2018-06-26 12:40:09

Hiro
Member

Re: あるレコードから検索条件に合致したテキストから数えて2項目のテキストを抽出したい

再帰ループ式で求める方法

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

#4 2018-06-26 12:42:05

terra
Member

Re: あるレコードから検索条件に合致したテキストから数えて2項目のテキストを抽出したい

Shin wrote:

List() で取得した結果はどうなっていますか。

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

前述したように
Aさん 10:00  Bさん 15:00 Cさん 16:00
といったように出てきます。

フィールド定義は、
List(担当者 & 時間)となっています。

上記で抽出した結果を以下のように検索置換して一列表示しています。

Substitute ( フィールド ; ¶ ; "       " )

Last edited by terra (2018-06-26 12:57:30)

Offline

#5 2018-06-26 13:08:57

Shin
Member

Re: あるレコードから検索条件に合致したテキストから数えて2項目のテキストを抽出したい

let (
[
t = List(担当者 & 時間) ;
n = ValueCount ( Left ( t ; Position ( t ; "" )
] ;
GetValue ( t ; n )
)
これを、時刻で返すだけです。

Offline

#6 2018-07-02 07:59:12

terra
Member

Re: あるレコードから検索条件に合致したテキストから数えて2項目のテキストを抽出したい

Shin様、ありがとうございました。
ご返答が遅れてしまい申し訳ありませんでした。

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: 564.14 KiB (Peak: 589.16 KiB) ]