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

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

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

You are not logged in.

Announcement

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


#1 2016-10-13 16:41:56

pon
Member

改行区切りのテキストから、特定の頭文字列の行だけを残してあとは削除

OS:[win7]
FileMaker Ver:[15]


どうぞ宜しくお願いします。


このような改行区切りのテキストがあります。
毎日更新される地金価格の一覧です。


K24    4,372円/g
K22    3,971円/g
K21.6    3,899円/g
K20    3,628円/g
K18    3,335円/g
K14    2,479円/g
K10    1,722円/g
K9    1,532円/g


ここから、頭がK24とK18のものだけを残し、
後は削除したテキストを取得したいのですが、
どのようにすればよいでしょうか。

K24    4,372円/g
K18    3,335円/g



ご教授お願い致します。

Offline

#2 2016-10-13 17:49:25

シャチ
Member

Re: 改行区切りのテキストから、特定の頭文字列の行だけを残してあとは削除

考え方として
1:LeftValues関数で最初の行だけを抜き出して
2:元データから 1の結果を削除
3:元データから3のデータを削除
で解決できます。

計算式は下記のようになります。
Let(
[
$txt=テキスト;
$firstLine=LeftValues($txt;1);
$others=Substitute($txt;$firstLine;"")
];
Substitute($txt;[$others;""];["¶";""])
)

Offline

#3 2016-10-13 18:05:37

pon
Member

Re: 改行区切りのテキストから、特定の頭文字列の行だけを残してあとは削除

説明が不足していました。すみません。

K24、K18の他にも残したい頭文字の行がたくさんあり、
上からの行目ではなく頭文字を使って判定したいのです。
また、元テキストの順序が変わっても影響受けないものにしたいです。

Offline

#4 2016-10-13 18:20:32

シャチ
Member

Re: 改行区切りのテキストから、特定の頭文字列の行だけを残してあとは削除

ごめんなさい
私が間違えていた。
それで、残したいワードはいくつあるんですか?
2個とか4個くらいならなんとか計算できるかな?
2個以上ならスクリプト組んだらいいかと思うけど。

Offline

#5 2016-10-13 18:32:52

チポ
Member

Re: 改行区切りのテキストから、特定の頭文字列の行だけを残してあとは削除

指定の文字が含まれる行をピックアップしてリストを作って行く再起式です

  Let ( [ $t = テキスト ;
           $ct = 0 ;
           $tx = "" ;
           $K24 = "K24" ;
           $K18 = "K18" ;
           $f = "Case ( $ct = ValueCount ( $t ) ; $tx ;
                                 Let ( [ $ct = $ct + 1 ;
                                           $v = GetValue ( $t ; $ct ) ;
                                          $tx =  List ( $tx ; Case ( PatternCount ( $v ; $K24 ) ; $v ;
                                                                              PatternCount ( $v ; $K18 ) ; $v ) ) ] ;
          Evaluate ( $fc ) ) )"
          ] ; Evaluate ( $f ) )

これで出来るかと、、

Offline

#6 2016-10-13 19:09:09

旅人
Member

Re: 改行区切りのテキストから、特定の頭文字列の行だけを残してあとは削除

いつも1行目と5行目にあるのなら
GetValue (そのフィールド ; 1 ) & ¶ & GetValue (そのフィールド ; 5 )
ですけど。

Offline

#7 2016-10-13 22:52:51

シャチ
Member

Re: 改行区切りのテキストから、特定の頭文字列の行だけを残してあとは削除

前の回答は間違えてたのでじっくり考えてスクリプトで処理するのもを作りました。
説明は長くなるので 作例を見てください。
作例は、 http://yahoo.jp/box/Ww_rlD にあります。
ただ、同じ先頭文字が元データに存在すると
結果はソートされたものになるという欠点があります
それがまずいときは、修正してください。

Offline

#8 2016-10-14 02:26:19

Hiro
Member

Re: 改行区切りのテキストから、特定の頭文字列の行だけを残してあとは削除

> K24、K18の他にも残したい頭文字の行がたくさんあり
> また、元テキストの順序が変わっても影響受けないものにしたい

追加行が沢山あるということなら、式を一々改造しなくてもよい様、
計算式(2重ループ計算式)の汎用式化をしてみました。

Let([
   $txt=テキスト;
   $kys=List("k18";"k22";"k24");  //←ココに、必要なキーワードを希望表示順で、好きなだけ列挙
   $i=0;
   /**主式**/
   $fnc="Case($i=ValueCount($kys); $res;
      Let([
         $i=$i+1;
         $k=GetValue($kys;$i);
         $res=List($res; Let([$j=0;$v=\"\"];Evaluate($sub)))
      ]; Evaluate($fnc))
   )";
   /**副式**/
   $sub="Case($v<>\"\" or $j=ValueCount($txt); $v;
      Let([
         $j=$j+1;
         $itm=GetValue($txt;$j);
         $v=Case(PatternCount($itm;$k);$itm)
      ];Evaluate($sub))
   )"
];
   Evaluate($fnc)
)


ついでながら、#5チポさん式中にタイポがありますので修正を記しておきます。
      Evaluate ( $fc ) ) )"    →     Evaluate ( $f ) ) )"

Last edited by Hiro (2016-10-14 02:36:39)

Offline

#9 2016-10-14 09:06:42

シャチ
Member

Re: 改行区切りのテキストから、特定の頭文字列の行だけを残してあとは削除

前に回答したのは 結果の順序が元データと異なるという欠点がありました。
よく考えたら 計算を逆にしてたんです

ということで逆にならないように変更
そしてついでに、実行ボタンがついていなかったので
それもつけました。

前の欠点のあるものも載せてますので
比較すると考えの間違いもわかるかと思います。

作例は
http://yahoo.jp/box/899RUV
に載せてます。

Offline

#10 2016-10-14 09:19:17

チポ
Member

Re: 改行区切りのテキストから、特定の頭文字列の行だけを残してあとは削除

ああ、間違えていますね。

Hiroさんのご指摘の通りです、
修正お願いいたします。

Hiroさん、ご指摘ありがとうございます。

Offline

#11 2016-10-14 09:35:42

旅人
Member

Re: 改行区切りのテキストから、特定の頭文字列の行だけを残してあとは削除

最初の質問しか見ていなかった・・・・
繰り返しに変換してListしたら分かりやすいかな?

繰り返し20位の計算フィールドを作って式は
変換=Let ([x=GetValue (そのフィールド[1] ; Get (計算式繰り返し位置番号)) ; y=  LeftWords (x ; 1)] ;Case(y="K24" or y="K18" ; x))

答=List(変換)

Offline

#12 2016-10-14 11:40:21

チポ
Member

Re: 改行区切りのテキストから、特定の頭文字列の行だけを残してあとは削除

改行テキストでは、データとして扱いづらいですよね。
というか、データとしてはほとんどなっていませんよね。


1行ごとに1レコードの別テーブルが理想ですが、
そうするにはスクリプトが必要で、
とすれば、
そのスクリプトで抜き出すのも手かもしれませんね。

Offline

#13 2016-10-14 13:09:13

pon
Member

Re: 改行区切りのテキストから、特定の頭文字列の行だけを残してあとは削除

皆さま、ありがとうございます。
おかげさまで希望していたことが実現できました。

蓄積するデータではないのですが、
毎日手作業で行っている事をFileMakerで
なんとかできないかと考えて質問させていただいた次第です。

まだ全てを理解できていないのですが、
じっくり勉強させていただきます。

ありがとうございました。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 536.59 KiB (Peak: 557.49 KiB) ]