2016年2月21日日曜日

SAS Log Utility 1.8.1.1, ログファイルのエンコーディングを判定

Vectorに新しいバージョンの公開を依頼しました。今回の修正内容は以下のとおりです。

  • 不具合の修正
  • SASログファイルのエンコーディングを自動判定
  • SJIS, JIS, EUC, UTF8N, UTF8, UTF7など複数のエンコーディングに対応
  • Optionsのメニューの構成を変更
  • 日本語のマッチングパターン(keyword.ini)を訂正



ログファイルのエンコーディング判定は、ココの情報が役立ちました。これが無ければ、短時間で実装できなかったです。

ListViewのソートは、DEBUGのシンボルを定義したときと、外したときで動作が異なっていました。原因分からず。機能的には、だいぶ落ち着いてきたと思います。そろそろメジャーバージョンを上げて、処理構造の無駄を取り除きたいです。

2016年2月17日水曜日

EncodeDetect.pas

開発のメモです。
ログファイルのエンコーディング判定の関数、下にネタがあります。

EncodeDetect : EncodeDetectリファレンス

http://www.watercolor-city.net/ct_delphi/delphi_tiburon/doc_thirdparty/tp_ed_ref.htm

これを使ってコードを判定、TEncodeingを生成した後します。
StringListからEncodingを指定して、読み取ると正しく読み取れました。
試しにElapsed Timeの表示に組み込んだらあっさりと動きました。

2016年2月15日月曜日

ZIP圧縮のファイルを書く

投稿を修正して再度掲載します。

HULFT転送されてきたテキストファイルを読み込んでデータセット化するときに、元のファイルは残しておきたいことがあります。そのときに、圧縮して保存しとくと容量削減できて良いです。下のサンプルは、お馴染みCLASSのデータを使ったものです。名前と年齢をZIPファイルに出力し、後半のDATAステップでZIPファイルから読み取っています。


23   filename foo ZIP 'C:\temp\testzip.zip';
24
25   /* write to zip file */
26   data _null_;
27       file foo(class);
28       set sashelp.class;
29       put name age;
30   run;
 
NOTE: ファイルライブラリFOO :
      Directory=C:\temp\testzip.zip
 
NOTE: 出力ファイルFOO(class) :
      Filename=C:\temp\testzip.zip,
      Member Name=class
 
NOTE: 19レコードをファイルライブラリFOOに書き込みました。
      最小レコード長は9です。
      最大レコード長は15です。
NOTE: 19レコードを出力ファイルFOO(class)に書き込みました。
      最小レコード長は9です。
      最大レコード長は15です。
NOTE: データセットSASHELP.CLASSから19オブザベーションを読み込みました。
NOTE: DATAステートメント処理(合計処理時間):
      処理時間           0.01 秒
      CPU時間            0.01 秒
 
 
31
32   /* read from zip file */
33   data work.class;
34       infile foo(class);
35       input name $ age;
36   run;
 
NOTE: 入力ファイルライブラリFOO:
      Directory=C:\temp\testzip.zip
 
NOTE: 入力ファイルFOO(class) :
      Filename=C:\temp\testzip.zip,
      Member Name=class
 
NOTE: 19レコードを入力ファイルライブラリFOOから読み込みました。
      最小レコード長は9です。
      最大レコード長は15です。
NOTE: 19レコードを入力ファイルFOO(class)から読み込みました。
      最小レコード長は9です。
      最大レコード長は15です。
NOTE: データセットWORK.CLASSは19オブザベーション、2変数です。
NOTE: DATAステートメント処理(合計処理時間):
      処理時間           0.01 秒
      CPU時間            0.01 秒

便利!

UTF-8のログ

読み込めないSASログがあった。調べてみたらUTF-8だった。特に機能仕様には明記していなかったが、扱えるのはANSI, SJISのファイルです。

UTF-8はBOMあり、BOMなしで扱いが異なる。
別途サンプルのProjectを作って、検証から始める。

仕方ないので、メモ帳でSJISに変換してしのぎます。

実装の参考記事は こちら です。

2016年2月14日日曜日

SAS Log Utilityの概要

2009年に書いたツールの概要を加筆します。
SAS Log Utilityの概要について説明します。

概要
SAS Log Utilityは、SASプログラムが出力するログファイルを分析して、パフォーマンス診断や入出力の解析に役立つ情報を作成します。SAS Log Utilityを使うと以下のことができます。
  • SASプログラムの処理時間をDATAステップで集計して、ボトルネックとなっている処理を見つけることができます。
  • SASプログラムがどのようなデータを読み書きしているか、DATAステップ又はプロシージャ単位で捉えて、データの流れを理解することができます。
  • MPRINTのログを捉えて、マクロ単位の処理時間を集計します。
  • 複数のSASプログラムがどのようなデータを読み書きし、プログラム間でのデータの連携を可視化します。
機能
  • SASログからDATAステップ/プロシージャ単位の処理時間を抽出
  • SASログから処理時間を抽出し、データセット単位で処理に要した時間を集計
  • SASログからDATAステップ/プロシージャの入出力を抽出し、データの生成、読み取り、更新、削除の流れを表形式に出力
  • 設定ファイルの切り替えで、日本語と英語のSASログに対応
  • エラーにつながるNOTE:のメッセージをSASログから捕捉
  • INIファイルを追加、修正して日本語、英語以外のSASログを解析可能
  • SASログからMPRINTのログを抽出し、マクロ単位の処理時間を集計
  • SASログの分析結果をExcelに出力

