2013-02-26 1 views
2

시스템에서 하이퍼 터미널로 오는 단어가 연속적으로 표시됩니다. 여기에 USB 케이블을 사용하고 있습니다. 그 문자열에서 특정 단어 뒤에 나오는 값들을 찾아서 저장하고 싶습니다.VB.NET : 라인의 특정 단어 다음에 단어를 찾아서 저장하는 방법

스레드와 분할 개념을 사용하여 작업을 수행했지만 컴퓨터의 요구 사항과 작동에 따라 런타임에 제대로 작동하지 않습니다.

캡처하려는 값은 특정 단어에서 비롯됩니다. 나는 그 단어들을 건너 뛰고 단지 값들을 저장하고 싶다. 그것을하는 방법? 난 그냥 예를 들어, 값을 저장하려면이에서

 
MEAN 49 50 
SD 500 10 
MIN 100 5 
MAX 50 45.56 

:

나는 아래에 해당 문자열의 예를 준 4950 인 경우 MEAN을 버립니다. 그런 다음 SD을 버리고 50010 등을 저장하십시오.

+0

'instr'을 사용하여 다른 문자열에서 문자열의 시작을 찾을 수 있습니다. 그것과 당신이 찾고있는 문자열의 길이를 사용하면 숫자 값을 찾을 수 있습니다. 당신이 쉼표를 참조 지점으로 검색 할 수 있다면 나는 쉼표를 구분하는 것이 좋습니다. – Pezzzz

+0

[Regex.Match (...)] (http://msdn.microsoft.com/en-us/library/)를 사용할 수 있습니다. twcw2f1c.aspx) 및 숫자 필터. – faceman

답변

0

귀하가 찾고있는 것일 수 있습니다. 개인적으로 유형 (평균, 중간 값 등), 1 값 및 2 값을 저장하는 클래스를 만들지 만.

소리에 의해, 당신이 원하는 것은 일종의 저장 장치에 값을 덤프하는 것이기 때문에 충분합니다.

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 
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을 반환합니다. 또한 행의 마지막 두 단어가 숫자가 아닌 경우이 메서드는 예외를 throw합니다. 따라서 몇 가지 추가 예외 처리에서이 코드를 래핑해야합니다.

관련 문제