组合两个字符串并按日期/时间第2部分排序

时间:2012-02-21 22:42:15

标签: asp-classic vbscript

这是从here

开始的问题的第二部分

下面的代码效果很好,但我忘了一些东西,在日期/时间之前还有一个城市和州,例如:

strcountstf = "Chicago, IL,02/01/2012 3:05am###,Akron,OH,02/02/2012 7:05am###,Nashivlle,TN,02/05/2012 8:30pm###" 
strDateNTimes = "Buffalo,NY,03/01/2011 2:20am###,Las Vegas,NV,12/02/2012 8:00am###,Mount Vernon,IN,02/06/2012 6:45pm###"

下面是工作代码,但我忘了将City和State添加到strcountstf和strDateNTimes字符串中。现在当添加City,State时它不起作用。

我想按日期/时间排序,但显示城市,州作为输出/结果...请再次帮助!! (我知道,我知道)。

dim strcountstf 
dim strDateNTimes 
dim strCOMBO 
dim arrCOMBO 
dim strCOMBOSorted 
dim objSortedList 
dim i 

strcountstf = "02/01/2012 3:05am###,02/02/2012 7:05am###,02/05/2012 8:30pm###" 
strDateNTimes = "03/01/2011 2:20am###,02/02/2012 8:00am###,02/06/2012 6:45pm###" 

strCOMBO = strcountstf & "," & strDateNTimes 

arrCombo = Split(strCOMBO, ",") 

Set objSortedList = Server.CreateObject("System.Collections.SortedList") 

For i = LBound(arrCombo) To UBound(arrCombo) 
    Call objSortedList.Add(CDate(Replace(arrCombo(i), "###", "")), arrCombo(i)) 
Next 

strCOMBOSorted = "" 

For i = 0 To objSortedList.Count - 1 
    strCOMBOSorted = strCOMBOSorted & ", " & objSortedList.GetByIndex(i) 
Next 

strCOMBOSorted = Right(strCOMBOSorted, Len(strCOMBOSorted) - 2) 

Set objSortedList = Nothing 

Response.Write("<br>") 
Response.Write(strCOMBO) 
Response.Write("<br>") 
Response.Write(strCOMBOSorted) 

2 个答案:

答案 0 :(得分:2)

创建一个具有City,State和Time属性的类以及一个方法,以便将形状良好的字符串返回并相应地填充它们。

Class OmNomNom
    Public City, State
    Private time_, timeStr_
    Public Property Let [Time](t)
        timeStr_ = t
        time_ = cDate(replace(t, "###", ""))
    End Property
    Public Property Get [Time] ' as Date
        [Time] = time_
    End Property

    Public Function Regurgigate ' as String
        Regurgigate = join(array(City, State, timeStr_), ",")
    End Function

End Class

Set objSortedList = Server.CreateObject("System.Collections.SortedList")
For each chocolateCookie in array(strcountstf, trDateNTimes)
    for i = 0 to ubound(chocolateCookie) step 3
        Set myOmNomNom = new omNomNom
        myOmNomNom.City = chocolateCookie(i)
        myOmNomNom.State = chocolateCookie(i+1)
        myOmNomNom.Time = chocolateCookie(i+2)
        objSortedList.Add myOmNomNom.Time, myOmNomNom
    next
next

现在,您可以通过遍历排序列表(如前所述)获取正确的字符串,并从Regurgigate方法获取字符串:objSortedList.GetByIndex(i).Regurgigate()

免责声明:未对示例代码进行测试。

答案 1 :(得分:1)

您需要使用函数split()来创建每个字符串的数组,然后遍历数组并创建一个全新的数组。如果字符串超过2个字符(即,不是状态)并且不包含###(即,不是日期),则将第一个数组值加载为“city”。因此,如果它只匹配2个字符,则它是一个State(将其加载到第二个数组值),最后但并非最不重要的是,如果它中有###,则将它加载到第3个数组值中。

以类似的方式结束:

Array(
[0] => 'City' => 'Buffalo', 'State' => 'NY', 'Date' => '03/01/2011 2:20am###'
[1] => 'City' => 'Chicago', 'State' => 'IL', 'Date' => '03/01/2011 2:20am###'
)

完成后,您可以调整已有的已排序列表代码以容纳新字段并对其进行排序。

相关问题