2013-03-20 5 views
1

프로그램에서 이전에 파일에 입력 한 항목을 계산하여 텍스트 파일의 항목 수를 계산하려고합니다.vb.net의 텍스트 파일에서 특정 단어의 출현을 계산하십시오.

이미 파일과 텍스트 상자에서 읽은 텍스트가 있습니다. 문제는 현재 코드가 텍스트 상자의 문자를 계산하는 것이지 원하는 단어가 파일에없는 횟수를 계산하는 것이 아니라는 것입니다.

For Each desiredword As String In txtContentofFile.Text 
     intdesiredword = intdesiredword + 1 
     txtdesiredwordcount.Text = intdesiredword 
Next 

이렇게하면 원하는 단어 수를 계산하는 대신 텍스트 상자의 문자를 계산합니다. 도움말을 요청하기 전에 반복적으로 시도했지만 광범위하게 검색했지만 코드에 무엇이 잘못되었는지 이해하지 못합니다. 제발 도와주세요 :)

답변

0

당신은 Split 기능을 사용할 수 있습니다

C 번호 :

int count = txtContentofFile.Text.Split(desiredword).Length - 1; 

VB.net : 사용

Dim text As String = IO.File.ReadAllText("C:\file.txt") 
Dim wordsToSearch() As String = New String() {"Hello", "World", "foo"} 
Dim words As New List(Of String)() 
Dim findings As Dictionary(Of String, List(Of Integer)) 

'Dividing into words 
words.AddRange(text.Split(New String() {" ", Environment.NewLine()}, StringSplitOptions.RemoveEmptyEntries)) 

findings = SearchWords(words, wordsToSearch) 
Console.WriteLine("Number of 'foo': " & findings("foo").Count) 

기능 :

Dim count As Integer = txtContentofFile.Text.Split(desiredword).Length - 1 
0

이 시도 :

Private Function SearchWords(ByVal allWords As List(Of String), ByVal wordsToSearch() As String) As Dictionary(Of String, List(Of Integer)) 
    Dim dResult As New Dictionary(Of String, List(Of Integer))() 
    Dim i As Integer = 0 

    For Each s As String In wordsToSearch 
     dResult.Add(s, New List(Of Integer)) 

     While i >= 0 AndAlso i < allWords.Count 
      i = allWords.IndexOf(s, i) 
      If i >= 0 Then dResult(s).Add(i) 
      i += 1 
     End While 
    Next 

    Return dResult 
End Function 

당신은뿐만 아니라 Dictionary 쉽게 그룹화 차례 나오는 수 있지만, 파일의 인덱스 위치를해야합니다.

+0

은 자세한 답변을 주셔서 감사를보십시오! 나는 분명히 당신보다 vb.net에서 훨씬 더 나쁘다. 그래서 나는 내 자신의 로터리 코드에서 일하는 것에 기초하여 실제로 뭔가를 얻는 데 어느 정도 시간이 걸릴 것이다. 답변을 어떻게 받아 들여 실제로 텍스트 상자에 표시합니까? txtnumberofdesired1.Text = dResult가 나를 위해 작동하지 않았습니다 –

+0

@ KieranO'mahony 많은 감사입니다. 첫 번째 부분에서의 사용 예를 살펴 보자. 기본적으로, 당신은 함수를 호출 할 곳의 단어와 검색 할 단어를 전달하고, ** 각 ** 단어의 결과를 갖는 사전을 반환합니다. 사용법은 다음과 같습니다.'TextBox1.Text = dResult ("myWord"). Count' – SysDragon

0

이 유형의 상황에서는 정규 표현식을 사용하는 것을 선호합니다. 이해하기가 까다 롭지 만 다른 문자열 조작 기술보다 훨씬 강력하고 일반적으로 빠릅니다.

Dim AllMatchResults As MatchCollection 
Try 
    Dim RegexObj As New Regex(desiredword) 
    AllMatchResults = RegexObj.Matches(txtContentofFile.Text) 
    If AllMatchResults.Count > 0 Then 
     ' Access individual matches using AllMatchResults.Item[] 
    Else 
     ' Match attempt failed 
    End If 
Catch ex As ArgumentException 
    'Syntax error in the regular expression 
End Try 

귀하의 경우에는 AllMatchResults.Count에서 값을 찾고 있습니다.

RegexBuddy과 같은 훌륭한 정규 표현식 도구를 사용하여 표현식을 작성하고 테스트하는 것이 큰 도움이됩니다. (위의 코드는 RegexBuddy에 의해 생성 된!)

-1

는 다음 코드

Function word_frequency(word_ As String, input As String) As Integer 
    Dim ct = 0 
    Try 
     Dim wLEN = word_.Length 
     Do While input.IndexOf(word_) <> -1 
      Dim idx = input.IndexOf(word_) + wLEN 
      ct += 1 
      input = input.Substring(idx) 
     Loop 
    Catch ex As Exception 

    End Try 
    Return ct 
End Function 
+2

이것은 설명이 없으면 유용하지 않습니다. 가능한 유일한 방법이 아니기 때문입니다. –

관련 문제