みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
いつもお世話になっております。掲題の通り質問です。
## 困っていること
あるテーブルにある複数のレコードをテキストファイルに出力するにはどうすれば良いのでしょうか?
## 背景
あるテーブルに入っている複数のレコードをテキストファイルに出力する、というスクリプトを書いています。
(1レコード目をファイルの1行目に出力して改行、21レコード目をファイルの1行目に出力して改行......というような単純なファイル出力です。)
データファイルを作成するところやファイルの開け閉めに関しては「データファイルを作成」「データファイルを開く」スクリプトなどで実行できることを確認しています。ただ、肝心のデータ出力に関して、同系統の「データファイルに書き込む」スクリプトで上手くできず困っています。
「データファイルに書き込む」スクリプトを利用すると、対象テーブルの最初のレコードだけを書き込んでしまい、複数のレコードを書き込むということができません。
何かファイルを作成することってわりとニーズがあると思うのですが、みなさんどうやって複数レコードの出力をやっているのでしょうか?
## 環境
FileMaker 19
書き込み位置の指定は
https://help.claris.com/ja/pro-help/con … ition.html
にありますが
連続して書き込まずに毎回開いているんですかね?開いた直後はポインタが先頭だと思います。
1レコードずつ書かずに出力するテキストを変数などに作っておいて最後にデータファイルにしたら良いのでは?
Offline
.... 41レコード、21レコード、1レコード
というテキストを書き出すのでしょうかね。
レコード番号というフィールドを作って、シリアルで全置換して、さらに、Mod ( レコード番号 ; 20 ) という計算フィールドを作っておきます。計算フィールド = 1 で抽出して、レコード番号で降べきにソート、まとめてエクスポート、というベタな方法が簡単かもしれませんよ。
それか、Mozさんのように、
レコードへ移動[最初のレコード]
Loop
変数を設定 ( $txt ; Case ( Mod ( Get ( レコード番号 ) ; 20 ) = 1 ; List ( テキスト ; $txt ) ; $txt ) )
レコードへ移動[次の ; 最終になれば終了]
end Loop
みたいなloopでテキストを取り出して、最後に書き出し。
Offline
(1レコード目をファイルの1行目に出力して改行、21レコード目をファイルの1行目に出力して改行......というような単純なファイル出力です。)
なにが単純なのかわかりませんが、同じ1行目に出力したら1レコード目がなくなってしまうのは当然なので、実際は複数のファイルに書き出したい??
ファイルは1つで、わざわざ後から先頭に挿入したいということなんですかね??「データファイルを開く」には挿入モードというのは、ありませんね。一般的に言って、ファイルに挿入する場合は一旦全部読み込んでから全体を書き直すことになるでしょう。
1レコードの次が21になるのもよくわからないし...(単純というから、2レコード目と思ってた^^;コピペで間違えて21になっただけで、実は2行目なのかも)
GetNthRecordを使えば任意の行番号からデータを取り出せますが...
まあ何をやりたいにしても、解決方法としては、全部変数に生成してから1回書き込む、というのがベストなのは間違いないと思いますが。
すみません!タイポです。惑わせました、すみません。
誤り:(1レコード目をファイルの1行目に出力して改行、21レコード目をファイルの1行目に出力して改行......というような単純なファイル出力です。)
正:(1レコード目をファイルの1行目に出力して改行、2レコード目をファイルの2行目に出力して改行......というような単純なファイル出力です。)
1レコードの次が21になるのもよくわからないし...(単純というから、2レコード目と思ってた^^;コピペで間違えて21になっただけで、実は2行目なのかも)
おっしゃる通りです!
.... 41レコード、21レコード、1レコード
というテキストを書き出すのでしょうかね。
レコード番号というフィールドを作って、シリアルで全置換して、さらに、Mod ( レコード番号 ; 20 ) という計算フィールドを作っておきます。計算フィールド = 1 で抽出して、レコード番号で降べきにソート、まとめてエクスポート、というベタな方法が簡単かもしれませんよ。
想像させてしまってすみません!
1レコードずつ書かずに出力するテキストを変数などに作っておいて最後にデータファイルにしたら良いのでは?
なるほどでした! 確かに一旦変数に入れてあげればいいですね。
みなさんどうもありがとうございます。
というかお騒がせしました。。
うまくいきそうで、よかったです。
思い出しましたが、テキストが長大になる場合は、「変数を設定」よりも「計算結果を挿入」のターゲットに変数を使う方が早い、というのを英語コミュニティで見ました。
「計算結果を挿入」は「フィールドに関連するスクリプトステップ」の中にありますが、実体と分類が合わなくなってしまいましたね...
しかし、そこまで「単純」なら、「レコードのエクスポート」でもできるのかも?
文字コードの指定とか、特殊な区切り文字とかが必要でなければ、計算フィールド1個(汎用的には、計算式を入れるグローバルフィールドと、それをEvaluate()する計算フィールドの2個)用意すれば、任意のデータの改行区切りのテキストは簡単です。
[ Generated in 0.008 seconds, 13 queries executed - Memory usage: 522.42 KiB (Peak: 527.33 KiB) ]