Vb6 阿拉伯语单词搜索工具
我想制作一个搜索工具,在阿拉伯语中查找一个特定的单词,我可以只查找该单词,例如: ذ 如果我试图找到单词,代码不仅会找到单词,还会找到单词的一部分。我不想让程序那样做。我想找到“من”这个词和每一个喜欢它的词,并对这个词做一个完整的解释 为了用一个英语例子更清楚地说明问题,如果我在下面的句子中搜索单词“To”,我只希望找到整个单词,而不希望包含单词“To”的单词(如“To”)成为结果的一部分Vb6 阿拉伯语单词搜索工具,vb6,Vb6,我想制作一个搜索工具,在阿拉伯语中查找一个特定的单词,我可以只查找该单词,例如: ذ 如果我试图找到单词,代码不仅会找到单词,还会找到单词的一部分。我不想让程序那样做。我想找到“من”这个词和每一个喜欢它的词,并对这个词做一个完整的解释 为了用一个英语例子更清楚地说明问题,如果我在下面的句子中搜索单词“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修改了我的答案,希望它能解决您的问题。