【 質問箱 No.98 回答 】その1. ⇒⇒⇒⇒ 質問箱 No.98(99年 7月号)の趣旨 質問者: 野 崎 武 治 <DMで特定列をWindowsプリンターに倍角で出力したい> 【プログラム】 回答者:  入 川 精 二 <2BAI> 2倍角;STOP; <2倍角> 【 Ver 02.03 19990719 】 /**************************** 変数一覧表 ********************************/ /* V1 処理対象の区分(バインダーか画面の表か) */ /* V2 対象バインダー */ /* X1 2倍角に変換する対象列 */ /* X2 指定列の桁数 */ /* X3 FOR〜NEXTの受皿(行番号) */ /* X4 列の必要桁数(文字数の4倍) */ /* X10 現在の頁横桁数 */ /* X11 頁面積 */ /* X12 使用行数 */ /* X13 最大横桁数(X11/X12) */ /* X14 表の使用桁数 */ /* X15 表の必要桁数 */ /* X20 FOR〜NEXTの受皿(指定バインダーのページ) */ /* X23 FOR〜NEXTの受皿(文字番号) */ /* X24 半角の濁点・半濁点の数 */ /**************************************************************************/ $対象1: ACCEPT "処理対象は? 画面[M],バインダー[B]",V1; IF ERR(0)=55 THEN STOP; /* [ESC]が押された */ IF V1="" | KLEN(V1)>1 THEN GOTO $対象1; /* 1文字でない */ LET V1=FORM$(FORM$(V1,4),1); /* 半角大文字に変換 */ IF INSTR(1,"MB",V1)=0 THEN GOTO $対象1; /* MとB以外はダメ */ IF V1="B" THEN GOTO $対象2 ELSE GOTO $CHK;/* 分岐 */ $対象2: ACCEPT /P "対象バインダーは? ",V2; /* バインダーの指定 */ IF ERR(0)=55 THEN STOP; /* [ESC]が押された */ IF NAME(3,V2)=0 THEN GOTO $ERR1; /* 指定バインダーがない*/ IF PAGE(V2,1)<1 THEN GOTO $ERR2; /* ページがない */ G;%V2/1; /* 1頁目を呼び出す */ $CHK: IF STATUS(1,1)<>1 THEN GOTO $ERR3; /* 表形式でない */ $列: ACCEPT /C "2倍角に変換する対象列は?",X1; /* 対象列の指定 */ IF ERR(0)=55 THEN STOP; /* [ESC]が押された */ IF X1<1 | >C THEN GOTO $列; /* 存在しない番号 */ IF CL(X1)<1 THEN GOTO $ERR4; /* 0桁の列 */ IF [H,X1]="|" THEN GOTO $ERR5; /* 罫線の列 */ LET X10=STATUS(1,2 ); /* 現在の頁横桁数 */ LET X11=X10*STATUS(1,3); /* 頁面積 */ LET X12=STATUS(1,7); /* 使用行数 */ LET X13=X11/X12; /* 最大横桁数 */ GOTO $%V1; $#M: GOSUB 2BAIEXE; GOTO $END; $#B: FOR X20=1 TO BINDER(V2); G;%V2/%X20; GOSUB 2BAIEXE; P;%V2/%X20; NEXT; $END: STOP; $ERR1: BELL;MESSAGE "指定されたバインダーは存在しません"; GOTO $対象2; $ERR2: BELL;MESSAGE "指定されたバインダーにはページがありません"; GOTO $対象2; $ERR3: BELL;MESSAGE "対象のページは表形式ではありません"; STOP; $ERR4: BELL;MESSAGE "0桁の列を指定しました"; GOTO $列; $ERR5: BELL;MESSAGE "罫線列を指定しました"; GOTO $列; <2BAIEXE> 【 Ver 02.03 19990719 】 FOR X3=H TO T; IF [X3,X1]=""|"=*-*" THEN CONTINUE; /* 罫線行はスキップ */ CLEAR X4/24; LET X2=CL(X1); /* 指定列の現在の桁数 */ LET X14=STATUS(1,6) /* 表の使用桁数 */ FOR X23=1 TO KLEN([X3,X1]); /* 半角の濁点・半濁点の処理*/ IF KMID$([X3,X1],X23,1)="゛"|"゜" THEN LET X24=X24+1; NEXT; LET X4=4*(KLEN([X3,X1])-X24); /* 文字数の4倍(必要桁数)*/ IF X4<=X2 THEN GOTO $EXE; /* 列桁数は足りている */ IF X14+X4-X2