データは外部ファイルに保存する
Ver7で作った帳簿のアプリがVer9でスタンドアロンにすると、SubStackが開けないという状態が起きました。
前ページの考察とは別の状態のようで、どうにもなりません。SubStackを開けるのはMove…のチェックを付けないときだけ。その状態では何も保存できません。
無理にVer9で作らなくても良かったのですが、64bitに対応するためにVer9でのスタンドアロン化が必要だったのです。そこで考えたのが、「データはすべて外部に保存する」でした。
実は元々ハイパーカードで作っていた頃はデータはテキストデータにして、外部に保存していました。これは、色々な人の作ったXCMD,XFCNといったルーチンが豊富にネット上にあって利用できたために可能だったのでした。
では、LiveCodeではどうでしょうか。Ver6まではそもそも日本語を扱うことも大変だったのですが、Ver7からはそれも随分楽になりました。けれどもLiveCodeの内部では、Unicodeで処理されているのは変わりません。JISコードの書類などは見事に文字化けしてしまいます。
下はプログラムの初めに初期設定を読み込むスクリプトです。
外部ファイルから読み込むわけですから、はじめにファイルの位置を確定します。
get the defaultFolder これでアプリの置かれているアドレスを得ます。そして、そのフォルダーの中のprefフォルダーの中にある、prefDataを読もうとしているわけですね。ここで、変数tUrlはファイルprefDataの絶対アドレスです。
最後にこれをエンコードして、フィールドに読み込みます。このときの構文がちょっとわかり難いですね。
Set the unicodetext of field ◯○ to uniEncode(ファイル,utf8)
フィールド◯○の中身をutf8でエンコードしたファイルにしなさい。
こういう使い方になるわけです。put でやろうとしても失敗します。
フィールドに入れなければならないので、私は適当な隠しフィールドを作って、そこに格納する手段を使っています。
反対にフィールドからファイルに書き込むときは、はじめにopen fileしておいてから、
という具合にします。ここでは、フィールドの中身をunicodeTextとして、変数に取り込み、それをutf8でデコードしたものを、ファイル(tFile)に書き込んでいるわけです。ここでtFile はファイルの絶対アドレスです。最後にファイルをクローズするのを忘れると、きちんと保存されませんから注意です。
この方法で、カンマ区切りや、tab区切りのデータを出し入れすることができます。エクセルや、データベースのデータを取り込んだり出力したりすことができるわけです。