ID_Range_String генератор строки с автоматическим расширителем диапазона - VB
Формулировка задачи:
Тыыыыысяча извинений за столь необычное название топика, но иначе на скорую руку ничего не придумывалось больше.
Вот такая задача:
а) В коде постоянно поступают числа от 1 до 99999 рандомно.
б) Полученное число надо сконкатенировать к ранее полученному через запятую.
когда чисел было немного, то особо проблемы не было, но теперь чисел сотни и даже тысячи, то переменная раздувается до неузнаваемости. А если учесть то, что эта переменная ещё шлётся в SQL Server, то ещё и траф(конечно немного, но для убедительности).
В результате, в стринге очень много смежных чисел. Например: 2333,45,5443,2332,2331,5444,5445....
Срочно надо ваш совет: как перед конкатенацией сверять "концы" на предмет рядом стоячести. Т.е. из полученной строки можно сделать диапазон так: 45,2331-2333,5443-5445.
К тому же поступающие числа могут повторятся! Редко, но могут. В списке может присутствовать один раз.
Закидывать их в массив, а при каждом новом айтеме проходить по нему и прибавлять/отнимать единицу? Если да, то заменять нижний/верхний предел диапазона?
Надо идеи. Прошу совета.
Решение задачи: «ID_Range_String генератор строки с автоматическим расширителем диапазона»
textual
Листинг программы
- Option Explicit
- Const M& = 30
- Dim s$, b(1 To M) As Boolean, p&
- Function AddNum(n&) As String
- Dim i&, i1&, d$
- If Not b(n) Then
- b(n) = True
- p = 1
- For i = 1 To M
- If b(i) Then
- If i1 = 0 Then i1 = i
- ElseIf i1 Then
- If i - i1 > 1 Then
- d = "," & i1 & 1 - i
- Else
- d = "," & i1
- End If
- i1 = 0
- Mid(s, p) = d
- p = p + Len(d)
- End If
- Next
- End If
- AddNum = Mid$(s, 2, p - 2)
- End Function
- Sub test()
- Dim t$, n&
- s = String(50, ".")
- Erase b
- Randomize
- Do
- n = Int(Rnd * (M - 1) + 1)
- If Not b(n) Then
- t = AddNum(n)
- Debug.Print t
- End If
- Loop Until t = "1-" & M - 1
- Debug.Print
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д