【问题标题】:Turn range of numbers into a comma divided list (Classic ASP) [closed]将数字范围转换为逗号分隔列表(经典 ASP)[关闭]
【发布时间】:2020-11-10 14:25:10
【问题描述】:

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

我们继承的数据库中的数据如下所示:

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

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

所以在上面的例子中,我希望输出:

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

然后我希望能够将该结果存储为单个变量,以便以后可以做更多的工作。

我找到了 Python 方法、C#、Javascript、PHP 等,但没有找到适用于 Classic ASP 的方法。 有人可以帮忙吗?

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

【问题讨论】:

  • 您能否发布您的 Javascript 解决方案。在 Classic ASP 中,您可以使用 JS 作为服务器端语言而不是 VBS
  • 欢迎来到 SO。这是一个相当不错的小面试问题,涉及字符串操作、数组、排序和重复数据删除。有兴趣看看你的 JS 代码。不过正如 John 所说,您可能无论如何都可以在服务器上运行 JS,因此可能不需要纯 ASP 解决方案。
  • @John Classic ASP 支持 Active Scripting 语言,其中包括 JScript 而不是 JavaScript。当您将 JavaScript 指定为服务器端语言时,您实际上使用的是基于 ECMAScript 3 规范的 JScript,因此请不要将其与当前至少为 ECMAScript 6 和 ECMAScript 2020 的现代 JavaScript 混淆,因此它在不断发展,不像 JScript 是 ES3 并且不会改变。
  • 关于 JS 与 JScript Lanky 的好点。即使是 JScript 也将具备满足 OP 需求的基本功能?
  • @VanquiishedWombat 绝对是,只是想指出他们不应该被同等对待。

标签: asp-classic


【解决方案1】:

执行此操作的基本步骤是

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

此时,您拥有所有值的列表,未排序且不唯一。

在经典 ASP 中,您可以使用 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 2015-05-20
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多