みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
Shin様、Hiro様、ご返答ありがとうございます。
・ロップボックスからのダウンロードは御指示頂いた通りで出来ました。→フィールドの中身はロックがかかって見れませんでした。
・//はコメントアウト記号で、>#2オリジナル式の不用箇所、行全体削除でOKです。→理解できたと思います。
・項目数に一応制限の無い、1パスのシンプルな式→Value系の新機能が僕のバージョンでは使えないので、お小遣い貯めて新バージョン出たら購入し、その際に使ってみます。
よって、目的は旧バージョンの為、達せられずですが、FMpro advanced14を使っている為と考え、最新であれば解決するものと考えます。よって解決としますね。
Shin様、Hiro様、ご回答ありがとうございます。
とても昔の数学で習ったかも?な言葉が当方の理解に時間がかかりそうです。
以前にHiro様に教えて頂いた式の理解も及ばない状態での今回の事態に苦慮してまして・・
丸ごとコピーして使ってみようと思っています。
ドロップボックスはメンバー登録が必要?プレビューが出来ないみたいです。
Hiro様の記述式をコピーしたいのですが、
・線の引いてある所は要らない→//は不要ですか?必要ですか?行全体削除でOK?
・ドロップボックスに登録すればダウンロードできますか?
以上、お答えいただけると助かります。
Shin様 早速のご返答ありがとうございます。
言葉足らずで申し訳ありませんが、求めたい最大公約数の値が2つではなく、3個以上ある場合(今回は15個)はどうしたら良いでしょうか?
何に用いるかというと共有持ち分の表示に使いたいのです。
宜しくお願いします。
分数の計算をしたいのですが、分母の最大公約数を求めるにはどうしたら良いでしょうか?
Hiro様
返信が遅れ申し訳ありませんでした。
自分なりに試してみて確かに教えて頂いた方法で上手くできました。
ありがとうございました。
環境
FileMaker Pro 14
Windows10の64bit
・テキストタイプのフィールドA:リスト形式のデータ
・テキストタイプのフィールドB:計算結果を保存
・フィールドAのリストから計算結果をフィールドBに保存したい。
動作の希望
・開始行から終了行までを指定し抜き出したい。
・フィールドA=未入力→フィールドB=空欄。
・フィールドAが1行であっても計算したい。
・開始行未指定→フィールドAの1行目から計算。
・終了行未指定→フィールドAの最終行までを反映。
・開始行数>フィールドAの行数→フィールドB=空欄。
・終了行数>フィールドAの行数→フィールドB=開始行数からフィールドAの最終行までを反映。
という動作を希望しています。
カスタム関数とスクリプトの両方の方法と計算できる行数が知りたいです。
お手数ですがよろしくお願いします。
Hiroさん、とても丁寧に書いて頂きまして、お手間おかけして申し訳ありません。
お答えをヒントに、理解できるよう頑張ってみます。
・質問1に至る考え方が間違っていたので、Hiroさんのご回答に至れるように学習やり直してみます。
※試してみる時間を沢山下さい。すぐには理解できないので・・・
なお、ファイルメーカーのヘルプの関数リファレンスは、今回の関数については全て読んではみました・・・
蛇足です。)Hiroさんのカラフルな記述はとても読みやすいと思いました。
質問する側として、読みやすくする努力はしたいですが、まず、質問内容の事で手一杯です。ご容赦下さい。
ご返答頂いた時間からして、お手間とお時間をかけて頂き、申し訳なく思います。
今は、頭も回らなくなってきたので、ひとまず寝てから、いろいろ試してみようと思います。
Hiroさんから御提示いただきました簡便法につき、理解に至らない点があります。
※Hiroさんと同じに作ると、もちろん、ちゃんと動きます。
※理解する上で、わからなくなったので質問です。
→お手隙の時に、ご回答等、お付き合い頂けますとありがたいです。
○新規作成する事で再現と検証してみて、試してみました。
質問1、Get ( 計算式繰り返し位置番号 )の使い所や説明として、事例の多いホームページがあれば誰か教えて頂きたいです。
質問2、フィールド「リスト配列」[タイプ:計算式(繰り返し200)]の考え方が分かりません。
○フィールド「リスト配列」
【オプション設定】
[式]
Trim(
GetValue(リスト[1]; Get(計算式繰り返し位置番号))
)
→リスト[1]の[1]は繰り返しフィールドの繰り返し内容の取得と考えて実験してみました。
[実験1]Trim( GetValue( GetRepetition ( リスト ; 1 ) ; Get ( 計算式繰り返し位置番号 ) ) )に置換えてみた。
結果→置換えても同じになった。
→では、リストは繰り返しフィールドではないけど、リストフィールドだからかと考え、試してみました。
[実験2]Trim( GetValue( GetValue( リスト ; 1 ) ; Get ( 計算式繰り返し位置番号 ) ) )に置換えられる?
結果→1行目にリストの1行目が表示され、2行目以下は空白。
[実験3]Trim( GetValue( リスト ; Get ( 計算式繰り返し位置番号 ) ) )の場合はどうか?
結果→1行目にリストの1行目が表示され、2行目以下は空白。
→結果から、Get ( 計算式繰り返し位置番号 )が関係している!と思うのですが、ググってもピンとくる説明が見つかりません。
↓
よって、Get ( 計算式繰り返し位置番号 )の使い所や説明として、事例の多いホームページがあれば誰か教えて頂きたいです。
今、ここで詰まってしまいました。
試してみて、自己連結リレーションにしたら、
・from マスタ 等が表示されるようになった。
・レイアウトで、繰り返しフィールドは「繰り返し数を表示」で表示する行数を指定することを理解した。
・何故かわからないが、フィールド名「値一覧リスト」と値一覧名「値一覧リスト」が同じじゃないと、フィールド「値一覧リスト」が空白になる。
のに、何となく気づきました。上記の質問が未解決ですが、
質問3、フィールド「値一覧リスト」の考え方が分かりません。
○フィールド「値一覧リスト」
【オプション設定】
[式]
ValueListItems( Get ( ファイル名 ) ; "値一覧リスト" ) & Left( リスト ; 0 )
試してみた↓
・ Get ( ファイル名 )で直接テーブル名を指定した場合→ダメ・・・なぜ?
・ "値一覧リスト"を値一覧名を変えてみた→ダメ・・・値一覧の値をターゲットにしている!かな?
よって、
ValueListItems( ファイル名 ; 値一覧名 ) のFMの説明の<値一覧> にあるすべての値を改行で区切って返します。がわからなくなりました。
ファイル名で指定した中の、値一覧名にある値を返すのでは?→値一覧名がフィールド名と違っていても返すのでは?→フィールド名と値一覧名が一致する必要があるのか?
となりまして、どなたか考え方を教えて下されば助かります。
※結果としてなるんや!ではなく、できれば論理的にお願いする次第です。
質問4、【索引オプション】の「計算結果を保存せず必要時に再計算するにする」にする意味で重要なことはありますか?
[実験3]非保存フィールドを「必要時索引を設定」にしてみたが、結果は同じだった。
質問5、& Left( Aリスト ; 0 )の意味は?
Hiroさん、ご回答ありがとうございます。
ループ式を一度マスターすれば、用途は無限です。
とのお言葉、モチベーションが上がります。
しっかり理解しようと思います。
まずは、簡便法のところを理解しよう(7月中)と思います。
次に、ループ式について理解しよう(8月~9月位はかかるかな)と思います。
ループ式についての作例2つを比較しながら考えられそうなので助かります。
UniqueValues関数はUnicodeを利用して完全一致を実現し、重複を除けるようですね。
GetValue関数の逆の作用をする関数もあれば対称的で良いのにと思いました。
逆GetValue関数 ( 値一覧 ; 文字列 ) = "値番号¶値番号¶値番号・・・・"
<値一覧>
あ
あい
あ
あぃ
<文字列>
あ
逆GetValue関数 ( 値一覧 ; あ ) = "1¶3"
詳しくないのですが、Winをお使いなら
万一、プリンタドライバー等の不具合なら解決に時間を要すかものなので・・・
お急ぎなら、
・PDFで出力してから、印刷してみる。
・Snipping ToolやPrintScreenで画像形式で保存し、画像を印刷する。
枚数多かったり、文字の大きさを揃えるのは、大変かと思いますが、急場をしのげるかもです。
Hiroさん、ご回答ありがとうございます。
気になって会社来てみて良かったです。
簡便法サンプルについては昨夜に、過去ログからダウンロードさせて頂きました。
内容についての理解は至らずなので、明日から調べたりしてみて、解らない所は質問してみます。
>ループ計算式による方法
については特徴が欲しい動作と結果に合致していて、うれしいです。
簡便法のサンプルから勉強して、ループ計算式の理解に至れればと思います。
いろいろ試してみるのに時間が必要です。
一旦、この質問に関しては解決とさせて頂き、解らない所は新しい質問をするようにします。
お答え頂けた皆様、ありがとうございました。
Shinさん、ご返答ありがとうございます。
FM16からサポートされた関数に同じものがあったのですね。
今回の私のクリアすべきテーマは「最大かつ最速処理の回帰式スクリプトを書くために、どの様に考え、記述したら良いか?」なので、
同様の機能の関数がサポートされた事でモチベーションが下がるようでしたら、別のカスタム関数に変更した方が良いでしょうか?
質問を書くのに2時間位かかったのですが、わかりにくい所はありますか?
次にチェックできるのは6/29(木)の夕方以降になりそうです。
【蛇足です】
FM Pro Advance 14 で、もっと勉強してからにするつもりでノーチェックでした。
個人で購入しなくちゃなので、薄い財布の為にチェックだけしかできないのがツライ・・・
個人的には下記の点が気になります。
・Filter関数・ValueFilter関数・PatternCount関数・Position関数も全角・半角・大文字・小文字の完全一致でない事。
→完全一致と部分一致の使い分けくらいの機能はあっても罪にはならないと思う。
・NumToJText関数が不便で、数値が1億以上だと累乗表記になったりで、Substituteで簡単に置換できない事。
→簡単に計算ができない。銀行や不動産や証券や保険業の額面が大きい所は扱いづらいのでは?と感じます。
ついでに、小数部分も日本語に変換したら良いのにね。
・GetValue関数は有るのに、値一覧から値番号を取得する関数が無い事。
・Int関数は有るのに小数部分のみを取り出す関数が無い事。
→単純に対称となる関数の無い事への疑問。
特に数値に関しては、そろそろ改善して欲しいと思っています。
改善したかとFM Pro Advance 14購入してがっかりだったので、改善されたら購入貯金始めます。
蛇足内容はFM16をチェックしたのちファイルメーカー社に要望として出してみます。
環境はWin10でFM Pro Advance 14 を使用しています。
リスト内の文字列を自動で整理する関数を作ってみましたが、
再帰式を理解できず、困ってます。
また、最も軽く動作してくれる関数とするのにどうしたらよいでしょうか?
最大かつ最速処理の為にEvaluate関数やQuote関数を用いた方が良い様ですが、
これも使い所がピンときません。
ファイルメーカーの方にマルチコアCPUのコア数が多い方が処理が速いと聞きましたが、
CPUを交換する前に、少しでも処理が速くなる式を書けるようになりたいです。
ご面倒でしょうが、よろしくご教授お願いいたします。
リスト内容を整理する際に
・空白は除く。
・完全一致の重複文字列は除く。
・各行の文字列の前後の空白は除く。
・計算式やスクリプトや他のカスタム関数でも使える。
上記の仕様にしています。
動作としては、
<対象リスト>
あ
あい
あ
あぃ
あかい
←ここは空白
あい
↓
<関数結果>
あ
あい
あぃ
あかい
となる関数です。
目的を達する為に2つカスタム関数を作っています。
○カスタム関数「@GVT」・・・リストから指定位置の文字列を取り出す。
〔関数の引数〕
リスト・・・対象リスト
位置・・・リストの行の位置、フィールドの値がテキストでも使える
※リストと位置の値が空白の際は空白を返す、位置がリスト内の行数を超す場合は空白を返す。GetValue関数で値番号が0の時に値一覧の1行目が返されてしまうと本にあったので回避したい。
〔動作として〕
上述の対象リストの5行目を返す場合は、@GVT ( 対象リスト ; "5行目" )として、結果は あかい となります。
Case ( IsEmpty ( リスト ) ; "" ; IsEmpty ( 位置 ) ; "" ;
Let ( [
位 = GetAsNumber ( RomanHankaku ( 位置 ) ) ; ←位置がテキストの際、テキスト内から数値にあたる部分を半角の数字として取得。
値 = GetValue ( リスト ; 位 ) ] ; ←GetValueで指定位置の文字列を取得する。
Case (
IsEmpty ( 位 ) ; "" ; ←位置がテキストではあるが数値ではない場合に空白を返す。
位 = 0 ; "" ; ←位置が0の場合に空白を返す。
位 ≠ Int ( 位 ) ; "" ; ←位置が小数の場合に空白を返す。
位 > ValueCount ( リスト ) ; "" ; ←位置が行数を超す場合は空白を返す。
IsEmpty ( 値 ) ; "" ; ←取得した文字列が単順に空白の場合は空白を返す。
Substitute ( Trim ( 値 ) ; ¶ ; "" ) ←取得した文字列の前後の空白を除く、また、除いた結果が空白の際は空白を返す。
) ) )
【この関数の問題点として】
多用した際に、軽く動いて欲しいのと、本には値一覧の数以上の値番号を与えると空白が返されます。とあったが、
参考にしている本に多数の間違いが有るので助長しており、最も軽く動作してくれるか不安です。
○カスタム関数「@List」・・・リスト内容を整理する関数
〔関数の引数〕
リスト・・・対象リスト
※@List ( 対象リスト )とすれば、<関数結果>が得られます。
Case (
IsEmpty ( リスト ) ; "" ;
Let ( [
対 = Trim ( リスト ) ; ←リストの前後の空白を削除。
置 = "ΘΘΘΘΘΘΘ" ; ←置き換えの際に変にならないよう記号にしてみました。
α001 = @GVT ( 対 ; 1 ) ;
α002 = List ( α001 ; Case ( IsEmpty ( FilterValues ( Substitute ( α001 ; @GVT ( 対 ; 2 ) ; 置 ) ; 置 ) ) ; @GVT ( 対 ; 2 ) ; "" ) ) ;
α003 = List ( α002 ; Case ( IsEmpty ( FilterValues ( Substitute ( α002 ; @GVT ( 対 ; 3 ) ; 置 ) ; 置 ) ) ; @GVT ( 対 ; 3 ) ; "" ) ) ;
α004 = List ( α003 ; Case ( IsEmpty ( FilterValues ( Substitute ( α003 ; @GVT ( 対 ; 4 ) ; 置 ) ; 置 ) ) ; @GVT ( 対 ; 4 ) ; "" ) ) ;
α005 = List ( α004 ; Case ( IsEmpty ( FilterValues ( Substitute ( α004 ; @GVT ( 対 ; 5 ) ; 置 ) ; 置 ) ) ; @GVT ( 対 ; 5 ) ; "" ) ) ;
α006 = List ( α005 ; Case ( IsEmpty ( FilterValues ( Substitute ( α005 ; @GVT ( 対 ; 6 ) ; 置 ) ; 置 ) ) ; @GVT ( 対 ; 6 ) ; "" ) ) ;
つづく
α200 = List ( α199 ; Case ( IsEmpty ( FilterValues ( Substitute ( α199 ; @GVT ( 対 ; 200 ) ; 置 ) ; 置 ) ) ; @GVT ( 対 ; 200 ) ; "" ) ) ;
E = α200 ] ;
E ) )
※α006 = List ( α005 ; Case ( IsEmpty ( FilterValues ( Substitute ( α005 ; @GVT ( 対 ; 6 ) ; 置 ) ; 置 ) ) ; @GVT ( 対 ; 6 ) ; "" ) )を例として説明すると
5行目までで整理したリストα005に6行目の文字列が存在しない場合は、α005のリストに6行目の文字列を加える。
FilterValuesを用いているのは、Substituteでα005のリストに6行目の文字列があった場合には記号に置換えてから、リストから記号を抽出する際に、完全一致の文字列として抽出するためです。
【この関数の問題点として】
実際に200行のリストで動作確認していないですが、字数制限の為、200行目までしか記述できない事です。
Hiroさんのアドバイスに従ってみます。
新しい質問として自分で作成したカスタム関数の中から、再帰式にしたいものを質問してみようと思います。
本については・・・何個も質問するのも失礼かと思いますので、とりあえず解決にします。
チポさん、Hiroさん、ご返答ありがとうございました。
Hiroさん、ご指摘ありがとうございます。
エクセルにテーブルをエクスポートした所、1行目(縦に1つ目)に各フィールドのフィールド名が出力され、
2行目以降は各レコードのフィールドの値が出力されているので、エクセルからインポートする際に、
1レコードにまとめられないものかと考えました。
インポートの際に、エクセルのセルの値をフィールド名にできそうだったので、もしかしたら1レコードに
まとめられるのではないかと考えました。
インポートについては現在は色々試してみています。
エクスポート出来る形式が他にもあるので、エクセル以外の方がやりたい事に合致する可能性が有るので、
エクスポートとインポートについて学んでみようかと思いました。
また、Loop的なスクリプト(回帰式スクリプト?)についても以前から理解しようとしており、
これらを学ぶのに良い書籍があれば教えて頂けると助かります。
なぜ書籍かというと忘れちゃった時に見直せ、ある程度は自分で勉強してから質問したいからです。
ということで、易しく詳しく書いてある本(日本語)で良い本を知りたいです。
ちなみに、ファイルメーカーの本は高いのが多いので数買えないです。
チポさん、返信ありがとうございます。
必要があります。
チポさん、ご指摘ありがとうございます。
>その先の目的が分かりませんが
カスタム関数でSubstitute関数を用いて文字列を変更するのに使いたいからです。
例えば片仮名半角とすると片仮名半角に置き換わる様にしたり、
他のテーブルで「数値」というのを作成しており、2,500万という文字列を弐阡伍佰萬や2,500萬に置き換えるとかに使います。
これは漢数字に変換する際に、旧字を扱う際に、桁を現す場合だけでも
百は、百・陌・佰の3パターンから選択、
千は、千・阡・仟の3パターンから選択、
万は、万・萬の2パターンから選択したりする必要が生じるからです。
別の使い方では、入力時の選択リストとしてのテキストに、カスタム関数にフィールドを登録しておき、
フィールド内容の変更に伴って、選択リストの項目も連動するようにするのに用います。
FM Pro Advance 14 を使用しております。
16が出ましたが、ずっとスクリプトが解らないので、ついていけません。
<欲しい書籍1>
回帰スクリプトっていうのが、難しいです。
以前に具体的なスクリプトを書いて頂いた事もあり、自分で試行錯誤してみましたが・・・
Loopや回帰処理について丁寧に易しく詳しく書いてある書籍をご紹介頂きたいです。
<欲しい書籍2>
端的に言うと・・・多レコードの内容を1つのレコードにまとめたい。
具体的には・・・あるテーブルのレコード内容をエクスポートして、インポートするときには
レコードの特定の値でフィールド名を作成して、フィールド内容をインポートする。
テーブル名「日本語 入力」
※項目名・平仮名全角小文字・平仮名全角大文字・片仮名半角小文字・片仮名半角大文字・片仮名全角小文字・片仮名全角大文字・項目計はフィールド名、「」内は内容で書式はテキストです。
レコード1・・・項目名「あ」、平仮名全角小文字「ぁ」、平仮名全角大文字「あ」、片仮名半角小文字「ァ」、片仮名半角大文字「ア」、片仮名全角小文字「ァ」、片仮名全角大文字「ア」、項目計「ぁあァアァア」。
レコード2・・・項目名「い」、平仮名全角小文字「ぃ」、平仮名全角大文字「い」、片仮名半角小文字「ィ」、片仮名半角大文字「イ」、片仮名全角小文字「ィ」、片仮名全角大文字「イ」、項目計「ぃいィイィイ」。
以下レコードは続く。
テーブル名「日本語 設定」(レコードはとりあえず1つ)
※フィールド名と「」内は内容で書式はテキストです。
項目あ「あ」
項目あ平全小「ぁ」
項目あ平全大「あ」
項目あ片半小「ァ」
項目あ片半大「ア」
項目あ片全小「ァ」
項目あ片全大「ア」
項目あ計「ぁあァアァア」
項目い「い」
項目い平全小「ぃ」
項目い平全大「い」
項目い片半小「ィ」
項目い片半大「イ」
項目い片全小「ィ」
項目い片全大「イ」
項目い計「ぃいィイィイ」
以下フィールドは続く。
という様なことを出来ればボタン1つ押すだけで出来ないものかと思います。
テーブル名「日本語 設定」以外にも多くのテーブルを作成していて、
そのたびにフィールド名を入力、変更、等が大変なうえ、
テキスト内容の置換にスクリプトを使用しておりますが引数の値を入力、変更、等が大変で・・・
何とかできないものかと苦しんでいます。
どうか解決できそうな知識を得れそうな書籍のご紹介をお願いします。
Pages: 1
[ Generated in 0.007 seconds, 8 queries executed - Memory usage: 686.03 KiB (Peak: 723.2 KiB) ]