在多个拆分循环中查找最大值

时间:2016-12-05 18:05:00

标签: vbscript asp-classic

我尝试将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

1 个答案:

答案 0 :(得分:1)

您需要使用变量(maxWeek)来包含最大周数,最初设置为低,以及一个函数,用于比较从数据到此值的任何周数(checkMax)。您所做的只是在获得新的周数时调用该函数,并且在该过程结束时,maxWeek变量的值是数据集中的最高周数。你可以通过将周数放入一个数组并对其进行排序来获得时髦,但这对你正在做的事情来说太过分了。

注意事项:1)代码未经过测试,但不难理解,您似乎很有能力; 2)请注意,您需要使用cInt()或cLng()函数来强制将周数比较为数字 - 如果忽略这一点,您将得到奇怪的结果。 2)我重新格式化/缩进了代码,但逻辑就像你的原始一样 - 你会发现你的代码更易于阅读和传递,如果你为了便于阅读而对其进行格式化和分隔并对其进行评论以供解释 - 值得考虑,否则你将会从来没有得到提升,因为所有的技术诀窍都会在你身边[假设你是新手编码 - 对不起,如果讲道]

编辑:首次编辑时出错 - 我使用了return,这是VBS中的无效动词。众所周知,要从函数返回值,您必须将函数名称设置为变量。 CheckMax()函数已更改。

编辑:修正了val()到cInt()函数的使用。 val()函数是一个VB6函数,没有移植到VBS。

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.    

回复于(maxWeek)

function checkMax(theVal, currentMax)

checkMax = currentMax 
if theVal > checkMax then 
    checkMax = theVal
end if

end function