【 質問箱 No.63 回答 】 ⇒⇒⇒⇒ 質問箱 No.63(97年 10月号)の趣旨 質問者: 罍  昭 夫 <読みを入力しただけで氏名のフリガナと漢字の両方を書込みたい> 回答者:  入 川 精 二 【プログラム】           【 Ver.01 Rev.01X 19971028 】 /***************************************************/ /* V1 姓名のカナ                      */ /* V2 姓のカナ                       */ /* V3 名のカナ                       */ /* V4 検索した姓または名の漢字               */ /* V5 表示のための文字("姓"か"名") */ /* V11 姓漢字と名漢字を合成した文字列(目的の姓名漢字)    */ /* V12 確定した姓(漢字)         */ /* V13 確定した名(漢字)                     */ /* V20 INPUT文の受け皿(姓または名選択の番号)         */ /* V22 検索した姓または名から選択した漢字           */ /* V30 INPUT文の受け皿(Y or N)                 */ /* V33 表示のための検索データの1行の文字列          */ /* X1 検索データ(サブバッファ)の行番号            */ /* X21 入力表の行番号                      */ /* X30 メッセージ表示の行番号                 */ /* X31 辞書から検索したデータの番号             */ /* X32 検索データ表示の行番号                */ /* X33 表示のための検索データの行番号の初期値         */ /* X34 姓または名の検索データ(サブバッファ)の行番号      */ /***************************************************/ IUSE "JISHO:SEI"; IUSE "JISHO:MEI"; DISP OPEN(1,2,80,ENV(6)-3); $SS: G;氏名入力/1; LET X21=H;   /* 入力表の行番号 */ $入力: LET X30=4;   /* メッセージ表示の行番号 */ $入力2: DISP COLOR(C),[05,X30],"姓名(半角カナ)は?";   INPUT [25,X30],V1,U(XXXXXXXXXXXXXX/AF/CY/P/); /* 姓名のカナ */ $CHK01: IF ERR(0)=55 THEN GOTO $END; /* [ESC]が押された */ $CHK02: IF INSTR(2,V1," ")=0 THEN GOTO $入力2;/* 区切りの スペース がない */   LET X30=X30+2;   LET [X21,@カナ ]=V1;    /* 入力表に書込む */ /*## 姓の辞書検索 ##*/ $姓:   LET V2=LEFT$(V1,INSTR(1,V1," ")-1); /* 姓のカナ */   G/S;氏名検索/1;   ISEARCH "JISHO:SEI",V2; /* 姓辞書を検索 */   LET X31=1; /* 検索辞書データの最初の番号 */   FOR X1={H} TO {T}; $SREAD: IREAD "JISHO:SEI",V4=@姓漢字 ; /* 該当する漢字を読込む */ $SWRITE: LET {X1,@No. }=NUM$(X31); /* 番号の書込 */   LET {X1,@辞書 }=V4; /* 姓の書込 */ $SNEXT: INEXT "JISHO:SEI"; /* 次候補の検索 */ IF ERR(0)=36 THEN BREAK; /* 該当する姓なければ終り */ LET X31=X31+1; NEXT; LET V5="姓"; GOSUB DISP; /* 表示のためのサブプログラムへ */ LET V12=V22; /* 確定した姓 */ CLEAR V4/22; /*## 名の辞書検索 ##*/ $名: LET V3=RIGHT$(V1,INSTR(1,V1," ")+1); /* 名のカナ */ G/S;氏名検索/1; ISEARCH "JISHO:MEI",V3; /* 名辞書を検索 */ LET X31=1; /* 検索辞書データの最初の番号 */ FOR X1={H} TO {T}; $MREAD: IREAD "JISHO:MEI",V4=@名漢字 ; /* 該当する漢字を読込む */ $MWRITE: LET {X1,@No. }=NUM$(X31); /* 番号の書込 */ LET {X1,@辞書 }=V4; /* 名の書込 */ $MNEXT: INEXT "JISHO:MEI"; /* 次候補の検索 */ IF ERR(0)=36 THEN BREAK; /* 該当する名なければ終り */ LET X31=X31+1; NEXT; LET V5="名"; GOSUB DISP; /* 表示のためのサブプログラムへ */ LET V13=V22; /* 確定した名 */ /*## 姓名の書込 ##*/ LET V11=V12+" "+V13; /* 姓漢字と名漢字の合成 */ DISP COLOR(C),[05,X30],"姓名漢字 = ",COLOR(Y),V11; LET X30=X30+2; LET [X21,@漢字 ]=V11; /* 漢字姓名を書込む */ $継続?: DISP COLOR(C),[05,X30],"入力を続けますか?"; LET X30=X30+1; DISP [15,X30],"はい[Y],いいえ[N] [Enter]=Y "; INPUT [44,X30],V30,U(E/AS/CY/P/); IF ERR(0)=55 THEN GOTO $END; IF V30="" THEN LET V30="Y"; IF INSTR(1,"YyYy",V30)=0 THEN GOTO $END; $継続: LET X21=X21+1; DISP CLR; GOTO $入力; $END: CLOSE; STOP; FOR X34=1 TO 3; DISP COLOR(G),[55,X34],{L%X34}; NEXT; LET X32=4; /* 表示行番号 */ LET X33=4; /* サブバッファの行番号 */ $SS: FOR X34=X33 TO X33+19; $読込: LET V33={L%X34}; IF {X34,@辞書 }="" THEN BREAK; $表示: DISP COLOR(G),[55,X32],V33; LET X32=X32+1; NEXT; DISP COLOR(G),[55,X32]," └───────┘"; $選択?: DISP COLOR(C),[05,X30],"何番のデータ? [+]=UP, [-]=DOWN"; INPUT [44,X30],V20,U(EEE/AS/CY/P/); IF V20="+" THEN GOTO $+;IF V20="-" THEN GOTO $-; IF IVAL(V20)>0 THEN GOTO $選択; GOTO $選択?; $+: IF {X34,@辞書 }="" THEN GOTO $選択?; FOR X32=4 TO 24; DISP [55,X32],SP20;NEXT; LET X33=X33+20; LET X32=4; GOTO $SS; $-: IF X33=4 THEN GOTO $選択?; FOR X32=4 TO 24; DISP [55,X32],SP20; NEXT; LET X33=X33-20; LET X32=4; GOTO $SS; $選択: LET X30=X30+2; LET V22={@%V20 ,@辞書 }; DISP COLOR(C),[05,X30],V5,"の漢字 = ",COLOR(Y),V22; LET X30=X30+2; FOR X32=1 TO 24; DISP [55,X32],SP20; NEXT; RETURN;