2

我有一串连续的单词从机器传到系统的超级终端,为此我使用 USB 到串行电缆。我想找到该字符串中特定单词之后的一些值,然后将其存储。

我使用线程和拆分概念来做到这一点,但根据机器的要求和操作,它在运行时将无法正常工作。

我想要捕获的值来自一个特定的词。我想跳过那些词,只存储值。怎么做?

我在下面给出了该字符串的示例:

平均 49 50
标清 500 10
最低 100 5
最大 50 45.56

在此我只想存储值,例如49and 50,然后丢弃MEAN。然后丢弃SD和存储500等等10

4

2 回答 2

1

您可以使用StreamReader对象一次读取一行。String.Split然后,您可以使用该方法轻松解析该行。我建议创建一个或多个代表正在读取的数据的类,如下所示:

Public Class LineData
    Public Property Label As String
    Public Property Value1 As Decimal
    Public Property Value2 As Decimal
End Class

Public Function ReadNextLine(stream As Stream) As LineData
    Dim reader As New StreamReader(stream)
    Dim line As String = reader.ReadLine()
    Dim data As LineData = Nothing
    If line IsNot Nothing Then
        Dim words() As String = line.Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries)
        If words.Length = 3 Then
            data = New LineData()
            data.Label = words(0)
            data.Value1 = Decimal.Parse(words(1))
            data.Value2 = Decimal.Parse(words(2))
        End If
    End If
    Return Data
End Function

请注意,这是一个基于您提供的示例数据的非常简单的示例。如果不同的行有不同数量的数字参数,那将进一步使逻辑复杂化。Nothing在我的示例中,如果无法读取数据,则该方法返回。此外,如果该行中的最后两个单词不是数字,该方法将引发异常。因此,您需要将其包装在一些额外的异常处理中。

于 2013-02-26T13:47:45.593 回答
0

这可能是您正在寻找的。虽然我个人会创建一个存储类型(平均值、中位数等)、firstvalue 和 secondvalue 的类。

尽管如此,你想要它做的只是将值转储到某种存储中,因此这就足够了。

Dim Values as New List(Of Decimal)

'Use a streamreader to read each line of text
Using reader As StreamReader = New StreamReader(*your text source*)
'Read the line 
Dim linetext as string = reader.ReadLine
Dim myValue as decimal
'Split the line
Dim splitText() = linetext.Split(" ")
'Analyze each section of the line, if its possible to parse the value as a decimal then add it to the list of values to be stored.
For Each txt in splitText
If Decimal.TryParse(txt, myValue) then Values.Add(myValue)
Next
End Using 
于 2013-02-26T12:18:05.630 回答