質問箱 No.35: 文字列の間のスペースを‘-’(ハイフン)に変えたい

  ◆ 質問箱No.35  質問者:  入川 精二   1996年09月 176号 P.23
      ◆  質問箱 目次へ
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;

戻る