'QXマクロ辞書作成マクロ ' ' 'テキスト形式のQXマクロヘルプであるqmacro.txtを '辞書引きキットで利用できるTAB区切りの辞書形式に 'コンバートするマクロです。 ' ' '更新履歴 '08/13…qxkey.iniでも使えるように、QXの基本機能に ' 該当するメソッドは@無しでも辞書引き出来る ' ようにした。 ' proc main dim line$,mode,keyword$,msg$,tmp,passflag,basicflag,constflag,sampleflag dim fni$,fno$,fnt$ dim tmp$ dim group$,groupback$ fni$=getfilename$(,"qmacro.txt","qmacro.txtを選択してください。") if fni$="" then end fno$=left$(fni$,inrstr(fni$,"."))+"dic" fnt$=left$(fni$,inrstr(fni$,"."))+"$$$" print "現在変換処理中です。数分間お待ちください。" open fni$ for input as #1 open fnt$ for output as #2 do while eof(1)=0 lineinput#1,line$ line$=replace$(line$," "," ") if line$="[目次]"then line$="" tmp=0 if instr("_abcdefghijklmnopqrstuvwxyz@",left$(line$,1))<>0 then if right$(line$,8)=" ステートメント"then tmp=1 if right$(line$,3)=" 関数"then tmp=2 if right$(line$,5)=" メソッド"then tmp=2 if right$(line$,6)=" プロパティ"then tmp=2 if right$(line$,11)=" 関数、ステートメント"then tmp=2 if right$(line$,11)=" ステートメント,関数"then tmp=2 end if if left$(line$,1)="-"then tmp=255 if left$(line$,1)="━"then tmp=255 if tmp=255 then passflag=FALSE basicflag=FALSE constflag=FALSE sampleflag=FALSE end if if line$="■ 機能一覧 ■"then basicflag=TRUE if basicflag=TRUE and left$(line$,1)="@" then tmp=5 if left$(line$,5)="予約定数("then constflag=TRUE if constflag=TRUE and instr(line$," ")<>0 then tmp=6 if line$="[A]"then passflag=TRUE:tmp=0 if passflag=TRUE then line$="" if tmp>0 and mode<>0 and line$<>"" then if group$<>"" and keyword$="" then keyword$=left$(group$,instr(group$,",")-1) group$=mid$(group$,instr(group$,",")+1) groupback$=mid$(groupback$,instr(groupback$,",")+1) end if do while keyword$<>"" print#2,keyword$+" "+msg$ keyword$="" if group$<>"" then keyword$=left$(group$,instr(group$,",")-1) group$=mid$(group$,instr(group$,",")+1) msg$=msg$+left$(groupback$,instr(groupback$,",")-1) groupback$=mid$(groupback$,instr(groupback$,",")+1) end if loop msg$="":keyword$="":mode=0 end if if tmp=255 then line$="" elseif tmp=1 then mode=1 line$=trim$(line$):line$=left$(line$,inrstr(line$," ")-1) do while instr(line$," .. ")<>0 group$=group$+trim$(mid$(line$,inrstr(line$," .. ")+4))+"," line$=trim$(left$(line$,inrstr(line$," .. "))) loop line$=line$+" " keyword$=left$(line$,instr(line$," ")-1) line$="" elseif tmp=2 then mode=2 keyword$=left$(line$,instr(line$," ")-1) line$="" elseif tmp=5 then mode=5 keyword$=left$(line$,instr(line$," ")-1) line$=trim$(mid$(line$,len(keyword$)+1)) group$=group$+keyword$+"," groupback$=groupback$+"。マクロで使用する際は "+keyword$+" と表記。," do while left$(group$,1)="@":group$=mid$(group$,2):loop elseif tmp=6 then mode=6 keyword$=left$(line$,instr(line$," ")-1) line$=trim$(mid$(line$,len(keyword$)+1)) end if if line$<>"" and mode<>0 then if left$(line$,3)="構文 "then line$="【文法】"+trim$(mid$(line$,3)):sampleflag=FALSE if left$(line$,2)="構文" and instr("0123456789",mid$(line$,3,1))<>0 and mid$(line$,4,1)<>"," then line$="【文法"+mid$(line$,3,1)+"】"+trim$(mid$(line$,4)):sampleflag=FALSE if left$(line$,2)="機能"then line$="【機能】"+trim$(mid$(line$,3)):sampleflag=FALSE if left$(line$,2)="例 "then line$="【例】"+trim$(mid$(line$,2)):sampleflag=TRUE if left$(line$,2)="参照"then line$="【参照】"+trim$(mid$(line$,3)):sampleflag=FALSE if line$="構文"then line$="【文法】" if line$="機能"then line$="【機能】" if line$="書式"then line$="【書式】" if line$="返値"then line$="【返値】" if line$="例"then line$="【例】" if sampleflag=TRUE then if instr(line$,"'")<>0 then line$=replace$(line$,"'","'[")+"]" end if end if line$=trim$(line$) if line$<>"" then if instr(line$," ")<>0 and sampleflag=FALSE then do while instr(line$," ")<>0 line$=replace$(line$," "," ") loop line$=replace$(line$," ","…") end if if msg$<>"" then if instr("。】",right$(msg$,1))=0 then msg$=msg$+"。" end if end if msg$=msg$+trim$(line$) end if end if loop close#2 close#1 dim lst$[2047],lstc open fnt$ for input as #1 lstc=0 do while eof(1)=0 lstc++ lineinput#1,tmp$ lst$[lstc]=tmp$ loop close#1 dialog "DIALOG",0,0,100,100,0 control "",100,"LISTBOX",LBS_SORT,0,0,80,80 dlglistboxarray 100,lst$ call dlglistboxarray(100,lst$) open fno$ for output as #1 for tmp=1 to lstc tmp$=lst$[tmp] print#1,tmp$ next close#1 call msgbox(fno$+"を作成しました。") print"" end proc '-------------------------------------- '   ↓ 拙作crfunc.macより ↓ '-------------------------------------- function replace$(txt$,bef$,aft$) '文字列を置換します。 dim txtaft$ do while txt$<>"" if instr(txt$,bef$)<>0 then txtaft$=txtaft$+leftstr$(txt$,bef$)+aft$ txt$=leftstrnext$(txt$,bef$) else txtaft$=txtaft$+txt$ txt$="" end if loop replace$=txtaft$ end function function leftstr$(bef$,demilita$) '区切り文字列の直前までの文字列を取得 dim i,aft$ i=instr(bef$,demilita$) if i=0 then aft$=bef$ elseif i=1 then aft$="" else aft$=left$(bef$,i-1) end if leftstr$=aft$ end function function leftstrnext$(bef$,demilita$) '区切り文字列の以降の文字列を取得 dim i,aft$ i=instr(bef$,demilita$) if i=0 then aft$="" else aft$=mid$(bef$,i+len(demilita$)) end if leftstrnext$=aft$ end function