テキストをモールス信号に変換する関数

やっぱり モールス信号って業務で良く使いますよね.
プログラマ派遣先にいったら,全ての通信機器を取り上げられ,鉄格子窓のある部屋に閉じ込められて,SASの入ったPCだけ与えられて労働させられたみたいなあるあるの状況の際に

電気の消灯点灯タイミングで外部に助けを求めることができるかどうかが大事です

いちいち調べるの面倒なので,変換関数作ってみました

proc fcmp outlib=work.functions.common;

function text2morse (text $) $ ;

length key1  $1 text  _rvalue rvalue $2000 ;

_text=upcase(compress(text));

 declare dictionary  d1 ;

   d1["A"] = "・-";

   d1["B"] = "-・・・";

   d1["C"] = "-・-・";

   d1["D"] = "-・・";

   d1["E"] = "・";

   d1["F"] = "・・-・";

   d1["G"] = "--・";

   d1["H"] = "・・・・";

   d1["I"] = "・・";

   d1["J"] = "・---";

   d1["K"] = "-・-";

   d1["L"] = "・-・・";

   d1["M"] = "--";

   d1["N"] = "-・";

   d1["O"] = "---";

   d1["P"] = "・--・";

   d1["Q"] = "--・-";

   d1["R"] = "・-・";

   d1["S"] = "・・・";

   d1["T"] = "-";

   d1["U"] = "・・-";

   d1["V"] = "・・・-";

   d1["W"] = "・--";

   d1["X"] = "-・・-";

   d1["Y"] = "-・--";

   d1["Z"] = "--・・";

 do i = 1 to length(_text); 

  _key1=char(_text,i);

  _rvalue= d1[_key1];

  rvalue=catx(" ",rvalue,_rvalue);

 end;

  put _text= rvalue=;

  return(rvalue);

 endsub;

run;

で,使ってみます


options cmplib=work.functions ;

data test;
length x $200.;
x = "SOS";output;
x = "SAS";output;
x = "VVV";output;
run;

data a;
set test;
y = text2morse(x);
run;

proc print data=a noobs;
run;






こっちのけんと さんのおかげで誰でもわかるようになったSOSとかちゃんと変換できてますね
VVVはムスカ大佐が通信してたやつで,本日は晴天なり みたいな試験信号です

数字や記号は今回無視しています



0 件のコメント:

コメントを投稿