ktruncate関数で日本語のデータを壊さずにバイト単位で切りだす

たいした内容ではないですが,更新することに意義があると思い書きます.

マルチバイト文字とシングルバイト文字の混在データを何バイトごとに変数に切り分けろっていう要望があったとします.(200byteとか…)

その場合,substrとかでやってしまうと,ちょうど切り出すバイトの切れ目がマルチバイト文字だった場合,文字が壊れます.とはいえksubstrだと,シングルもマルチも文字単位でとるので,データにシングルバイト文字が多かった場合,余分な空きが生じます(壊れるよりはマシだけど)

その場合,文字列を1文字ずつループで判定して足したりしていくプログラムを書いたりもしますが,ktruncate関数も便利です.

SASの説明をみてみると

KTRUNCATE関数

マルチバイト文字を壊すことなく、文字列をバイト単位で、指定した長さに切ります。

まさしくばっちり.

ためしてみます

data _null_;
file print;
x="あいうえお";
y=substr(x,1,5);
leny=length(y);
put y= leny=;

z=ktruncate(x,1,5);
lenz=length(z);
put z= lenz=;
run;

結果は








substrは無理やり5byte切り出して,文字をぶっ壊してますが
ktruncateはその手前でとどめて置いてくれます.
普通に良い関数なんで,私は好きです





0 件のコメント:

コメントを投稿