mod()函数在FoxPro编程中的应用

Author: 韦金 Date: 1997-01-01

  初学FoxPro时,会觉得mod()求余函数好像用途不大,其实在编程中大有用处。
  例如:有一物资数据库(文件名:WZK),要求月底盘存只打印物资名称(WZMC)和结存量(JCL)两个字段。初学者可能编写程序是:
  USE C:\WZK
  LIST ALL FIELDS WZWC, JCL TO PRINT
  可是打印出的清单只用了打印纸左边一小部份。若根据纸的宽度,字体大小每行打印六条记录正好。上面程序就无能为力。用格式输出命令@<坐标> Say <字段表>只能展开同一条记录的不同字段,不能将同一字段不同记录横向展开。若用函数mod()和数组结合,则可实现将同一字段不同记录在同行横向展开,程序核心部分如下:
  USE C:\WZK
  STOR RECCOUNT() TO JLZS
  STOR INT(JLZS/6) TO YS
  DQJL=0
  HS=1
  SET DEVICE TO PRINT
  SET PRINT ON
  @ HS+3, 20 SAY ”重庆天龙公司物资清单”
  @ HS+3, 66 SAY DATE()
  @ HS+6, 0 SAY”物资名称、结存量……物资名称、结存量”
  DECL WZ(6), KC(6)
  DO WHILE .T.
  IF JLZS-DQJL>0
      DQJL=DQJL+1
      GO DQJL
  ELSE
      EXIT
  ENDIF
  STOR MOD(DQJL,6) TO J
  STOR WZMC TO WE(J)
  STOR JCL TO KC(J)
  IF MOD(DQJL,6)<>0
      LOOP
  ELSE
      IF MOD(HS,6)=0
          HS=HS+1
      ENDIF
         @ HS+7, 0 SAY WZ(1) KC(1)
              ……WZ(0) KC(0)
          HS=HS+1
          YS=YS-1
      LOOP
  ENDIF
  ENDDO
  以上程序用循环语句、数组和MOD()函数实现同一行打印6条记录(每条两个字段),且打满5行自动留一空格再接着打下去。以上程序解决了余数为0时的打印情况。