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

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


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

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

5   голосов , оценка 3.8 из 5
Похожие ответы