Объедините две строки и упорядочите их по дате / времени ЧАСТЬ # 2 - PullRequest
0 голосов
/ 22 февраля 2012

Это больше вторая часть вопроса, который начинается здесь здесь

Код ниже отлично работает, но я кое-что забыл, также есть город и штат до даты / времени, например:

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###"

Ниже приведен рабочий код, но я забыл добавить город и штат в строки strcountstf и strDateNTimes. Теперь, когда город, штат добавлен, он не работает.

Я бы хотел отсортировать его по дате / времени, но указать город, штат в качестве результата / результата ... пожалуйста, помогите СНОВА !! (Я знаю, я знаю).

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 ]

2 голосов
/ 23 февраля 2012

Создайте класс со свойствами 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 голос
/ 22 февраля 2012

Вам нужно использовать функцию split (), чтобы создать массив каждой из строк, затем выполнить цикл по массиву и создать совершенно новый массив.Если строка длиннее 2 символов (т. Е. Не является состоянием) и не содержит ### (т. Е. Не является датой), тогда загрузите первое значение массива как «город».Следовательно, если он соответствует только 2 символам, это State (загрузить его в значение 2-го массива) и, наконец, что не менее важно, если в нем есть ###, вы загрузите его в 3-м значении массива.

Завершая что-то вроде:

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

Как только вы это сделаете, вы можете настроить код отсортированного списка, который вам уже нужен, чтобы разместить новые поля и отсортировать их.

...