みなさん、こんにちは。
お正月は、楽しく過ごせましたでしょうか。皆さまにとって、良い年でありますように。体を大切に、元気で新しい年を過ごされますように。そして、今年もよろしくお願いします。
さて、今回も、出力結果を「美しくする」ことを追求します。
fl
マクロでいろいろなファイルの最終オープン日を表示してみると、ファイル名の長さによって日付の表示位置が変わることに気が付きます。
ファイルの直後に日付を印字しているので当然なのですが、並べて見ていると、表示がずれているように見えて美しくありません。さっそく整形させましょう。ソースを修正します。
修正が終わったら load
して実行してみましょう。どのファイルを指定しても、日付は同じ桁に表示されるようになりました。変更した箇所は、
#output [fn2] [yyyy]/[mm]/[dd] [hh]:[mmm]:[ss].[ms][us]
の1行を
#output /width 18,hold/ [fn2]
#output [yyyy]/[mm]/[dd] [hh]:[mmm]:[ss].[ms][us]
の2行に分割した点です。width 18
オプションは、[fn2]
を 18 桁長で表示せよ、という指示です。(“18
” 桁にした意味は特にありません。)これにより、続く最終オープン日時が 19 桁目から固定で印字されるようになります。hold
オプションは、改行を抑止して次の #output
と同じ行に印字せよ、という指示です。これがないと改行されて最終オープン日時が次の行に印字されてしまい、width
オプションの意味がなくなってしまいます。
つぎに、fl $data01.hp.xx
の結果をよく見てみましょう。秒未満の部分が何か変ですね。そう、桁数が足りていません。秒未満の部分は6桁で表示されるはずですが、5桁しかありません。なぜこうなるのでしょうか。よくよく調べてみると次のようなことが分かります。
ミリ秒の部分が 70
です。これにマイクロ秒の 944
が連結されて 70944
となり桁数が不足していたのでした。ここは当然 070944
と表示されなくてはいけません。さらによく考えてみると、この日時は次のように表示してほしいところです。
2016/09/03 17:11:02.070944
そこでソースを修正します。説明の都合で時刻の部分は一旦削除して、まず日付だけ表示します。
実行してみると、
となって想定通りです。fill zero
オプションは、width
で指定した桁数に余白が生じた場合にゼロで埋めろという指定です。justify right
オプションは文字列の右詰を指示します。この場合余白は左に出ますので、この2つを組み合わせて preceding zero
を実現します。trailing zero
にしたい場合は justify left
とします。
さて、さらに時刻も印字してみましょう。
実行してみると、
2016/09/0317:11:02.070944
……と表示されました。秒やミリ秒に preceding zero
が付与されたのは狙い通りですが、日付と時刻がくっついてしまっています。これは美しくありません。[dd]
と [hh]
の間に空白文字を入れたいと思いますが、どうすればいいでしょうか。
#output /width 2,hold,fill zero,justify right/ [dd]
の [dd]
の後ろに空白文字を入れても無視されるだけです。何か工夫が必要です。
width 2
を 3
にしたらどうでしょうか。
#output /width 3,hold,fill zero,justify right/ [dd]
残念ながらこれはうまくいきません。やってみると結果は
2016/09/00317:11:02.070944
……となって、幅を広げても preceding zero
で埋められるだけです。[hh]:
の width
を調整しても同じことです。どうやればいいか分かる人、手を挙げて!
はい、正解。第6回でやった ~_
を使えばいいわけです。ただ、まだ説明していない注意点があるので、ここでは違う技を紹介しておきます。
width 1
と fill space
の組み合わせが技です。fill
オプションは zero
の他に space
が指定可能です。これにより印字の桁合わせができるようになります。fl
の表示については次のソースで一応の最終形としましょう。
fl
マクロの表示にファイルコードを足して fileinfo
のようにしてみるのも悪くありません。表示項目をいろいろ工夫して、あなただけのオリジナルマクロを作ってみてはいかがでしょうか。
次回は fl
マクロの機能をもう少し拡張してみます。次回は routine が登場します。では Au revoir!