みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
お世話になります。
win7、FM8を使用しています。
参照するテーブルAの店舗名フィールド
aaa店
bbb店
ccc店
テーブルBの備考フィールドに
aaa店6/23
6/23aaa店
6/23 bbb店
テーブルBの店舗フィールドに
aaa店
aaa店
bbb店
テーブルBの備考フィールドにテーブルAの店舗名フィールドのどれかと照合できた場合、
テーブルBの店舗名フィールドにその照合した文字列を抜き出したいです。
Offline
Filter関数
ValueListItems関数
で取り出せます。
FM13のヘルプですが、同じですからリンクしておきますね
http://www.filemaker.com/help/13/fmp/ja … tml#700914
http://www.filemaker.com/help/13/fmp/ja … tml#978076
Offline
テーブルAの店舗名フィールドで「店舗名」という名前の値一覧を作成しました。
テーブルBの店舗名フィールドに計算値自動入力で
Filter ( 備考 ;ValueListItems ( Get( ファイル名 ) ; "店舗名" ) )
として、「インポート中、入力値の自動化オプションを実行」にチェックを入れて
テキストデータをインポートしたのですが
値が返ってきません。
どこがおかしいのでしょうか?
Offline
設定に間違いはなさそうですよ。
試しに、
計算フィールドで
ValueListItems ( Get( ファイル名 ) ; "店舗名" )
として、
正しくリストが得られているか見てみたらいかがでしょう。
Offline
ありがとうございます。入力違っている個所がありました。
値返ってきたのですが、
参照するテーブルAの店舗名フィールドに
aaa店
bbb_6店
ccc通り店
とすると、テーブルBの備考フィールドに
aaa店_6/1通常
とテキストが入ってきた時に
テーブルBの店舗名フィールドに
aaa店
ではなく、
aaa店_6通
となってしまい、値一覧の一文字でも合致したらその値が返ってきてしまうようなんですが
どうすればいいでしょうか。
Offline
ああ、そうでした。
Filterは一文字ずつ評価するのですからそうなりますね。
まったくの迂闊でした、申し訳有りません。
答えられるか分りませんが、、
結果は、
備考に含まれている店名を重複を含めてその元の順の通り
でなければダメなのですか?
Offline
インポートした順という事でしょうか?
あとあと、発送日でソートをかけるので
レコードごとその店舗名さえ抽出できればいいです。
何か良い方法はありますでしょうか?
Offline
備考を値一覧のリストの一つずつ
PatternCount
で判定し、同じ店名が有ればリストにする。
これの再帰式
Let ( [
$c = 0 ;
$l = ValueListItems ( Get ( ファイル名 ) ; "値一覧名" ) ;
$t = 備考 ;
$r = "" ;
$s = " Case ( $c = ValueCount ( $l ) + 1 ; $r ;
Let ( [
$c = $c + 1 ;
$f = GetValue ( $l ; $c ) ;
$r = List ( $r ; Case ( PatternCount ( $t ; $f ) ; $f ) ) ] ; Evaluate ( $s ) ) )" ] ;
Evaluate ( $s ) )
返る値は、値一覧のリストの順になり、
店名の重複は一つになります。
多分これでいいと思いますが・・
Offline
ありがとうございます。
再帰式は、テーブルBの店舗名フィールドの計算値自動入力のところに
入力すればいいのでしょうか?
Offline
そうですが、
後から編集することがないのでしたら、
計算フィールドでいいのでは。
Offline
計算フィールドにして、計算結果「テキスト」としたのですが
戻り値が全て"?"になってしまいました。
どこか設定が違っているのでしょうか?
Offline
$l = ValueListItems ( Get ( ファイル名 ) ; "値一覧名" )
この値一覧名は、実際の値一覧名を入力します。
$s = " Case ( $c = ValueCount ( $l ) + 1 ; $r
+ 1
は不要です。
有っても特に問題となりませんが、、
他はその通りで計算されるはずですよ。
Offline
テーブルAの店舗名フィールドで値一覧「店舗名」を作成し、
テーブルBの店舗名最終フィールドに下記の様に計算式を入れたのですが
合っていますでしょうか?
Let ( [
$c = 0 ;
$l = ValueListItems ( Get ( ファイル名 ) ; "店舗名" ) ;
$t = 備考 ;
$r = "" ;
$s = " Case ( $c = ValueCount ( $l ) + 1 ; $r ;
Let ( [
$c = $c + 1 ;
$f = GetValue ( $l ; $c ) ;
$r = List ( $r ; Case ( PatternCount ( $t ; $f ) ; $f ) ) ] ; Evaluate ( $s ) ) )" ] ;
Evaluate ( $s ) )
Offline
合っていますよ。
書かれた式のコピペで検証しましたが、正確に表示されています。
Offline
すいません。いろいろ試しているのですが、未だ"?"のままです…
Bテーブルの値一覧「店舗名」は
最初のフィールド値を使用で、値一覧の内容はすべてを含めるにしています。
1レコード目 AAA店
2レコード目 BBB店
3レコード目 CCC店
Aテーブルに「リスト」という計算フィールドを非保存で作成
ValueListItems ( Get ( ファイル名 ) ; "店舗名" )
「リスト」フィールドは
AAA店
BBB店
CCC店
となっているので値一覧作成までは問題なさそうです。
Aテーブルに「店舗名最終」という計算フィールドを作成、
索引設定:最小限、式内の全フィールドの値が空欄の時計算しないにチェックを入れ、
教えて頂いた計算式を入れてあります。
「備考」フィールドにAAA店と入力があるcsvデータをインポートしたのですが
"?"になってしまいます。
「備考」フィールドが空の時は「店舗名最終」も空なのですが
「備考」フィールドに何かしらデータが入ると「店舗名最終」は"?"になってしまうようです。
正確に表示されない原因は何か考えられますでしょうか?
Offline
備考フィールドのタイプの確認と、
手入力でテキストを入力してみたらいかがでしょう。
Offline
もし可能でしたら見て頂けませんでしょうか。
Offline
ごめんなさい、
ここではファイルのアップ・ダウンはしないことにしています。
試しに、
索引設定:最小限、式内の全フィールドの値が空欄の時計算しないにチェックを入れ
これを索引非保存にしてみたらいかがでしょう。
もし計算されたら、また元に戻してみてください。
Offline
Pages: 1
[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 554.89 KiB (Peak: 575.8 KiB) ]