2

マシンからシステムのハイパーターミナルに連続して単語の文字列が送られてきます。これには、USB-シリアルケーブルを使用しています。その文字列の特定の単語の後に来る値のいくつかを見つけて保存したいと思います。

スレッドと分割の概念を使用してそれを行いましたが、マシンの要件と操作によっては、実行時に適切に機能しません。

キャプチャしたい値は、特定の単語に由来します。その単語をスキップして、値を保存したいだけです。どうやってするの?

その文字列の例を以下に示します。

平均 49 50
SD 500 10
最小 100 5
最大 50 45.56

49これで、たとえばandの値を保存して50から、破棄したいだけですMEAN。その後、廃棄SDして保管50010ます。

4

2 に答える 2

1

オブジェクトを使用してStreamReader、一度に 1 行ずつストリームを読み取ることができます。次に、String.Splitメソッドを使用して行を簡単に解析できます。次のように、読み取られるデータを表す 1 つ以上のクラスを作成することをお勧めします。

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私の例では、データを読み取ることができない場合、メソッドは戻ります。また、行の最後の 2 つの単語が数値でない場合、メソッドは例外をスローします。したがって、追加の例外処理でラップする必要があります。

于 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 に答える