みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
filemaker12での二次元配列の作成方法を教えて下さい。
やりたいことは、患者IDと検査結果10個を入れる配列を作成したいです。
以下スクリプトです。
エラー処理[オン]
変数を設定[$コース; 値:検査結果検索::コース]
#
# 患者一覧から該当レコードの患者IDを取得
#
レイアウト切り替え[「患者一覧」(患者基本情報)]
全レコードを表示
検索モードに切り替え[]
フィールド設定[患者基本情報::コース; "==" & $コース]
検索実行[]
レコードのソート[記憶する]
変数を設定[$cnt; 値:0]
変数を設定[$cnt; 値:Get(対象レコード数)]
レコード/検索条件/ページ移動[最初の]
変数を設定[$i; 値:-1]
変数を設定[$j; 値:0]
LOOP
変数を設定[$i; 値:$i+1]
Exit Loop If[$i > $cnt]
変数を設定[$$患者ID[$i][0]; 値:患者基本情報::患者ID] #ここがわかりません
LOOP
変数を設定[$j; 値:$j+1]
Exit Loop If[$j > 10]
変数を設定[$$患者ID[$i][$j]; 値:""] #ここがわかりません
End Loop
レコード/検索条件/ページへ移動[次の]
End Loop
どなたか教えて下さい。
よろしくお願いいたします。
Offline
残念ながらFileMakerの変数は、一般的な言語のそれとまったく異なります。
多次元配列はできませんし、DictやMap様の任意のキーも扱えません。
ver.16であればJSON関連の関数である程度代用できますが、
ver.12となると、AdvacedならDictを扱えるカスタム関数が役立つかも知れません。
Proしかないのであれば、素直に一次元配列2つ以上の組み合わせと考えた方が早いです。
Offline
バーチャルリストと絡めて表示させるしょうから、繰り返しの計算フィールド2個で代用するのが無難でしょう。
無理矢理1フィールドで済ませる事もできますが、のちにわかりにくくなるでしょう。
Offline
> 二次元配列の作成方法を教えて下さい。
・FMに「配列」の概念はありません。
・尚更、二次元は全くありません。
・類似するものに「繰り返し」はあります。
・しかし、一次元だけで二次元繰り返しはありません。
以上を前提に、
疑似的な二次元配列変数の実装方法を考えると、
・$$変数[j][k]は誤文法なので、$$変数[jk]で偽装する。
※ $$変数[2][4] → $$変数[24]
・変数の空枠取りはできません。何らかの値代入が必須です。
※ $$変数="" は$$変数の設定削解除を意味します。
これらを考慮したうえで、変数[1~j]x[1~k]計jxk個の変数を
式で設定する作例です。
式はWのループ式で、一次ループを5回、二次ループを5回とした例示です。
Let([
$j=0;
$fnc=
"Case($j=5; $dmy;
Let([
$j=$j+1;
$k=0;
$dmy=Evaluate($sub)
]; Evaluate($fnc))
)";
$sub=
"Case($k=5; $dmy;
Let([
$k=$k+1;
$$var[$j&$k]=$j &\"-\"& $k
]; Evaluate($sub))
)"
];
Evaluate($fnc)
)
検証は、$$var[25] 式で "2-5" が返れば成功です。
Offline
99✖️99の配列のようなものが欲しければ、単にグローバル変数などに$$para[9999] という風に記述させるようにすればいいだけかもしれませんよ。
それに対する配列計算が必要でしたら、それはライブラリーを作るといいでしょうね。
Offline
みなさんありがとうございます。
患者IDごとに検査結果10個をいれる二次元配列が必要ですので、
二次元配列にかわるもので代用できるのですね。
また、バーチャルリストを使用しても可能とのことですが、バーチャルリストの使用方法がわかりません。
ネットにはExecuteSQLの結果をバーチャルリストとして利用する方法などが載っていますが、テーブルにあるデータをどのように利用するのかがわかりません。
教えてください。
よろしくお願いいたします。
Offline
単純な方法としては、IDと結果を改行で区切ったリストを作り、グローバル変数かグローバルフィールドに保存(これそのものがバーチャルリスト)、表示するには、繰り返しフィールドに展開したり、別個のフィールドへ収納したり、上手に作ると、項目感をタブに変更して、タブストップを使ったテキストフィールドに表示するだけでもいいでしょう。
Offline
結局何が遣りたいのか見えて来ません。
>#6 患者IDごとに検査結果10個をいれる二次元配列が必要ですので、
これに二次元配列なんで全く必要ありません。
FMに配列自体ありませんしその代替え措置も含め…。
単純に、
検査患者レコードに繰り返し[10]フィールドを作り、
これにその関連検査結果をLookup()するだけのことでは。
Last edited by Hiro (2017-12-15 17:43:22)
Offline
2次元配列もどきを、テキスト上のタブを使って表現したサンプルです。他に別テーブルで一覧するスクリプトなど色々入っています。
https://www.dropbox.com/s/5wvyat8766kja … 7.zip?dl=0
Offline
みなさんご意見ありがとうございます。
Offline
Pages: 1
[ Generated in 0.006 seconds, 8 queries executed - Memory usage: 528.48 KiB (Peak: 549.38 KiB) ]