みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
ver14 でwindows7です。
ある改行区切りになった値と別の改行区切りになった値とで逆フィルタをやりたいのですが、
方法が思いつきません。
説明では改行を","にします。
値)
1,2,3,4,5
1,3
結果)
2、4,5
を求めたいです。
それぞれの値の順番は不定です。
↓このような場合もあります。
2,3,1,5,4
3,1
同じく
2、5,4 が結果としてほしいです。
結果の並び順は問いません。
なにか関数でシンプルに解決できないでしょうか?
値は実際には品名のような文字列で、10~100個程度です。
よろしくお願いします。
Offline
以前Hiroさんがそんな計算式を作っていたような・・・?
Offline
内容に依ってはSubstituteでできるか・・・
Offline
旅人さん
探しましたが見つかりません。。。
値を順番にsubstituteで””にでも置き換えていけばいいんでしょうか?
そうすれば、残りますね。
理屈はわかっても計算式が、、、私には難解です。
Offline
きれいな式ではないのですが、再帰式で求めました
Let ( [
$tx = ¶ & 元のテキスト & ¶ ;
$k = 比較するテキスト ;
$c = ValueCount ( $k ) ;
$n = 0 ;
$r = ¶ ;
$s = "Case ( $n ≥ $c ; Middle ( $tx ; 2 ; Length ( $id ) - 2 ) ;
Let ( [ $n = $n + 1 ; $v = GetValue ( $k ; $n ) ; $id = Substitute ( $tx ; $r & $v & $r ; $r ) ] ; Evaluate ( $s ) ) )" ] ;
Evaluate ( $s )
)
やっていることは、
比較するテキストを1行ずつ取り出して、
元のテキストにそれが有れば消す。
その繰り返しです。
テキストが
AB
と
A
の様に内包されている場合を考慮して
¶AB¶
と
¶A¶
で比較する様にしています。
Last edited by チポ (2016-07-28 17:55:48)
Offline
Substituteでも多分できますが、比較するテキスト側が数十行もあったら
GetValueで1行ずつ取り出す必要があるので、その式だけでかなりの長さ
になりそう。
Offline
所謂、FilterValuesの逆関数の機能ですネ。
再帰ループ式が一般的解法ですが既にチポさんが回答済なので、
代わって再帰ループ式でない一般(Substitute)式による別法をば!
Let(
[
$prm[1]=元の一覧リスト;
$prm[1]=¶ & $prm[1] & ¶;
$prm[2]=比較する一覧リスト;
$prm[2]="[\"\¶" & Substitute($prm[2]; [¶; "\¶\";\"\¶\"];[\"\¶"]) & "\¶\";\"\¶\"]";
$prm[2]="Substitute($prm[1];" & $prm[2] & ")";
$res=Evaluate($prm[2]);
$res="\"" & Substitute($res;[¶;"\";\""]) & "\";\"\"";
$res="List(" & $res & ")"
];
Evaluate($res)
)
Last edited by Hiro (2016-07-28 21:02:34)
Offline
チポさん、Hiroさん、
式をご教授いただきまして、ありがとうございます!!
さっそくいまから試してみます。
Offline
試してみました。
残念ながら、チポさんの式ではうまく結果が出てきませんでした。
結果の出方がまちまちで、どううまく出ないかがお伝えできないのですが。
せっかく作っていただいたのに、ごめんなさい。
(私の式への値の入れ方がおかしいのかもしれません)
Hiroさんのほうでは結果OKでした。
みなさま、大変助かりました。
ありがとうございました。
Offline
解決ですが、、
ああ、式のコピペで間違いが有りました
Let ( [
$tx = ¶ & 元のテキスト & ¶ ;
$k = 比較するテキスト ;
$c = ValueCount ( $k ) ;
$n = 0 ;
$r = ¶ ;
$s = "Case ( $n ≥ $c ; Middle ( $tx ; 2 ; Length ( $tx ) - 2 ) ;
Let ( [ $n = $n + 1 ; $v = GetValue ( $k ; $n ) ; $tx = Substitute ( $tx ; $r & $v & $r ; $r ) ] ; Evaluate ( $s ) ) )" ] ;
Evaluate ( $s )
)
これでいいでしょう。
Last edited by チポ (2016-07-29 11:50:49)
Offline
チポさん、
訂正ありがとうございます。
結果OKです!!
いつも助けていただいて感謝しています。
Offline
Pages: 1
[ Generated in 0.014 seconds, 10 queries executed - Memory usage: 521.36 KiB (Peak: 525.9 KiB) ]