SAS Log Utility 1.7.1.16, 不具合修正と設定ファイルの切り替え機能を追加

Vectorに新しいバージョンの公開を依頼しました。今回の修正内容は以下のとおりです。

  • 不具合の修正
  • 日本語と英語の設定ファイルを分けて、nlsのサブフォルダ下に移動
  • システムのデフォルトの言語から、設定ファイルを切り替えるように修正
  • Optionsのメニューの構成を変更

今回、日本語、英語の設定を分けたのが大きな変更点です。仕組みとしてはnlsフォルダの下に、ISO言語省略名のサブフォルダを定義して、INIファイルを作成すれば、他の言語も追加できます。が、まだ検証できていません。

修正した不具合は以下のものです。

  • FILENAMEを使わないで直接ファイルのパスを指定しているときに、入出力を捕捉できない
  • データセット名の変更が正しくCRUD表に反映されない
  • 英語のSASログで、データセットの書き込み(W)が正しく反映されない

他の言語の対応は、時間のあるときに試したいです。
開発で謎なのが、Patterns... のボタンにアイコンを表示していたのですが、いつのまにか表示されなくなりました。IDEの中だと、鉛筆のマークが出ているのですが、実行すると消えてしまいます。この検証はまた時間のあるときに行います。

2016年2月13日土曜日

Delphi 条件付コンパイルの設定

開発のメモです。
リリース、デバッグ版とは別にインターナルのバージョンを作りました。条件付コンパイルの設定が分からなかったので、設定画面を貼り付けておきます。Vectorに載せるリリース版から分岐して、仕事で使うためのバージョンを作成しました。


土曜日の作業で、英語版の設定ファイルが8割がたできました。
明日、まとめてVectorに新しいバージョンを載せたいです。



2016年2月9日火曜日

NLS下のフォルダを探して、メニューを設定する(2)

開発のメモです。
設定ボタンの配置を換えました。
設定ボタンに16x16のアイコンを設定しました。
ISO言語省略名の選択は、ラジオボタンのタイプに変更しました。
潜在的なバグを見つけ出すパターンの設定は、Potential Problemのタブの下に移動しました。
言語の設定を切り替えるたびに、設定ファイルを読み直すように実装しました。





今日は、有給休暇でした。
銀行の手続きで3時間も掛かりました。

2016年2月7日日曜日

NLS下のフォルダを探して、メニューを設定する

開発のメモ。SASに倣って、NLSのフォルダ下にある言語のサブフォルダを見て、設定を切り替えられるように作成中です。



2016年2月6日土曜日

転職に弾みをつけたできごと、疲労臭

2014年12月の臭い
数年前から妻に「仕事を変えて」と言われていました。転職の理由は色々で、ひとつには絞れないけど、記憶に残ることがありました。人間、えらく疲れると通常とは異なる臭いを発するらしい。それが疲労臭という。2014年12月はそんな臭いを撒き散らしていたらしい。

症状
酷く足が臭く、脹脛が硬くなった。この臭いが強烈で、履いていた靴がやたらと臭くなった。メレルのごつい靴を履いていたが、臭いが取れずに「靴選科」で4500円のクリーニングに出した記憶があります。

その頃は仕事の追い込みで、客先にカジュアルウェアで土日、昼夜関係なく仕事をしていました。2日連続で徹夜したとき、靴を脱いで、靴下で歩き回ると嫌な臭いがカーペットに残りました。他の人がファブリーズで、私が歩いたところを消臭して回ったぐらいです。

疲労臭
あとから知ったのですが、これは疲労臭という症状でした。腎臓、肝臓の機能が低下して、アンモニア臭を発するという状況とぴたりと一致します。このころ、リフレクソロジーに行ったときも、ふくらはぎが異様にかたいとしてきされていました。身体が悲鳴を上げていたのは自覚していましたが、この仕事の切れ目までと無理を続けていました。

なんだか臭う…それはお疲れのサイン「疲労臭」かも?

妻の指摘は正しかったわけで、鼻を膨らませて「だからいったでしょ」とドヤ顔決めてます。あれを突き抜けると、過労死が待っていたのかもと思うと少し寒くなります。身体がダウンする手前まで頑張った。故に清々として、次の職場を探すことができたと思うのは不健康でしょうか。

2016年2月1日月曜日

SAS Log Utility, 多言語対応の仕組みを考える

多言語対応で必要なものは何?

設定ファイルは、ISO言語省略名ごとに保持できるようにしたい。

どこに、設定ファイルを保持するか?
!SASROOT\nls\ja の形に倣って設定ファイルを配置するか?
それとも、設定ファイルの後ろにISO言語省略名を付与するのか?

LOCALEの取得は、Windows.GetLocaleInfoでできる。

言語の切り替えは、メニューから行う。
切り替えはツールの再起動なしで、反映できるようにしたい。

言語を切り替えて、ダイアログの表示を切り替えられるか?
reinit.ReinitializeFormsは使えるのか?
reinit.LoadNewResourceModuleは使えるのか?

他に使い出のあるものは何?

マイグレーション案件、面倒なことが色々ある。
何か効率化できるネタはないか。
VAの構成って面倒、設定だけではなくエビデンスの取得もできる何かが欲しい。

移行で毎回手を焼くのが、過去データの移送と変換です。
量が多いので、並列化したり、夜間に差分検出して移送する、中断、再開の制御を入れています。

他には?
BI Serverの構成が面倒です。
SMCの管理は苦手なのです、私はね。