みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
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
考え方として
1:LeftValues関数で最初の行だけを抜き出して
2:元データから 1の結果を削除
3:元データから3のデータを削除
で解決できます。
計算式は下記のようになります。
Let(
[
$txt=テキスト;
$firstLine=LeftValues($txt;1);
$others=Substitute($txt;$firstLine;"")
];
Substitute($txt;[$others;""];["¶";""])
)
Offline
説明が不足していました。すみません。
K24、K18の他にも残したい頭文字の行がたくさんあり、
上からの行目ではなく頭文字を使って判定したいのです。
また、元テキストの順序が変わっても影響受けないものにしたいです。
Offline
ごめんなさい
私が間違えていた。
それで、残したいワードはいくつあるんですか?
2個とか4個くらいならなんとか計算できるかな?
2個以上ならスクリプト組んだらいいかと思うけど。
Offline
指定の文字が含まれる行をピックアップしてリストを作って行く再起式です
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
いつも1行目と5行目にあるのなら
GetValue (そのフィールド ; 1 ) & ¶ & GetValue (そのフィールド ; 5 )
ですけど。
Offline
前の回答は間違えてたのでじっくり考えてスクリプトで処理するのもを作りました。
説明は長くなるので 作例を見てください。
作例は、 http://yahoo.jp/box/Ww_rlD にあります。
ただ、同じ先頭文字が元データに存在すると
結果はソートされたものになるという欠点があります
それがまずいときは、修正してください。
Offline
> 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
前に回答したのは 結果の順序が元データと異なるという欠点がありました。
よく考えたら 計算を逆にしてたんです
ということで逆にならないように変更
そしてついでに、実行ボタンがついていなかったので
それもつけました。
前の欠点のあるものも載せてますので
比較すると考えの間違いもわかるかと思います。
作例は
http://yahoo.jp/box/899RUV
に載せてます。
Offline
ああ、間違えていますね。
Hiroさんのご指摘の通りです、
修正お願いいたします。
Hiroさん、ご指摘ありがとうございます。
Offline
最初の質問しか見ていなかった・・・・
繰り返しに変換してListしたら分かりやすいかな?
繰り返し20位の計算フィールドを作って式は
変換=Let ([x=GetValue (そのフィールド[1] ; Get (計算式繰り返し位置番号)) ; y= LeftWords (x ; 1)] ;Case(y="K24" or y="K18" ; x))
答=List(変換)
Offline
改行テキストでは、データとして扱いづらいですよね。
というか、データとしてはほとんどなっていませんよね。
1行ごとに1レコードの別テーブルが理想ですが、
そうするにはスクリプトが必要で、
とすれば、
そのスクリプトで抜き出すのも手かもしれませんね。
Offline
皆さま、ありがとうございます。
おかげさまで希望していたことが実現できました。
蓄積するデータではないのですが、
毎日手作業で行っている事をFileMakerで
なんとかできないかと考えて質問させていただいた次第です。
まだ全てを理解できていないのですが、
じっくり勉強させていただきます。
ありがとうございました。
Offline
Pages: 1
[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 534.34 KiB (Peak: 555.25 KiB) ]