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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д