ID_Range_String генератор строки с автоматическим расширителем диапазона - VB

Узнай цену своей работы

Формулировка задачи:

Тыыыыысяча извинений за столь необычное название топика, но иначе на скорую руку ничего не придумывалось больше. Вот такая задача: а) В коде постоянно поступают числа от 1 до 99999 рандомно. б) Полученное число надо сконкатенировать к ранее полученному через запятую. когда чисел было немного, то особо проблемы не было, но теперь чисел сотни и даже тысячи, то переменная раздувается до неузнаваемости. А если учесть то, что эта переменная ещё шлётся в SQL Server, то ещё и траф(конечно немного, но для убедительности). В результате, в стринге очень много смежных чисел. Например: 2333,45,5443,2332,2331,5444,5445.... Срочно надо ваш совет: как перед конкатенацией сверять "концы" на предмет рядом стоячести. Т.е. из полученной строки можно сделать диапазон так: 45,2331-2333,5443-5445. К тому же поступающие числа могут повторятся! Редко, но могут. В списке может присутствовать один раз. Закидывать их в массив, а при каждом новом айтеме проходить по нему и прибавлять/отнимать единицу? Если да, то заменять нижний/верхний предел диапазона? Надо идеи. Прошу совета.

Решение задачи: «ID_Range_String генератор строки с автоматическим расширителем диапазона»

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Const M& = 30
  4. Dim s$, b(1 To M) As Boolean, p&
  5.  
  6. Function AddNum(n&) As String
  7. Dim i&, i1&, d$
  8.   If Not b(n) Then
  9.     b(n) = True
  10.     p = 1
  11.     For i = 1 To M
  12.       If b(i) Then
  13.         If i1 = 0 Then i1 = i
  14.       ElseIf i1 Then
  15.         If i - i1 > 1 Then
  16.           d = "," & i1 & 1 - i
  17.         Else
  18.           d = "," & i1
  19.         End If
  20.         i1 = 0
  21.         Mid(s, p) = d
  22.         p = p + Len(d)
  23.       End If
  24.     Next
  25.   End If
  26.   AddNum = Mid$(s, 2, p - 2)
  27. End Function
  28.  
  29. Sub test()
  30. Dim t$, n&
  31.   s = String(50, ".")
  32.   Erase b
  33.   Randomize
  34.   Do
  35.     n = Int(Rnd * (M - 1) + 1)
  36.     If Not b(n) Then
  37.       t = AddNum(n)
  38.       Debug.Print t
  39.     End If
  40.   Loop Until t = "1-" & M - 1
  41.   Debug.Print
  42. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы