Извлечь слова из строки и проверить, существуют ли они в базе данных в VB - PullRequest
0 голосов
/ 09 февраля 2012

Я пытаюсь создать веб-метод, чтобы проверить, содержит ли строка слово, которое находится в списке «запрещенных» слов. Этот список будет обновляться время от времени.

<System.Web.Services.WebMethod()> _
Public Function checkword(ByVal Id As String) As String
  Dim returnValue As String = String.Empty
  Dim s As String = Id

  ' Split string based on spaces
  Dim words As String() = s.Split(New Char() {" "c})

  Dim rer As Integer
  Dim word As String
  For Each word In words

    'call class file
    Dim oscar As New webfunctions

    Try
      'call function to check whether this word exists in database or not, 
       rer = oscar.chkword(word)
      If rer > 0 Then
        returnValue = "a"
      Else
        returnValue = "exists"
      End If

    Catch ex As Exception
      returnValue = ex.Message
    End Try
  Next
  Return returnValue
End Function

Что-то не так с этой функцией. Он проверяет первое слово строки. После этого ничего не возвращается. Пожалуйста, какие-либо предложения?

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Вы просматриваете все свои слова и возвращаете результаты только из последнего слова.

Из вашего кода не очень понятно, как это должно работать, потому что вы возвращаете "a", "существует"или сообщение об ошибке.

Этот код выходит из цикла (и функции), если он находит «запрещенное» слово (которое, очевидно, не имеет значения для вас), или если оно выдает ошибку (которая такженепонятно, почему это вызовет ошибку):

For Each word In words

  'call class file
  Dim oscar As New webfunctions

  Try

  'call function to check whether this word exists in database or not, 
  rer = oscar.chkword(word)
  If rer > 0 Then
    returnValue = "a"
  Else
    return "exists"
  End If

  Catch ex As Exception
    return ex.Message
  End Try
Next
Return returnValue

Для вашего комментария и вашего обновленного кода, я, вероятно, переработал бы вашу функцию, чтобы вернуть словарь результатов для каждого слова, поскольку этобыть тем, что вы ищете:

<System.Web.Services.WebMethod()> _
Public Function CheckWords(ByVal sentence As String) As Dictionary(Of String, String)
  Dim wordDictionary As New Dictionary(Of String, String)

  For Each word As String In sentence.Split(" ")
    Dim wordResult As String
    Try
      Dim oscar As New webfunctions
      If oscar.chkword(word) > 0 Then
        wordResult = "a"
      Else
        wordResult = "exists"
      End If
    Catch ex As Exception
      wordResult = ex.Message
    End Try

    If Not wordDictionary.ContainsKey(word) Then
      wordDictionary.Add(word, wordResult)
    End If
  Next

  Return wordDictionary
End Function
0 голосов
/ 09 февраля 2012

я использовал один stringbuilder, и теперь он решен

<System.Web.Services.WebMethod()> _
Public Function checkword(ByVal Id As String) As String
  Dim returnValue As String = String.Empty
  Dim s As String = Id
 dim sb as new stringBuilder
  ' Split string based on spaces
  Dim words As String() = s.Split(New Char() {" "c})

  Dim rer As Integer
  Dim word As String
  For Each word In words

    'call class file
    Dim oscar As New webfunctions

    Try
      'call function to check whether this word exists in database or not, 
       rer = oscar.chkword(word)
      If rer > 0 Then
        returnValue = "a"
      Else
       sb.append(word & ",")
      End If

    Catch ex As Exception
      returnValue = ex.Message
    End Try
  Next
  Return sb.tostring + "exists"
End Function
...