在多个拆分循环中找到最大值
find max value in multiple split loops
我试图从 4 个分割循环中分离出一个最大值,但到目前为止还没有解开这个谜团。
记录集 XlsRecWeeks 来自 excel 工作表字段 [Scheduled Weeks],其中包含周数作为值,例如
6、
7、
6-22,
9-12;14-24
以此类推,代表每个领域的一周,两周之间的时间段甚至多个星期的几个时间段。
我设法将字段拆分为一个星期数组,我需要确定结果数组中所有值的单个最高星期数。
我可以征求意见吗?
这是目前的代码
do while not XlsRecWeeks.EOF
If not isnull(XlsRecWeeks("scheduled weeks")) Then
weekgroups=Split(XlsRecWeeks("scheduled weeks"), ";")
if ubound(weekgroups) > 0 then
for each weekintervals in weekgroups
weekinterval=Split(weekintervals, "-")
if ubound(weekinterval)> 0 then
for weeknrs = weekinterval(0) to weekinterval(1)
Response.Write weeknrs & "<br />"
next
else
Response.Write weeknrs & "<br />"
end if
next
else
weekinterval=Split(XlsRecWeeks("scheduled weeks"), "-")
if ubound(weekinterval)> 0 then
for weeknrs = weekinterval(0) to weekinterval(1)
Response.Write weeknrs & "<br />"
next
else
Response.Write XlsRecWeeks("scheduled weeks") & "<br />"
end if
end if
else
end if
XlsRecWeeks.movenext
loop
您需要使用一个变量 (maxWeek) 来包含最大周数,最初设置为低,以及一个函数来比较您从数据中获得的任何周数与该值 (checkMax)。您所要做的就是在每次获得新的周数时调用该函数,并且在该过程结束时,maxWeek 变量的值是数据集中的最高周数。您可以通过将周数放入数组并对其进行排序来变得时髦,但这对于您正在做的事情来说太过分了。
一些注意事项:1) 代码没有经过测试,但不难理解,而且你看起来很有能力; 2) 请注意,您需要 cInt() 或 cLng() 函数来强制将周数比较为数字 - 如果您忽略这一点,您将得到奇怪的结果。 2) 我重新格式化/缩进了代码,但逻辑与你原来的一样——你会发现你的代码更容易阅读和传递,如果你格式化和 space 它以提高可读性并评论它以进行解释 - 值得考虑为否则你将永远不会得到晋升,因为所有的专业知识都将掌握在你手中[假设你是编码新手 - 如果说教很抱歉]
编辑:第一次编辑时出错 - 我使用了 return
,这是 VBS 中的无效动词。众所周知,要 return 来自函数的值,您必须将函数名称设置为变量。 CheckMax() 函数已更改。
编辑:将 val() 的使用更正为 cInt() 函数。 val() 函数是未移植到 VBS 的 VB6 函数。
dim maxWeek
maxWeek = -1
do while not XlsRecWeeks.EOF
If not isnull(XlsRecWeeks("scheduled weeks")) Then
weekgroups=Split(XlsRecWeeks("scheduled weeks"), ";")
if ubound(weekgroups) > 0 then
for each weekintervals in weekgroups
weekinterval=Split(weekintervals, "-")
if ubound(weekinterval)> 0 then
for weeknrs = weekinterval(0) to weekinterval(1)
Response.Write weeknrs & "<br />"
maxWeek = checkMax(Cint(weeknrs)), maxWeek)
next
else
weeknrs = weekinterval(0)
Response.Write weeknrs & "<br />"
maxWeek = checkMax(Cint(weeknrs)), maxWeek)
end if
next
else
weekinterval=Split(XlsRecWeeks("scheduled weeks"), "-")
if ubound(weekinterval)> 0 then
for weeknrs = weekinterval(0) to weekinterval(1)
Response.Write weeknrs & "<br />"
maxWeek = checkMax(Cint(weeknrs)), maxWeek)
next
else
Response.Write XlsRecWeeks("scheduled weeks") & "<br />"
weeknrs = XlsRecWeeks("scheduled weeks")
maxWeek = checkMax(Cint(weeknrs)), maxWeek)
end if
end if
end if
XlsRecWeeks.movenext
loop
' maxWeek now holds max week value.
response.write(maxWeek)
function checkMax(theVal, currentMax)
checkMax = currentMax
if theVal > checkMax then
checkMax = theVal
end if
end function
我试图从 4 个分割循环中分离出一个最大值,但到目前为止还没有解开这个谜团。
记录集 XlsRecWeeks 来自 excel 工作表字段 [Scheduled Weeks],其中包含周数作为值,例如 6、 7、 6-22, 9-12;14-24
以此类推,代表每个领域的一周,两周之间的时间段甚至多个星期的几个时间段。
我设法将字段拆分为一个星期数组,我需要确定结果数组中所有值的单个最高星期数。
我可以征求意见吗?
这是目前的代码
do while not XlsRecWeeks.EOF
If not isnull(XlsRecWeeks("scheduled weeks")) Then
weekgroups=Split(XlsRecWeeks("scheduled weeks"), ";")
if ubound(weekgroups) > 0 then
for each weekintervals in weekgroups
weekinterval=Split(weekintervals, "-")
if ubound(weekinterval)> 0 then
for weeknrs = weekinterval(0) to weekinterval(1)
Response.Write weeknrs & "<br />"
next
else
Response.Write weeknrs & "<br />"
end if
next
else
weekinterval=Split(XlsRecWeeks("scheduled weeks"), "-")
if ubound(weekinterval)> 0 then
for weeknrs = weekinterval(0) to weekinterval(1)
Response.Write weeknrs & "<br />"
next
else
Response.Write XlsRecWeeks("scheduled weeks") & "<br />"
end if
end if
else
end if
XlsRecWeeks.movenext
loop
您需要使用一个变量 (maxWeek) 来包含最大周数,最初设置为低,以及一个函数来比较您从数据中获得的任何周数与该值 (checkMax)。您所要做的就是在每次获得新的周数时调用该函数,并且在该过程结束时,maxWeek 变量的值是数据集中的最高周数。您可以通过将周数放入数组并对其进行排序来变得时髦,但这对于您正在做的事情来说太过分了。
一些注意事项:1) 代码没有经过测试,但不难理解,而且你看起来很有能力; 2) 请注意,您需要 cInt() 或 cLng() 函数来强制将周数比较为数字 - 如果您忽略这一点,您将得到奇怪的结果。 2) 我重新格式化/缩进了代码,但逻辑与你原来的一样——你会发现你的代码更容易阅读和传递,如果你格式化和 space 它以提高可读性并评论它以进行解释 - 值得考虑为否则你将永远不会得到晋升,因为所有的专业知识都将掌握在你手中[假设你是编码新手 - 如果说教很抱歉]
编辑:第一次编辑时出错 - 我使用了 return
,这是 VBS 中的无效动词。众所周知,要 return 来自函数的值,您必须将函数名称设置为变量。 CheckMax() 函数已更改。
编辑:将 val() 的使用更正为 cInt() 函数。 val() 函数是未移植到 VBS 的 VB6 函数。
dim maxWeek
maxWeek = -1
do while not XlsRecWeeks.EOF
If not isnull(XlsRecWeeks("scheduled weeks")) Then
weekgroups=Split(XlsRecWeeks("scheduled weeks"), ";")
if ubound(weekgroups) > 0 then
for each weekintervals in weekgroups
weekinterval=Split(weekintervals, "-")
if ubound(weekinterval)> 0 then
for weeknrs = weekinterval(0) to weekinterval(1)
Response.Write weeknrs & "<br />"
maxWeek = checkMax(Cint(weeknrs)), maxWeek)
next
else
weeknrs = weekinterval(0)
Response.Write weeknrs & "<br />"
maxWeek = checkMax(Cint(weeknrs)), maxWeek)
end if
next
else
weekinterval=Split(XlsRecWeeks("scheduled weeks"), "-")
if ubound(weekinterval)> 0 then
for weeknrs = weekinterval(0) to weekinterval(1)
Response.Write weeknrs & "<br />"
maxWeek = checkMax(Cint(weeknrs)), maxWeek)
next
else
Response.Write XlsRecWeeks("scheduled weeks") & "<br />"
weeknrs = XlsRecWeeks("scheduled weeks")
maxWeek = checkMax(Cint(weeknrs)), maxWeek)
end if
end if
end if
XlsRecWeeks.movenext
loop
' maxWeek now holds max week value.
response.write(maxWeek)
function checkMax(theVal, currentMax)
checkMax = currentMax
if theVal > checkMax then
checkMax = theVal
end if
end function