将数字范围转换为逗号分隔的列表经典ASP

问题描述

似乎是一个非常常见的问题,但尚未找到经典的ASP示例。

我从我们继承的数据库中获得了如下所示的数据:

120-128,10,20,30,12-19

我需要能够以连续的顺序将其转换为逗号分隔的列表,不仅提取存在的数字,还提取范围内(由-指定)的数字

因此在上面的示例中,我期望输出

10,12,13,14,15,16,17,18,19,120,121,122,123,124,125,126,127,128

那时我希望能够将结果存储为单个变量,因此以后可以做更多的工作。

我已经找到Python方法,C#,Javascript,PHP等,但没有找到用于经典ASP的方法。 有人可以帮忙吗?

仅供参考,永远不会有重复的数字,每个数字都是唯一的。

解决方法

执行此操作的基本步骤是

  1. 用逗号分隔初始列表
  2. 遍历每个项目,检查是否有连字符
  3. 如果有连字符,则从头到尾循环,然后将该值添加到数组中;如果没有连字符,则只需将值添加

到那时,您将获得所有未排序且并非唯一的所有值的列表。

在Classic ASP中,可以使用Arraylist来帮助进行排序和唯一性。创建两个arraylist对象。一个将包含非唯一列表,然后另一个将包含最终的唯一列表。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<body>
    <p>
        <%

    v="120-128,10,20,30,12-19,13-22" 'our original string to parse

    set uniqueList=CreateObject("System.Collections.ArrayList") 'final unique list
    set mynumbers=CreateObject("System.Collections.ArrayList")  'a working list

    'first split the values by the comma
    splitCom=Split(v,",")

    'now go through each item
    for itemnumber=0 to ubound(splitCom)
        itemToAdd=splitCom(itemnumber)
       
        if InStr(itemToAdd,"-")>0 then  'if the item has a hyphen,then we have a range of numbers
            rangeSplit=Split(itemToAdd,"-")

            for itemToAdd=rangeSplit(0) to rangeSplit(1)
                mynumbers.Add CInt(itemToAdd)
            next
        else
            mynumbers.Add Cint(itemToAdd) 'otherwise add the value itself
        end if
    next

    'at this point,mynumbers contains a full list of all your values,unsorted,and non-unique.

    mynumbers.sort  'sort the list. Can't be any easier than this

    'output the non-unique list,and build a unique list while we are at it.
    Response.Write("Non-unique list<br />")

    for each item in mynumbers                      'iterate through each item
        Response.Write(item & "<br />")             'print it
            if (not uniqueList.Contains(item)) then 'is the value in our unique list?
                uniqueList.Add(item)                'no,so add it to the unique list
            end if
    next

    'now output the unique list.
    Response.Write("<br />Unique list<br />")
    for each item in uniqueList
        Response.Write(item & "<br />")
    next
        %>
    </p>
</body>
</html>