在工作中遇到这样一个问题:
某些数据要分N页打印,但是在所有但数据页的前面要打印一张封皮(bg1),然后打印一张公共信息(bg2),后面是数据(bg3),最后还要打印一张统计信息(bg4)。比如说:有50组数据,每张报告打10组,就要分5张报告打印,也就是说,先打一张封皮,再打一张公共信息,然后打5张数据的报告,最后打一张报告,说明这50组数据的统计信息。一共是1+1+5+1=8张报告。
详细写来就是:
for i=1 to n ***********n代表共分多少页数据报告。
if i=1 ******如果是第一张报告,那么 打印bg1(封皮),bg2(公共信息),bg3(实际数据)
for ii=1 to 3
ss=allt(str(ii))
处理报告代码。。。。。。。
。。。。。。。。。。。。。。
report bg&ss to print
endfor
else
if i=n ************如果是最后一张报告那么打印数据和统计信息。
for ii=3 to 4
ss=allt(str(ii))
处理报告代码。。。。。。。
。。。。。。。。。。。。。。
report bg&ss to print
endfor
else**********************如果是中间的数据,则只打印bg3
处理报告代码。。。。。。。
。。。。。。。。。。。。。。
report bg3 to print
endif
endif
endfor
当然,这是在情况比较简单的时候,可以写出来代码。如果情况更加复杂,那么恐怕IF ELSE 就要用的更多。如果换一个角度来思考这个问题。可以这样考虑问题。
对于这N张数据报告。FOR I=1 TO N 里面再嵌一个FOR II=X TO Y
当I=1 FOR II=1 TO 3
当I=2 FOR II=3 TO 3 BG3
当I=3 FOR II=3 TO 3
................................
当I=N-1 FOR II=3 TO 3
当I=N FOR II=3 TO 4
将 II的左边的一系列数 1,3,3,3。。。。3
右边的一系列数 2,3,3,3。。。。4
那么左边,右边 的一系列数分别可以看成一个 函数(断点),y=f1(i) y=f2(i) 以I为自变量。
只要我们求出了这两个函数,就可以把原来的代码写成。
FOR I=1 TO N
FOR II=f1(I) TO f2(i)
处理报告和数据代码。。。。。。。
。。。。。。。。。。。。。。
report bg&ss to print
ENDFOR
ENDFOR
那么如何能求出这两个函数呢?
我们可以利用SIGN()以及它的复合运算。来归纳这两个函数,当然也可能有好多其他的办法。当问题变得更复杂,情况更多时,归纳成函数来作,会让代码更简洁。
才疏学浅,哪位大哥看到了,多提意见。