Конкатенация текста в vb.net - PullRequest
0 голосов
/ 14 февраля 2019

Привет, я пытаюсь добавить текст из непрерывного получения данных. Длина текста, который я получаю, составляет 1, 2, 5, 4, 1 и т. Д. Мне нужны первые 5 байт данных, которые я пытаюсь добавить.в другой переменной с именем K , если длина K достигает длины 5, я переместу ее в переменную J и очистит K

    Dim j = ""
    Dim l = ""
    Dim k As String
Private Sub ReceivedText(ByVal [text] As String) 'input from ReadExisting
    Dim payload As Byte()
    Dim station = TextBox1.Text
    Dim number As String = Regex.Replace([text], "[^0-9]", "")

    If number.Length > 0 Then
        K = K + number
        If K.Length = 5 Then
            j = K
            K = ""
        ElseIf k.Length > 5 Then
            j = K.Substring(0, 5)
            If j.Length = 5 Then
                l = K.Remove(5)
                K = ""
                K = l
            End If
        End If
        If Me.RichTextBox1.InvokeRequired Then
            Dim x As New SetTextCallback(AddressOf ReceivedText)
            Me.Invoke(x, New Object() {(text)})
        Else
            Me.RichTextBox1.Text = K
        End If
    End If

, если длина переменной K больше 5, я добавлю 5 в первой переменной к "J" и уравновесу с другой переменной с именем l и добавьте это к K , так что я получу первую переменную, которая останется постоянно до длины 5, но, используя приведенный выше код, я не могу получить желаемый результат, любые предложения будут действительно оценены

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Вы должны объявить переменную K вне функции, чтобы значение сохранялось между вызовами функций.

Dim K As String = ""

Sub Main
    ' This is to simulate stream of data to pass to ReceivedText function
    Dim arr As String() = {"0", "12", "34567", "8901", "2", "34", "56", "7890", "123", "456"}

    For Each data As String In arr
        ReceivedText(data)
    Next

    Console.WriteLine("End of data stream. Remaining chars (Incomplete) : " & K)

End Sub

Private Sub ReceivedText(ByVal [text] As String)
    Dim number As String = Regex.Replace([text], "[^0-9]", "")

    K &= number ' Append [text] to K

    ' If K length is 5 or more
    If K.Length >= 5 Then
        ' Get the first 5 characters and assign to J
        Dim J As String = K.Substring(0, 5)

        ' I just print the 5-char value (J) to console.
        Console.WriteLine("Completed text (5 chars) : " & J)

        ' Remove the first 5 characters from K
        K = K.Remove(0, 5)
    End If
End Sub

Я упрощаю ваш код, как указано выше.

ВЫХОД

Completed text (5 chars) : 01234
Completed text (5 chars) : 56789
Completed text (5 chars) : 01234
Completed text (5 chars) : 56789
Completed text (5 chars) : 01234
End of data stream. Remaining chars (Incomplete) : 56

Выше Remaining chars - это не количество символов, оставшихся в K, а текст 5 и 6.Я специально поместил дополнительные символы в поток данных, как вы можете видеть в последнем элементе массива arr, чтобы они не были идеально в блоках по 5.

0 голосов
/ 14 февраля 2019

В части вашего кода:

        ElseIf k.Length > 5 Then
            j = k.Substring(0, 5)
            If j.Length = 5 Then
                k = ""
                l = k.Remove(0, 5)
                k = l
            End If

Удалите k = "".После удаления ваша переменная l будет установлена ​​правильно (вместо пробела).Это должно решить проблему.Удачи.

...