2015-01-28 2 views
0

현재 테스트 결과를 표시하는 텍스트 파일 speedtest.txt를 읽습니다. 파일이 꽤 길어서 한 줄의 정보만으로도 텍스트 블록에 표시 할 수 있습니다. 코드는 다음과텍스트 파일의 특정 줄의 처음 36 개만 표시합니다.

For Each line As String In File.ReadLines("c:\temp\logs\speedtest.txt") 
     If line.Contains("MB/s") Or line.Contains("KB/s") Then 
      TextBlock1.Text &= line & vbNewLine & vbCrLf 
     End If 
    Next line 

처럼 보인다 그리고 결과는 다음과 같다 :

2015년 1월 26일 8시 39분 45초 (1.29 MB/s의) - 'test10.zip'저장 [11,536,384분의 11,536,384 ]

하지만이 필요로하는 모든이입니다 :

2015년 1월 26일 8시 39분 45초 (1.29 MB/s)의

어떤 도움이나 좋은 것입니다 조언한다. 모두에게 감사드립니다.

편집 :

감사합니다! 나는 내가 필요한 것을 얻었습니다. 새 코드는 다음과 같습니다.

'Search speedtest.txt for Speed Test Results and update to textblock1 
    For Each line As String In File.ReadLines("c:\temp\logs\speedtest.txt") 
     If line.Contains("MB/s") Or line.Contains("KB/s") And line.Contains("saved") Then 
      Dim speed As String = Microsoft.VisualBasic.Left(line, 34) 
      TextBlock1.Text &= speed & vbNewLine & vbCrLf 
      Exit For 
     End If 
    Next 
+0

는')'최초의 인덱스를 찾아, 만에 하나 있다는 등까지의 문자를 가지고있다. 그렇지 않으면'123,456.78 MB/s'와 같이 크기가 큰 경우 잘릴 것입니다. – Rachel

답변

0

VB에는 문자열의 왼쪽 부분을 반환하는 LEFT라는 함수가 있습니다.

Left(line, 36) 
+0

질문에서 @ Rachel의 의견을 참조하십시오. 포스터는 다운로드 속도가 가변적 일 수 있기 때문에 실제로 36자를 원하지 않습니다. –

+0

이것은 내가 필요로하는대로 작동했습니다. 라인의 정면은 결코 34 문자보다 커지지 않습니다. 나는 스피드 테스트 루프와 라인이 글쓰기를 계속하는 버그를 고칠 때까지 Exit For를 끝내야했다. 편집 된 코드는 이제 내 원본 게시물에 있습니다. – LordDaius

1

그런 다음

Dim myText = "2015-01-26 08:39:45 (1.29 MB/s) - 'test10.zip' saved [11536384/11536384]" 
myText.Substring(0, myText.IndexOf(" - ")) 

출력이됩니다 문자열 얻을, 첫째, 하이픈의 인덱스를 찾을 수 있습니다 : -

2015-01-26 08:39:45 (1.29 MB/s) 
0

난 당신이 당신이 가지고 있기 때문에 정규 표현식을 사용할 필요가 있다고 생각을 당신이 원하는 것을 생각하고 또한 36 자의 한계가 있기 때문에 출력하기 전에 계산해야 할 일이 있습니다.

regex 사용법은이 부분을 참조하십시오. 나는 당신이 실제로 무엇을 원하는 같은데요

http://www.codemag.com/Article/0305041

+0

OP가 정규식 구문을 모를 수 있으므로 예제가 도움이 될 것입니다. –

관련 문제