回答箱 No.28 APDで消失した横罫線を取り戻したい

  ◆ 質問箱 No.28  質問者:  早瀬 壮一   1996年07月  174号  P.24
      ◆  質問箱 目次へ
No.28-1   APDで消失した横罫線を取り戻したい 回答者
  入川 精二
1996年09月
176号 P.22
   ◆ No.28(1996年 7月号)の回答-1
  APDでデータを転送すると罫線のあった行は空白行となります(元のデータには空白行はなかったものとします)。取り敢えず1列目でチェックすることにします。
  ここに横罫線を引くわけですが、指令'DRL'を使うと罫線が「挿入」されて行が増えることになります。APDしたときは、行を追加する余地がないと考えるべきでしょうから、この手は使えません。それなら先に空白行を削除しておけば・・・・これなら大丈夫です。
  さて、空白行を削除した後に罫線を引く方法ですが、常識的には'DTL'、次に思い付くのは項目行の罫線(H-1行目)を'CPR'で複写する方法です。

  <罫線復活1>      /* D R L を 使 う */
  FOR X1=H TO T;
     IF [X1,1]<>"" THEN CONTINUE;   /* 空白行でなければスキップ     */
     DR;%X1;Y;                              /* 空白行を削除する              */
     DRL;R;%X1;                          /* 罫線を引く                   */
  NEXT;
  STOP;

  <罫線復活2>      /* H - 1 行 を 複 写 す る  */
  FOR X1=H TO T;
     IF [X1,1]<>"" THEN CONTINUE;   /* 空白行でなければスキップ     */
     DR;%X1;Y;                              /* 空白行を削除する              */
     CPR;H-1;%X1;                      /* H-1行目を複写する         */
  NEXT;
  STOP;

  何れも処理速度があまり速くないので、もう少し何とかならないかと考えた結果が次の方法です。これは空白行を削除しないで罫線を上書きするので、その分少し速くなります。

  <罫線復活3>      /* L E T 文 で 罫 線 を 書 き 込 む  */
  LET V1=L%(H-1);                   /* H-1行目を変数(V1)に取り込んでおく */
  FOR X1=H TO T;
     IF [X1,1]<>"" THEN CONTINUE;   /* 空白行でなければスキップ     */
     LET L%X1=V1;                          /* 空白行なら V1 を上書する   */
  NEXT;
  NF;N;;;;;                                     /* 表のフォーマットを正してく */
  STOP;

プログラムの部分はプログラム集に収録されています

戻る