Vb6 阿拉伯语单词搜索工具

Vb6 阿拉伯语单词搜索工具,vb6,Vb6,我想制作一个搜索工具,在阿拉伯语中查找一个特定的单词,我可以只查找该单词,例如: ذ 如果我试图找到单词,代码不仅会找到单词,还会找到单词的一部分。我不想让程序那样做。我想找到“من”这个词和每一个喜欢它的词,并对这个词做一个完整的解释 为了用一个英语例子更清楚地说明问题,如果我在下面的句子中搜索单词“To”,我只希望找到整个单词,而不希望包含单词“To”的单词(如“To”)成为结果的一部分 我想去公共汽车站。像这样的搜索可能会令人沮丧。我通常做的是在搜索字符串的前面和末尾添加一个空格,然后搜索

我想制作一个搜索工具,在阿拉伯语中查找一个特定的单词,我可以只查找该单词,例如:

ذ

如果我试图找到单词,代码不仅会找到单词,还会找到单词的一部分。我不想让程序那样做。我想找到“من”这个词和每一个喜欢它的词,并对这个词做一个完整的解释

为了用一个英语例子更清楚地说明问题,如果我在下面的句子中搜索单词“To”,我只希望找到整个单词,而不希望包含单词“To”的单词(如“To”)成为结果的一部分


我想去公共汽车站。

像这样的搜索可能会令人沮丧。我通常做的是在搜索字符串的前面和末尾添加一个空格,然后搜索SearchString

所以。。。我想去公共汽车站。4.我想乘公共汽车去。然后我就去寻找。这种方法的问题是标点符号可能会引起问题。例如,如果您想搜索总线,您可以使用:

我想去公共汽车站。搜索巴士。这将找不到,因为单词bus后面有标点符号

我鼓励您使用正则表达式来实现此功能。VB6没有内置正则表达式,但您可以使用Microsoft VBScript正则表达式功能来实现这一点。请查看此页面以帮助您开始:

根据您的评论进行编辑

您有以下代码行:

pos = InStr(start_at, txtBody.Text, target)
尝试将该行更改为:

pos = InStr(start_at, " " & txtBody.Text & " ", " " & target & " ", vbBinaryCompare)

通过在代码中添加空格,实际上是在检查spacetargetspace。因此,您不会错过txtBody.Text开头或结尾的潜在匹配,此处添加的空格仅用于比较目的。通过添加vbBinaryCompare,InStr现在将执行区分大小写的搜索。

执行此操作的唯一彻底方法是使用InStr函数,然后检查下一个字符是否为标点符号字符、换行符或单词是否位于字符串末尾,例如

Option Explicit

Private Declare Function GetStringTypeW Lib "Kernel32.dll" ( _
    ByVal dwInfoType As Long, _
    ByVal lpSrcStr As Long, _
    ByVal cchSrc As Long, _
    ByRef lpCharType As Integer _
) As Long

Private Const CT_CTYPE1                     As Long = &H1

Private Const C1_UPPER                      As Long = &H1     ' Uppercase
Private Const C1_LOWER                      As Long = &H2     ' Lowercase
Private Const C1_DIGIT                      As Long = &H4     ' Decimal digits
Private Const C1_SPACE                      As Long = &H8     ' Space characters
Private Const C1_PUNCT                      As Long = &H10    ' Punctuation
Private Const C1_CNTRL                      As Long = &H20    ' Control characters
Private Const C1_BLANK                      As Long = &H40    ' Blank characters
Private Const C1_XDIGIT                     As Long = &H80    ' Hexadecimal digits
Private Const C1_ALPHA                      As Long = &H100   ' Any linguistic character: alphabetical, syllabary, or ideographic
Private Const C1_DEFINED                    As Long = &H200   ' A defined character, but not one of the other C1_* types

Function FindFullWord(ByVal in_lStartPos As Long, ByRef in_sText As String, ByRef in_sSearch As String, Optional ByVal in_eCompareMethod As VbCompareMethod = vbBinaryCompare) As Long

    Dim nLenText    As Long
    Dim nLenSearch  As Long
    Dim sNextChar   As String
    Dim iCharType   As Integer

    FindFullWord = InStr(in_lStartPos, in_sText, in_sSearch, in_eCompareMethod)

    ' Did we find the search string in the text?
    If (FindFullWord > 0) Then

        ' Save the length of the text.
        nLenText = Len(in_sText)
        nLenSearch = Len(in_sSearch)

        Do

            ' Does this position mean that the search  is the end of the string?
            If (FindFullWord + nLenSearch - 1) = nLenText Then
                ' If so, we can exit now - there are no following characters.
                Exit Function
            End If

            ' Look at the next character.
            sNextChar = Mid$(in_sText, FindFullWord + nLenSearch, 1)

            ' Is this next char a space, punctuation character, or a blank?
            If (GetStringTypeW(CT_CTYPE1, StrPtr(sNextChar), 1, iCharType)) Then
                If (iCharType And C1_SPACE) = C1_SPACE Then
                    Exit Function
                ElseIf (iCharType And C1_PUNCT) = C1_PUNCT Then
                    Exit Function
                ElseIf (iCharType And C1_BLANK) = C1_BLANK Then
                    Exit Function
                End If
            End If

            ' Find the position of the search string in the text.
            FindFullWord = InStr(FindFullWord + nLenSearch, in_sText, in_sSearch, in_eCompareMethod)

        Loop Until FindFullWord = 0

    End If

End Function
我最初开始对每个字符进行测试,这些字符可以跟在一个单词后面,并且不会是这个单词的一部分,但是代码开始变得很长。当然,我对阿拉伯语一无所知。所以我想知道是否有一个标准的方法来找出一个字符的一般类型,而不考虑语言。碰巧的是,有


GetStringTypeW方法记录在Win32文档中,基本上可以检索字符串中所有字符的信息。在我的例子中,我只看一段文本中搜索词后面的字符。从字符串中返回值的变量iCharType是一个位字段,它包含多个值,或者一起使用。我正在使用AND运算符来分离我感兴趣的值。

我试图重写这个问题,以使其更有意义。然而,我被最后一句话卡住了。你能重写一下吗?解释一下你的意思,每个词都喜欢它,把整个词都写下来?此外,由于听起来您似乎已经尝试编写代码,请您发布显示问题的最小数量的VB代码,以及一些用于测试的示例文本。在做任何事情之前,我应该说非常感谢您的关注和重视,我指的是“发送”,以及文本中的每一个字。关于英语示例:to go to当我在文本中搜索Goto时,它也会找到Toward,因为Toward一词包含关于我使用的代码的to,代码如下:谢谢你的回答。。但是你的回答不符合我的问题。。我再说一遍,我想找到的单词不是单词的一部分,比如朝向……我使用以下代码:Option Explicit Private TargetPosition As Integer“find the text”。Private Sub cmdFind_单击FindText 1 End Sub Private Sub FindTextByVal start_at As Integer Dim pos As Integer Dim target As String target=txtTarget.Text pos=InStrstart_at,txtBody.Text,target如果pos>0,则“我们找到了它”。TargetPosition=pos txtBody.SelStart=TargetPosition-1 txtBody.SelI修改了我的答案,希望它能解决您的问题。