问题描述
似乎是一个非常常见的问题,但尚未找到经典的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的方法。 有人可以帮忙吗?
仅供参考,永远不会有重复的数字,每个数字都是唯一的。
解决方法
执行此操作的基本步骤是
- 用逗号分隔初始列表
- 遍历每个项目,检查是否有连字符
- 如果有连字符,则从头到尾循环,然后将该值添加到数组中;如果没有连字符,则只需将值添加
到那时,您将获得所有未排序且并非唯一的所有值的列表。
在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>