回答箱 No.80: 役職名の書き換え

  ◆ 質問箱 No.80 質問者:  罍 昭夫  1998年06月 197号 P.22
      ◆ 質問箱 目次へ
No.80-1   役職名の書き換え 回答者
  西村 重幸
1998年07月
198号 P.23
   ◆ No.80(1998年 6月号)の回答-1
 入力画面にこだわってみました。(質問とはかけ離れたかも?)
  1. 組合員CDから氏名、現職名を画面表示し、変更、脱退、新規処理する。
  2. 変更役職CDをスペースに変換削除し、新規役職CDを加える。
  3. 役職順序を編集し(ABC・・abc・・123・・の順に)、名簿に書込む。
  4. 役職CDは、アルファベット又は数字の1文字としています。

<TEST>
       O;SORT用;2;;ESC;IR;S;H;20;P;S10;     /*SORT用ページを作成し仮登録*/
       CC;C/PUC;                                  /*作業キャビネットに移動*/
       G/F;簿/1;                                   /*処理確認の為画面に表示*/
$START:G/S;S10;                                /*SORT用ページをサブ画面へ*/
       LET V1=";労組役員名簿編集PRO";;
       DISP OPEN(40,1,80,29),COLOR(Y),[11,2],V1,COLOR(C);
$氏名:  DISP [3,4],"┌─────┬─────┬────┐";
     DISP [3,5],"│組合員CD  │ 氏名  │ 確認 │";
     DISP [3,6],"├─────┼─────┼────┤";
     DISP [3,7],"│     │     │    │";
     DISP [3,8],"└─────┴─────┴────┘";
     DISP [3,9]," 終了=ESC";

     INPUT [6,7],X1,U(NNNN);IF ERR(0)=55 THEN GOTO $終了;
      LET V19=NUM$(X1);
       RINDEX "NAME",V19,V1=C4,V2=C6;     /*氏名・役職CDを検索*/
        IF ERR(0)=34 OR LEN(V1)=0 THEN GOTO $ダメ;
         DISP[14,7],V1,[14,10],SP20;GOTO $確認; /*氏名を表示*/

$ダメ:  DISP[14,10],"該当者はいません";GOTO $氏名;
$確認:  INPUT [32,7],V10,U(F:R);IF V10="N" OR "n"THEN GOTO $氏名;
$役職:     DISP [3, 9],"┌─┬────┐┌─┬────┐";
    DISP [3,10],"│CD│役 職 名││CD│役 職 名│";
    DISP[ 3,11],"├─┼────┤├─┼────┤";
       LET V10="│ │    ││ │    │";
      FOR X2=12 TO 20;DISP [3,X2],V10;NEXT;
   DISP [3,X2+1],"└─┴────┘└─┴────┘",COLOR(G);
   DISP [3,X2+2],"┌─┬────┐┌─┬────┐"
   DISP [3,X2+3],"│ │    ││ │    │"
DISP [3,X2+4],"└─┴────┘└─┴────┘",COLOR(C);
DISP [3,X2+5],"(変更 [脱退=z])  ( 新規 )";
   DISP [3,X2+7],COLOR(C,RV),"[Esc]=次へ",COLOR(G);
$画面表示:  LET V2=FORM$(V2,3);                                 /*スペースの削除*/
            LET X10=LEN(V2);IF X10=0 THEN GOTO $新;      /*役職なし   */
            LET V11=V2;LET X11=5;LET X12=4;                   /*SUB用設定  */
            CLEAR V21,30; GOSUB 編集;
$変更:  INPUT [5,X2+3],V8,U(EEEEEEE);IF ERR(0)=55 THEN  GOTO $新規;
           LET X10=LEN(V8);                   IF X10=0 THEN GOTO $新規;
       FOR X5=1 TO X10;LET  V5=MID$(V8,X5,1);                     /*役職CD  */
           IF V5="z"  THEN GOTO $脱退;
           LET X7=INSTR(1,V2,V5);IF X7=0 THEN CONTINUE;        /*座標    */
           DISP COLOR(W,RV),[5,X7+11],V5,[7,X7+11],V%(X7+20);    /*表示    */
        NEXT;
$削除: S;FOR X5=1 TO X10; LET V5=MID$(V8,X5,1);            /*SORT用ページ*/
          LET V12='"'+V5+'"';CU;M;%V12;"    ";;Y;     /*退任CDをスペースに置換*/
         NEXT;S;

$新規: DISP COLOR(Y);
           INPUT [23,X2+3],V9,U(EEEEEEE);IF ERR(0)=55 THEN GOTO $確認2;
          LET X10=LEN(V9);                 IF X10=0 THEN GOTO $確認2;
          LET V11=V9;LET X11=23;LET X12=14;GOSUB 編集;       /*SUB用設定   */

$確認2:INPUT [14,X2+7],"確 認  0=了解  1=キャンセ ",X39,COLOR(Y),U(F:N/P/);
           DISP [14,X2+7],SP25;IF X39=0 THEN GOTO $新役;
          G/S;S10;CLEAR V8,9; DISP COLOR(C);GOTO $役職;   /*役職CDの初期化*/
$:新役: S;                                                                     /* SORT用ページ */
          SORT/S;;1;A;;; NF;S;1;1/1;                                      /* 役職CD SORT */
          SRC;                                                                    /* 行列入替    */
          NF;J;1,T;LET V9=[H,1];                                          /* 新役職CD取込  */
            WINDEX "NAME",V19,C6=V9;GOTO $継続;             /* 新役職CD書込 */
$脱退:      WINDEX "NAME",V19,C4="; ",C6=" ";;                 /* 名簿を空欄に */

$継続: G/F;名簿/1;                                                           /* 結果を確認  */
         INPUT [14,X2+7],"処 理  0=継続   1=終了 ",X39,COLOR(Y),U(F:N/P/);
          IF X39=0 THEN GOTO $START;
$終了: CLOSE;STOP;

<編集>
      FOR X5=1 TO X10;LET V5=MID$(V11,X5,1);
        RINDEX "YAKU",V5,V6=C4                            /* 役職名取込 */
          IF ERR(0)=34 THEN GOTO $ナシ;
            DISP [X11,X5+11],V5,[X11+2,X5+11],V6;       /*役職名画面表示*/
        IF X11=23 THEN GOTO $数字;
                  LET V%(X5+20)=V6;                         /* 役職名記憶 */
$数:  IF ASCII(V5)<=57 THEN LET V7="z"+V5  ELSE LET V7=V5;    /*数字CD*/
                  LET {X5+X12,1}=V7;CONTINUE;           /*SORT用ページヘ書込*/
$ナシ:  DISP [X11,X5+11],V5,[X11+2,X5+11],"?????";
      NEXT;RETURN;


このページのTOPへ戻る