我輩はブロガーではない。ネタもまだない

SASとかDelphiあたりの人様の役に立たないネタを提供します

xptビューワ

前回の更新から随分空いてしまいました。

ちょっと本業仕事が忙しかったのと、ネタになるもの「xptファイルのビューワ」を作っていたのです。


以前にも書きましたが、xptファイルの仕様は公開されていますので、これに基づいて解析すればSASがなくてもxptファイルを閲覧できるようにできるはずです。が問題が2つ。

1.文字コードの問題
sdtmで使用するxptは基本英語でした。
だからasciコードだけを解析すればよかったんですが、いざ検証を始めてみると、日本語環境のSASが扱う文字コード
Shift-JIS(sjis)、unicodeサポート環境のSASでは、utf-8です。

sjisでは、「あいうえお」「山川谷」「ABC」等の2バイト文字と呼ばれる、2つのバイト文字列の組み合わせで構成された文字を処理する必要があります。
utf-8では、これが3バイト(一部2, 4バイト)になってしまいます。
そのため、asciコード前提で作成した最初のプログラムでは、文字化けしてしまっていました。

いままで、漠然と
・旧Shift-JISでは、半角文字=1バイト、全角文字=2バイト
UNICODEでは、半角文字=1バイト、全角文字=3バイト
理解していた覚えていたのですが、UNICODEにおいては、先頭のバイトコードによって、
2バイト文字、3バイト文字、4バイト文字が用意されているようです。きちんと調べてようやく少し理解できた気がします。


さらに、unicodeではCで始まれば3バイト文字なのですが、数値変数においては、12を16進数のCで表します。
その結果、S-JISの2バイト文字、utf-8の2-4バイト文字、数値変数か文字変数か、等を調べながら文字列変換するという非常に面倒な作業が発生しました。


2.フォーマットの問題
さらに、保存されたデータは生データですので、フォーマットがかかっていません。
属性情報にフォーマットがありますが、いちいち分岐処理をこちらでやってあげないとできません。
(ところで、ユーザフォーマットはどうしましょうかね…)


もう少しで(最低限のフォーマットだけ処理できるようにして)、公開できるレベルになると思います。

(ほぼできたところで調べたら2014年にXPTビューワがMS Storeで公開されていました…。こちらは差別化のためにMacでも動作させる予定です)