回答を考えるに当たって、「人事異動情報」はPIPSに取り込み済みであり、その1頁が画面に表示されていることを前提にしました。また、「配信日」の文字列のある行には、続いて':'(コロン)と、数字を挟んで'年' '月' '日'があることも前提です。
ちょっと難題なのは':'(コロン)が全角か半角か分からないこと、数字の前後にスペースがあるかどうかも分からないことです。分かっていればプログラムは簡単になりますが、分からないことを前提にして組み立てたのが次頁の<配信日>です。
2〜4行で配信日のデータが何行目にあるか探します。見つかれば6行目に飛びます。
6行目以降は各行にコメントを付けていますので、そちらを見てください。
年月日の数字の前後にスペースがあるとき、文字の前のスペースは変数に取り込むと無視されますが、後のスペースはそのまま取り込まれます。このスペースを削除するのが13行の処理です。(16行・20行にもあります)
LET V03=NUM$(VAL(V03)); は一度数値に変換して再び文字列に戻しています。こうすることで後のスペースが除去されます。(スペースがなければそのままです)
「7月」のように数値が1桁の時、頭に'0'を補う必要があります。17行目(21行目も)でその処理をしています。
こうして年(4桁)月(2桁)日(2桁)の文字を合成して8桁の'V06'を得ます。
このプログラムは'V06'の内容を画面に表示して終わりです。
この結果をどのように利用するかは質問者にお任せします。
《'0'を補って桁数をそろえる》
データが数値でなく「コード」の場合、桁数が違うとトラブルの種になります。ある取引先のコードが'0068'のとき、本来は4桁入力してもらいたいところですが、入力の効率を考えると頭の'0'を省略していても受け付けて、プログラムの方で'0'を補って4桁にそろえることがよくあります。(厳密に云うと邪道ですが実務上やむを得ないときもあります)
そんな時に使う手法がプログラム30行以下の部分です。通常はもっといろいろチェックをかけますが、おおよそこんな具合です。
各行にコメントが付けてありますので解説は必要ないと思います。参考まで。
1 <配信日> 2 FOR X01=1 TO 20; 3 IF L%(X01)="=*配信日*" THEN GOTO $配信日; 4 NEXT; 5 GOTO $ERR0; 6 $配信日: LET V01=L%(X01); /* 配信日の行を読込む */ 7 LET X02=INSTR(1,V01,":"); /* 半角コロンの位置をチェック */ 8 IF X02>0 THEN GOTO $年月日; /* 半角コロンがあれば$年月日へ */ 9 LET X02=INSTR(1,V01,":"); /* 全角コロンの位置をチェック */ 10 $年月日: LET V02=RIGHT$(V01,X02+1); /* コロンの右側の文字列を読込む */ 11 $年: LET X03=INSTR(1,V02,"年"); /* '年'の位置をチェック */ 12 LET V03=LEFT$(V02,X03-1); /* 年の左側の文字列 */ 13 LET V03=NUM$(VAL(V03)); /* 前後のスペースを除去 */ 14 $月: LET X04=INSTR(1,V02,"月"); /* '月'の位置をチェック */ 15 LET V04=MID$(V02,X03+1,X04-X03); /* '年'と'月'の間の文字列 */ 16 LET V04=NUM$(VAL(V04)); /* 前後のスペースを除去 */ 17 IF LEN(V04)=1 THEN LET V04="0"+V04; /* もし1桁なら'0'を補う */ 18 $日: LET X05=INSTR(1,V02,"日"); /* '日'の位置をチェック */ 19 LET V05=MID$(V02,X04+1,X05-X04); /* '月'と'日'の間の文字列 */ 20 LET V05=NUM$(VAL(V05)); /* 前後のスペースを除去 */ 21 IF LEN(V05)=1 THEN LET V05="0"+V05; /* もし1桁なら'0'を補う */ 22 LET V06=V03+V04+V05; /* 年月日を合成 */ 23 MESSAGE V06; 24 $END: STOP; 25 26 $ERR0: MESSAGE "配信日のデータがありません"; 27 GOTO $END; 28 29 30 <4ケタ> 31 $コード: ACCEPT "コードは? [数字4桁]",V01; 32 IF ERR(0)=55 THEN GOTO $END; /* [Esc] が押された */ 33 IF V01="" THEN GOTO $コード; /* [Space] が押された */ 34 IF LEN(V01)>4 THEN GOTO $コード; /* 桁数が4ケタより大きい */ 35 IF VAL(V01)=0 THEN GOTO $コード; /* 数値でない */ 36 $4ケタ: IF LEN(V01)=4 THEN GOTO $EXE; /* 丁度4桁なら $EXE へ */ 37 LET V01="0"+V01; 38 GOTO $4ケタ; 39 $EXE: MESSAGE "V01 = "+V01; 40 /*・・・・・・・・ */ 41 42 43 $END: STOP;
回答箱のプログラムがプログラム集に収録されています。 |
□