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

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

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

You are not logged in.

Announcement

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


#1 2019-11-02 13:34:19

antoyukimi
Guest

特定文字を含む行の数値だけを抽出したい

ファイルメーカー初心者です。

テキストフィールドに下記のような内容があるとします。

01青線 150.12345
02赤線 129.14567
03緑線   20.54689
04黄線   12.56789

この中から
02赤線の数値、129.14567だけを抽出したいです。

ポイントとしては、01青線がない場合、02赤線が1行目にきます。
また、数値は固定ではなく変動します。

どうか力を貸してください。
よろしくお願いします。

#2 2019-11-02 16:27:15

Shin
Member

Re: 特定文字を含む行の数値だけを抽出したい

ちょっときつく書きますが。

データベースの構造として、
そのテキストがその様な値を持つ事自体がだめ。1行を1レコードにするように取り込むべきでしょう。
また、項目とデータが1行にあるのがだめ。それぞれをフィールドに分けて格納するべきでしょう。

次に、何を基準に抽出するのかを書きましょう。
ポイントも、的外れで何を書きたいのかわかりません。

とりあえず、"02赤線" を含む行の数値を求めるには、
Let (
[    pos0 = Position ( text ; "02赤線" ; 1 ; 1 ) + Length ( "02赤線" ) ;
    pos1 = Position ( text ; ¶ ; pos0 ; 1 )
] ;
    Middle ( text ; pos0 ; pos1 - pos0 )
)

Offline

#3 2019-11-02 16:47:34

koeda
Member

Re: 特定文字を含む行の数値だけを抽出したい

とりあえず動けば良いレベルでベタベタな式ですけど…
ゴミとか入ってしまうと動作保証できません(^^ゞ

Let (
  [
     ~value1 = GetValue ( 元データ ; 1 ) ;
     ~value2 = GetValue ( 元データ ; 2 ) ;
     ~value3 = GetValue ( 元データ ; 3 ) ;
     ~value4 = GetValue ( 元データ ; 4 ) ;

     ~return = Case (
        PatternCount ( ~value1 ; "02赤線" ) ; RightWords ( ~value1 ; 1 ) ;
        PatternCount ( ~value2 ; "02赤線" ) ; RightWords ( ~value2 ; 1 ) ;
        PatternCount ( ~value3 ; "02赤線" ) ; RightWords ( ~value3 ; 1 ) ;
        PatternCount ( ~value4 ; "02赤線" ) ; RightWords ( ~value4 ; 1 ) ;
        ””
     )
  ] ;
  GetAsNumber ( ~return )
)

Last edited by koeda (2019-11-02 16:51:46)

Offline

#4 2019-11-02 16:57:37

antoyukimi
Guest

Re: 特定文字を含む行の数値だけを抽出したい

koeda様

理想通りに出来ました!
ご協力いただきありがとうございます。大変助かりました!!

#5 2019-11-02 22:35:43

Hiro
Member

Re: 特定文字を含む行の数値だけを抽出したい

終わってますが、
>#3kpedaさんの仮式より、汎用性のより高い動的式の提案です。
その時の行数に応じて、動的に動作するループ計算式です。

【ループ計算式】(計算結果:数値タイプを指定)
Let(
[
   $txt=テキストフィールド;
   $key=Quote("02赤線");
   $i=0;
   $res="";
   $LOOP=
      "Case(
         $i=ValueCount($txt) or Length($res); $res;
         Let([
            $i=$i+1;
            #itm=GetValue($txt; $i);
            $res=Case(PatternCount(#itm; Evaluate($key)); #itm)
            ]; Evaluate($LOOP))
      )"
];
   RightWords(Evaluate($LOOP); 1)
)

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.034 seconds, 9 queries executed - Memory usage: 509.05 KiB (Peak: 515.94 KiB) ]