RunRevのテキスト

 RunRev ではちょっと変わったテキストの扱いをします。他のドキュメントとかぶりますが、ここで改めて説明しておきます。

 テキストファイルとは

 Windows や DOS などを使っていると、ファイルには「テキストファイル」と「バイナリファイル」の2種類があるように錯覚してしまうことがあります。そもそもテキストファイルとは何でありましょう。

 例えばクラリスワークスで作ったデータは、クラリスワークスだけが理解出来るような形式でデータをファイルに保存します。ワードも、エクセルも、みんな自分の都合だけを考えてファイルを作ります。その中で、「テキストファイル」と呼ばれるものは、ASCII やら JIS やらで規定された、一定の規則で作られたデータだけを収めたファイルです。多くのアプリケーションはこのテキスト形式をサポートしており、他のアプリケーションの作ったテキストデータを読み書きすることが出来ます。

 そういう意味では JPEG や MP3 と何ら変わりません。ファイル形式がオープンになっており、複数のアプリケーションで読み書きできるデータファイルであるというだけです。ただ、特にコンソール(文字を打ち込んで結果を文字で見る)タイプの OS(代表的なのは DOS )では、コンソールに表示できるテキストデータを特別扱いしてきた経緯があります。つまりテキストファイルなら特別なアプリケーションなしで画面表示出来たわけです。コンソールに表示出来ない、もしくは表示しても意味の無いものはバイナリファイルと呼び、なんだか得体の知れない特別のもののように扱われていました。本来バイナリファイルもテキストファイルも基本的に違いはありません。

 テキストファイルは Windows では拡張子 .TXT を付け、マックではファイルタイプを TEXT にして、「このデータはテキストとして扱って『も』いいよ、他の独自データは入ってないよ」ってことを示しているだけです。バイナリファイルをテキストファイルのように扱うわけには行きませんが、テキストファイルをバイナリファイルとして扱っても何ら不都合はありません。

 RunRev はテキストファイルをどう扱うのか

 ただし、RunRev の場合はもう少し複雑です。まず、マックと Windows と UNIX では改行コードが異なります。 ASCII の記号なども一部違っているようです。複数のプラットフォームで使われることを想定したスタックでは、テキストファイルを読んだ時(或いは書き込む時)に、今使っている OS に合わせて改行コードなどを全て変換してやる必要があります。普通に考えたら面倒ですよね。そこで RunRev は考えました。「どうせなら自動でやって差し上げよう」と。

 RunRev でテキストファイルを読むと、そのファイルの改行コードがどうなっていても、現在使っている OS に合わせて自動的に(もしくは強制的に)改行コードなどを変換します。書き込む時も、元データがどうだろうと、現在使っている OS に合わせた変換を行ってから書き込みます。これが RunRev の「テキストモード」の意味です。

 オプション無しの open文、あるいは for TEXT オプションを付けた open文、もしくは url-"file:" を使った時、RunRev はデータをテキストと見なして強制変換します。テキスト以外のデータをテキストモードで扱うと、データ中の 13(CR) や 10(LF) などが書き換えられてデータが壊れる可能性があります。またテキストデータは終端記号としてゼロを書き込むことが多いので、テキストモードでバイナリを扱うと、データ中にゼロが現れた時点で読み書きを終わらせてしまうかも知れません。

 バイナリモードとは

 open文に for binary を付けるか、url-"binfile:" を使った場合はバイナリモードになり、データには一切手を加えられることはありません。データの中身がテキストなのかそれ以外なのかは問題ではありません。要するに RunRev の強制変換が行われるのがテキストモードであり、データをそのまま扱うのがバイナリモードだと言うことです。

 Unicode や RTF ファイルの中身はテキストですが、これは「テキストファイル」ではありません。これらのファイルをテキストモードで扱うと予想外の変換がかかり、データが壊れる可能性があります。だからUnicode や RTF は、読む時も、書き込む時も、「バイナリモード」を使わなければなりません。意外にひっかかり易いところです。

 RunRev の自動変換

 他でも書きましたが、RunRev の自動変換はテキストファイルの読み書き時だけに留まりません。マックで作ったスタックを Windows で開いた時、或いは Windows で作ったスタックをマックで開いた時、「スタック内の全てのテキスト」が現在の OS に合わせて変換されます。(だから大量のテキストを持ったスタックを別の OS で開こうとすると、時間がかかったりします)

 ここで変換対象になるテキストは、フィールドのテキストや、ボタン内のメニュー文字列など各種プロパティ(スクリプトも含む!) です。唯一強制変換がかからないのはカスタムプロパティだけです。ここにはバイナリデータを入れる可能性があるため、変換リストから外されたのでしょう。

 RunRev の自動変換は基本的に ASCII 文字列のことしか考えていません。 S-JIS や Unicode や RTF は純然たる ASCII から外れていますから、勝手に自動変換をかけられてはデータが壊れる可能性があります。昔の RunRev では日本語文字列を入れたスタックを別の OS で開くと文字化けしていました。

 ただ 2.1.2 以降は日本語文字列を入れたフィールドが化けなくなりました。日本語を入れたフィールドの文字列を取り出すと先頭に0が書き込まれており(内部表現は恐らく Unicode )、これで自動変換を回避するシクミのようです。少し安心して文字列を扱えるようになりましたね。



2006.03.06
UDI

inserted by FC2 system