Удаление специальных символов из текстового поля - PullRequest
0 голосов
/ 23 марта 2020

Я работаю с приложением, которое получает данные из весов с портом RS232.

Проблема в том, что данные, полученные из весов, которые получены в текстовом поле, выглядят так:

↑ N : 25,5 Kg

Я пытался удалить и удалить стрелку вверх и все другие символы и буквы, но мой код не работал.

Мне просто нужен номер без чего-либо остальное.

Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        Try
          Dim textrceveid As String
          textrceveid = SerialPort1.ReadExisting().ToString().Replace("N:", "").Replace("kg", "")
          ReceivedText(textrceveid) 'Automatically called whenever data is received on the Serial port

        Catch ex As Exception
        End Try
End Sub

Private Sub rtbReceived_TabIndexChanged(sender As Object, e As EventArgs) Handles rtbReceived.TabIndexChanged
    Dim numText As Regex = New Regex("[^\d]")
    rtbReceived.Text = numText.Replace(rtbReceived.Text, "")
End Sub

Private Sub rtbReceived_KeyPress(sender As Object, e As KeyPressEventArgs) Handles rtbReceived.KeyPress

    If (Not Char.IsNumber(e.KeyChar) AndAlso Not Char.IsControl(e.KeyChar)) Then
      e.Handled = True
    End If

End Sub

пример изображения

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Спасибо всем за ваши ответы, я нашел ответ после глубокой отладки: стрелка вверх ↑ - это vbFormFeed

Я только что написал, что

textrceveid = textrceveid.Replace(vbFormFeed, "").Replace("N:", "").Replace("kg", "").Trim

До: ↑ N : 25,5 Kg

После: 25,5

0 голосов
/ 23 марта 2020

Существует много подходов, и последующие следует рассматривать как альтернативу только в вашем сценарии.

    Dim testString As String = "↑N: 25,5 Kg"

    Dim patternWithDecimal As String = "([0-9]+)([.,])([0-9]+)"

    For Each m As System.Text.RegularExpressions.Match In System.Text.RegularExpressions.Regex.Matches(testString, patternWithDecimal)
        Console.WriteLine(m.Value)
    Next

Или

    Dim theFirstNumericPart As String = testString.Split(CChar(" ")).FirstOrDefault(Function(part) IsNumeric(part))
    Console.WriteLine(theFirstNumericPart)

Или

    Dim mDbl as Double
    If Double.TryParse(New String((From sChr In testString Where "1234567890.,-+".IndexOf(sChr) > -1).ToArray), mDbl) Then
        Console.WriteLine(mDbl.ToString)
    End If

Или (Кредит @AndrewMorton)

Dim numberString = Regex.Replace(testString, "[^0-9,.]", "")
...