小弟不才,想用Instr函数检测看指定的文本中有没有关键词,但是总是不能成功。以下是我的源代码: 
For OrderNum = 0 To List1.ListCount - 1    Keyword(OrderNum) = List1.List(OrderNum)    KWFound = InStr(Doc, Keyword(OrderNum))   If KWFound > 0 Then    Msgbox "挂马网页!!"    End IfNext OrderNum
OrderNum、Keyword、KWFound为3个变量,Doc为先前加载的文件内容
经过分析发现Msgbox可以显示在此过程中所有Keyword,并且Doc格式也是正确的。
请大虾指点。

解决方案 »

  1.   

    Doc是不是字符串呢?如果是文档的话,不能这样匹配……
      

  2.   

    Doc是用Open语句从文本中读出来的,并且如果不这样用,不用For循环,直接用KWFound = InStr(Doc, "直接写关键词")就没问题了
      

  3.   

    你doc是怎么得来的?代码贴出来
      

  4.   

    Dim str_UTF8 As String
    Dim str_Unicode As String
    Open "C:\WINDOWS\a.txt" For Input As 1
    str_UTF8 = StrConv(InputB$(LOF(1), 1), vbUnicode)        '读到字符串
    str_UTF8 = Right(str_UTF8, Len(str_UTF8) - 1)             '第一个字符是格式标志,无实际意义,去掉
    Close 1
    Module_UTF8.m_bIsNt = True
    str_Unicode = UTF8_Decode(str_UTF8) '转换为Unicode
    Doc = str_Unicode
      

  5.   

    将DOC中的内容先读到一个字符串中,再能这个字符串进行操作就可以了
      

  6.   

    KWFound = InStr(Doc, Keyword(OrderNum),vbTextCompare)
      

  7.   

    str_Unicode = UTF8_Decode(str_UTF8) '转换为Unicode
    多余.
      

  8.   

    加载的那个文件不是Unicode,需要把编码转换
      

  9.   

    str_UTF8 = StrConv(InputB$(LOF(1), 1), vbUnicode) 
    这里不是转换了吗.
    看看str_UTF8和str_Unicode是什么吧.
      

  10.   

    或者也可以是这样,哪位大虾给一个匹配LISTBOX里面信息的源码也行啊
      

  11.   


    首先排除 DOC 的问题。去掉循环,用你说可行的方式检查是否能够从同一个 DOC 查到关键字。再检查你的列表项值与你 "直接写关键词" 是否一致。你循环代码虽然啰嗦了一点,逻辑功能应该是没错的。For OrderNum = 0 To List1.ListCount - 1   If InStr(Doc, List1.List(OrderNum)) Then
          Msgbox "挂马网页!!"
          Exit For
       End IfNext OrderNum
      

  12.   

    KWFound = InStr(Doc, Keyword(OrderNum)) 这一行设个断点看看,检查下各个变量的值建议楼主把文件上传下,大家试下就知道了,谁知道你文件是什么格式的。
      

  13.   

    这是个任意变化的文件,里面有一个不变:编码始终为UTF-8
      

  14.   

    设置断点后发现其他变量都正常,只有Keyword错误。原本是想用枚举的,但是这里只会一个值,自然会报错。哪位大虾帮忙想想再搞个For循环嵌套好了。
      

  15.   

    Dim Keyword As String......    Keyword = List1.List(OrderNum)    KWFound = InStr(Doc, Keyword)
      

  16.   

    已经证明了是变量KeyWord的问题,应该给KeyWord建个数组,然后再用For循环的。不过现在用时钟事件代替。感谢各位大大的关心。