;randfile.as hsp2.6 ;固定長レコードファイルのサンプル ;書き込み ; すべての欄を埋めて「書き込み」ボタンをクリック ; レコード番号「1〜『現在のレコード数+1』」が書き込み可能 ;読み出し ; レコード番号を指定して「読み出し」ボタンをクリック ; レコード番号「1〜現在のレコード数」が読み出し可能 idsize=8: namesize=20: telsize=20 ;下の3つを1レコードとする(サイズは4の倍数でなければならないかも) sdim id,idsize sdim name,namesize sdim tel,telsize recsize=idsize+namesize+telsize filename="randfile.dat" exist filename if strsize<0 { bsave filename,id,1: numrec=0 } else { numrec=strsize/recsize } snumrec=numrec: str snumrec objmode 16,1 color 191,191,191: boxf: color 0,0,0 mes "現在のレコード数:" pos 230,0: mesbox snumrec,120,28,2: numrecid=stat pos 0,32: mes "レコード番号:" pos 130,32: input recno,120,28: recnoid=stat pos 0,64: mes "id:" pos 130,64: input id,120,28,idsize-1: idid=stat pos 0,96: mes "名前:" pos 130,96: input name,namesize*10,28,namesize-1: nameid=stat pos 0,128: mes "電話:" pos 130,128: input tel,telsize*10,28,telsize-1: telid=stat objsize 120,28 pos 40,160: button "読み出し",*l_read pos 200,160: button "書き込み",*l_write objprm recnoid,"" stop *l_write recno-- if (recno<0)|(recno>numrec): dialog "レコード番号が不正です": stop gosub *l_put if recno>=numrec { numrec=recno+1: snumrec=numrec: str snumrec objprm numrecid,snumrec } stop *l_read recno-- if (recno<0)|(recno>=numrec): dialog "レコード番号が不正です": stop gosub *l_get objprm recnoid,recno+1 objprm idid,id objprm nameid,name objprm telid,tel stop *l_put fp=recno*recsize bsave filename,id,idsize,fp: fp+=idsize bsave filename,name,namesize,fp: fp+=namesize bsave filename,tel,telsize,fp: fp+=telsize return *l_get fp=recno*recsize bload filename,id,idsize,fp: fp+=idsize bload filename,name,namesize,fp: fp+=namesize bload filename,tel,telsize,fp: fp+=telsize return