ASP经典代码可以解释这个代码的作用吗?

时间:2013-05-03 17:37:50

标签: asp-classic vbscript

我是疯子还是无知(两者都很可能)或者此代码什么都不做?

我正在维护一个由第三方公司编写的遗留网站,所以我可以问的网站真的没有人参与。

我知道他们正在循环记录集并获取最后一条记录的编号。但我不明白“if”块正在做什么。在伪代码中,似乎是在说“如果我有一个数字并从中减去相同的数字,将它除以4然后再乘以4并且它不等于零......那么”

什么时候不能等于零(除非你产生除零误差)? < - 忽略这一点,我在倒退,你可以得到0/4而不是4/0。然而,其余的问题仍然存在。

我唯一能想到的是记录号是否为负数?这是可能的,我不认为自己是ASP Classic的专家,但我不知道可能会发生。

任何人都知道我在这里缺少什么?

do while not rs.EOF 
    recordNum = recordNum + 1
    rs.MoveNext 
loop

rs.MoveFirst

if recordNum-((recordNum\4)*4) > 0 then
    recordNumber = (recordNum\4)+1
else
    recordNumber = (recordNum\4)
end if 

3 个答案:

答案 0 :(得分:3)

首先,正如现在删除的答案所指出的那样,recordNum\4返回除法的整数部分,因为VBScript中的反斜杠运算符用于整数除法,而有序斜杠(/)用于浮点除法。

以下是一些示例值:

recordNum | recordNumber
----------|-------------
    0     |     0
    1     |     1
    2     |     1
    3     |     1
    4     |     1
    5     |     2
    6     |     2
    7     |     2
    8     |     2
    9     |     3

所以这个值不是记录的数量,而是回答“我有多少组四个项目”之类的问题?

现在基于此,编写代码的人可以知道要显示多少个表行,例如:

For x=1 To recordNumber
    Response.Write("<tr>")
    Response.Write("<td>...</td>")
    Response.Write("<td>...</td>")
    Response.Write("<td>...</td>")
    Response.Write("<td>...</td>")
    Response.Write("</tr>")
Next

答案 1 :(得分:1)

它是一种分页算法没有任何意义,只会浪费你的cpu周期, IF 在100%的情况下会导致0

和btw:你永远不会达到除零异常,因为将0除以4 = 0

答案 2 :(得分:0)

只是添加到此对话中(即使已经回答);上面的“算法”计算数据中“页面”的数量,并允许可能只有 n 页面但不完全 n +1的事实。另一种方法是读取标量值:

sqlString = "SELECT COUNT(id_field) AS total FROM table WHERE criteria = TRUE "
...
'Read data into array and pass to variable.
...
Dim maxPages
maxPages = recs \ 4 + (((recs \ 4) <> (recs / 4)) And 1)

按照你的帖子Valis循环记录是一个巨大的浪费时间。