No.35-5 |
文字列の間のスペースを‘-’(ハイフン)に変えたい |
回答者 入川 精二 |
1996年10月 177号 P.22 |
◆ No.35(1996年 9月号)の回答-05(自問自答)
なるべくコマンドを使った回答を期待していましたので、次の <CCCC1> で完璧! と考えたのです。所がいろんなケースを試しているうちに、列桁数より1桁だけ少ない文字列があると、結果はその文字列の前か後ろに(右寄せか左寄せかによって異なる)ハイフンが1個付いてしまうのです。これは欠陥商品だ! とは誰も言わないでしょうけれど気持ち悪いので、<CCCC2>を作りました。ただし、これは列桁数を2桁増やすので、頁サイズに余裕がないと駄目です。 頁サイズに余裕のないときは、止むなくオートコマンドのお世話になって、<CCCC3> プログラムとなります。“KLEN”や“KMID$”を使ったので、全角文字があっても対応できます。
1 <CCCC1>
2 CU/C;M;C2=" ";"##";;Y; /* 第1ステップ */
3 M;C2="# ";"##";;Y; /* 第2ステップ */
4 M;C2=" ";"-";C2="#";" ";;Y;ESC; /* 第3ステップ */
5 STOP;
6
7 <CCCC2>
8 CF;2;18; /* 現在の列桁数 + 2桁 にする */
9 CJ;P;L;A;2; /* データを片側に寄せる */
10 CU/C;M;C2=" ";"##";;Y; /* 第1ステップ */
11 M;C2="# ";"##";;Y; /* 第2ステップ */
12 M;C2=" ";"-";C2="#";" ; ";;Y;ESC; /* 第3ステップ */
13 CF;2;16; /* 元の桁数に戻す */
14 STOP;
1 <CCCC3>
2 FOR X1=H TO T; /* H行からT行まで1行ずつ */
3 CLEAR V1,3; /* V1,V2,V3 を初期化しておく */
4 LET V1=[X1,2]; /* 2列目のデータを V1 に読み込む */
5 FOR X2=1 TO KLEN(V1); /* V1 文字列の1文字ずつ */
6 LET V2=KMID$(V1,X2,1); /* V2 に読み込む */
7 IF V2=" "; THEN GOTO $ショリ2; /* V2 がスペースなら $ショリ2 へ */
8 $ショリ1: LET V3=V3+V2;CONTINUE; /* V2 がスペースでなければ V3 に繋ぐ */
9 $ショリ2: LET V3=V3+"-"; /* V2 がスペースの時は"-"を V3 に繋ぐ */
10 NEXT;
11 LET [X1,2]=V3; /* V3 を元の位置に書き込む */
12 NEXT;
13 STOP;
|
| |