みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
環境は FileMaker 10 Mac です。
下記の処理を行いたいのですが、フィールド内の一部の文字のみを置換する方法を教えていただけないでしょうか。
テーブル M1 に Text というフィールドがあります。
テーブル EDIT には EDIT1 と EDIT2 というフィールドがあります。
例
M1 Text
<br>・相違点のみを変換する。
<br>・一致点のみを変換する。
EDIT EDIT1 EDIT2
<br>・相違点 違う部分
<br>・一致点 同じ部分
変換する 取り換える
結果
M1 Text
違う部分のみを取り換える。
同じ部分のみを取り換える。
EDIT テーブルを設けた理由は、置換する条件や内容が増えたり変わったりする可能性があり、スクリプト内に埋め込みたくなかったためです。
EDITテーブルを順次読み「対象レコードの絞り込み」で「M1::TEXT=EDIT::EDIT1」とし、次のステップで上記の処理を行うのではないかと考えたのですが、フィールド内の一部の文字のみを置換する方法がわかりません。
どうぞ、よろしくお願い申し上げます。
Offline
例では、
Substitute ( Text ; ["相違点" ; "違う部分"];["一致点" ; "同じ部分"];["変換する" ; "取り換える"] )
という式で全置換すれば良いですね。
これを動的に動かすために、 M2 に「["相違点" ; "違う部分"]」 を返す計算フィールド M12 を作っておき、M1 と EDIT にいわゆる×リレーションを張り、
Evaluate ( "Substitute ( Text ; " & Substitute ( List ( EDIT::EDIT12 ) ; ¶ ; ";" ) & " )" )
という式にしておけば、良いでしょう。ただ、文字数に制限が有るので、置換項目数は有限です。
https://www.dropbox.com/s/k1vdjr5s8i4rv … 7.zip?dl=0
サンプルファイルは、全置換ではなく、計算フィールドに結果を表示させてあります。
または、上の同じ様な事を、1項目毎にloop を回しても良いかと思います。
Last edited by Shin (2016-06-24 08:47:27)
Offline
Shin 様
いつもありがとうございます。
前述のデータにて EDIT テーブルで下記のスクリプトを実行しました。
エラー処理[オン]
全レコードを表示
関連レコードへ移動 → M1
If [Get(最終エラー)=0]
フィールド内容の全置換[M1::TEXT; Evaluate ( "Substitute ( Text ; " & Substitute ( List ( EDIT::EDIT12 ) ; ¶ ; ";" ) & " )" )
Enf if
全レコードを表示
すると何も起こりませんでした。
そこで、下記のデータに切り替えて同スクリプトを実行したところ、下記の結果になりました。
M1 Text
あいうえお
かあいうえおき
あいたちつてと
たちつてと
たちつてとあ
EDIT EDIT1 EDIT2 EDIT12(自動入力)
あいうえお なにぬねの ["あいうえお" ; "なにぬねの"]
たちつてと はひふへほ ["たちつてと" ; "はひふへほ"]
結果
M1 Text
なにぬねの
かあいうえおき
あいたちつてと
はひふへほ
たちつてとあ
Text フィールドと全一致しないと置換されない理由は何でしょうか。
また、このスクリプトでは「<br>」などの文字が入ると動作しないのでしょうか。
教えていただいたサンプルファイルに「<br>」を入れても正しく Text_ フィールドは置換されています。
何か致命的な勘違いをしていそうです。
どうぞ、よろしくお願い申し上げます。
Offline
そんな事はあり得ませんね。EDITデータの中に、改行等のコントロールコードが混じっていませんか。
Offline
Shin 様
改行等は入っていませんでした。
関連レコードへ移動の結果オプション「関連レコードのみを表示」のチェックを外し忘れていました。
しかし、結果は下記のようになりました。
結果
M1 Text
なにぬねの
?
?
はひふへほ
?
また、最初に示したデータでは何も動かないのは同じ状況でした。
お忙しいところ、申し訳ございません。
どうぞ、よろしくお願い申し上げます。
Offline
下記にアップしました。
https://www.dropbox.com/s/64qqt54wygfxk … 3.zip?dl=0
M1.fp7 EDIT.fp7 は「あいうえお」などのデータです。
M1_br.fp7 EDIT_br.fp7 は最初に示したデータです。
どうぞ、よろしくお願い申し上げます。
Offline
> M1 と EDIT にいわゆる×リレーションを張り、
が出来ていません。
Offline
Shin 様
お手数をおかけし申し訳ございませんでした。
> M1 と EDIT にいわゆる×リレーションを張り、
「×」を見落としておりました。
正しく動くようになりました。
いつも、ありがとうございます。
Offline
ちょっと考え方を変えたファイルへ変更しています。この方が実用的だと思います。
Offline
Shin 様
ありがとうございます。
dropbox へのリンクが見当たらないようです。
よろしくお願い申し上げます。
Offline
Offline
Shin 様
EDIT-有効 に「有効」を自動入力
M1-有効(グローバル格納)に「=」でリレーション
ということだと思うのですが、同じ設定をしてみたところスクリプトが機能しなくなりました。
EDIT-有効 のレイアウトに □に× のチェックボックス?の表示が出ていないことに関係あるのかと思いますが、理由がわかりません。
また、この方法の利点(実用的)はどういったポイントなのかご教示いただければ幸いです。
どうぞ、よろしくお願い申し上げます。
Offline
M1側にも値を設定していますか。
有効、のチェックが入っている所だけ、変換条件として生きる事になります。サンプルの中で、チェックを付け外ししてみられるとよくわかると思いますが。
その時点で、EDITテーブルのレコードを書き換える事無く、追加を行い、除外条件を外しておくだけで、置換設定が変化する、という意味です。
Offline
Shin 様
>> M1側にも値を設定していますか。
M1側の データの格納 グローバル格納 にチェックをする以外に何か値を設定するのでしょうか。
https://www.dropbox.com/s/jaz29hjtoj0at … 3.zip?dl=0
Offline
有効、という値を設定しないと、リレーションが動きません。
Offline
Shin 様
正しく動くようになりました。
レイアウトでこのような機能を追加できるのは便利ですね。
ファイルメーカーを使い込んでらっしゃるようで尊敬します。
ありがとうございました。
Offline
フィールド内を改行コードを付与してList表示させていますが、改行のみの空白行のみを削除するにはどうしたらよろしいのでしょうか?
FM Pro15、Windows 10 環境です。
Pages: 1
[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 597.82 KiB (Peak: 614.73 KiB) ]