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

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

SASにおける全角スペースの話

先日、プログラミング研修をしていて、受講者がテキスト通りにコードを書いたものの、実行に失敗するということがありました。
調べてみると全角スペースが入っていたことが原因でした。

プログラミングにおいては、おそらく全角スペースはその存在を否定されるほど不要な存在かと思います。
とはいうものの、現実問題として全角スペースがコード中に紛れてしまうと困るのでその対応を考えてみました。

全ては
「全角スペースが可視化できるようにする」
この一言に集約されますが、方法は2つです。



1.フォントを変更する
調べた限り、全角スペースを可視化できるのは以下のフォントしかありませんでした。他にご存知だったら教えてください。(等幅前提)

RIcty
https://rictyfonts.github.io/
自分で生成しなければならず、手間がかかるので試していません。
フォントを確認したい方はググってください。

RIcty Diminished
https://rictyfonts.github.io/diminished
上のRictyの姉妹フォント。私はずっとこのフォントを使っています。
JIS 第二水準の漢字が不足しているのがネック。とはいえ、英数字がベースのプログラミングにはほとんど支障ないです。

・白源
https://qiita.com/tawara_/items/374f3ca0a386fab8b305
最近作成されたものらしいです。
慣れの問題ですが、0の区別がスラッシュではなく中黒である、小文字のアイとエルがくねってる、だけが個人的にネックです…。それ以外はとってもいいと思います。
同じフォントサイズを指定してもRIcty Diminishedよりもやや大きいようです。


RIcty Diminishedと白源の比較

f:id:japelin:20210319114701p:plain
白源
f:id:japelin:20210319114708p:plain
Ricty Diminished 対応していない文字は細くなっており、代替の標準フォントが使われていることがわかる

2.全角スペースを認識させる

 フォントを変更せずに対応できないものでしょうか。例えばVS Codeだとプラグインがあるようです。

 Delphiでは全角スペースが入ると、無効な文字とみなされ波線がつくのですぐに分かります。
f:id:japelin:20210319120008p:plain

多くのテキストエディタでは、キーワード登録で自動マーキングできると思います。
f:id:japelin:20210319115953p:plain



キーワード登録かぁ・・・・・・、ってSASでもできるんですよねぇ。(知らなかったの自分だけ?)
拡張エディタオプションの全般に用意されています。
f:id:japelin:20210319120202p:plain

ところが、このキーワード、単純な文字ではなく「キーワード」ということなので、前後に半角スペースがある等で1つの単語として認識される必要があります。

つまり、
「 」(全角スペース)
を登録した場合、全角スペースが2つ続いたものは検出できません。
ですので、念の為全角スペースが2つ続いたものも登録しておいた方がよさそうです。


いちいち登録するのは手間ですね。まとめて登録できないものでしょうか。(正規表現が使えたらいいのに。)


まずは保存先を探してみます。

SASの32bit、64bit混在環境でも同じように反映されているので、sasカタログではないようです。
rsasuser指定をしても正しく保存さていましたのでsasuser内ではありません。
SAS_HOMEディレクトリ?
ProgramDataフォルダ?
userprofile以下?
エクスプローラで検索しましたが見つかりません。


あ、レジストリ
とりあえず登録した全角スペースで検索してみると…
見つかりました。
f:id:japelin:20210319120436p:plain


以下のような構造になっています。
f:id:japelin:20210319120834p:plain

面倒ですけど

" "=" "
"  "="  "
"   "="   "

ってテキストファイルを作ればいいですね。


こんなときはプログラミングです。

filename reg 'c:\temp\AddKeyrowds.reg';
data _null_;
  file reg;
  length x $165;
  put 'Windows Registry Editor Version 5.00';
  put ;
  put '[HKEY_CURRENT_USER\SOFTWARE\SAS Institute Inc.\Enhanced Editor\9.4\Editor Settings\.sas\User Keywords]';
  do i=0 to 39;
    x='"'||repeat(' ',i)||'"="'||repeat(' ',i)||'"';
    put x;
  end;
run;
x 'c:\temp\AddKeyrowds.reg';

最後はレジストリ書き込みが必要なの管理者権限がないとダメですが、これで40個の全角スペースまでは検出してくれるようになりました。


結果は以下の通りです。
f:id:japelin:20210319123126p:plain