Поиск файла на основе слов текстового файла - PullRequest
0 голосов
/ 11 сентября 2011

Я хочу искать несколько слов одновременно в текстовом файле.

Например, думаю, что я хочу искать эти 3 слова: Маджид, суперпользователь, устройство

Обычно я должен искатьдля них один за другим, и я не могу искать их всех одновременно.Поэтому я хочу одновременно искать эти слова в текстовом файле.

Я хочу ввести эти 3 слова в текстовый файл, по одному слову в строке.Давайте назовем это SearchText.Теперь у меня есть целевой текст, в котором я хочу найти эти слова.Давайте назовем его TargetText.

Я хочу сказать приложению или чему-то похожему, чтобы получить слова из SearchText и найти их в TargetText и выделить их или дать мне результат поиска.

Надеюсь, я 'м ясно.Так может кто-нибудь помочь мне?

1 Ответ

1 голос
/ 11 сентября 2011

Ты чист. Я думаю, что лучшим вариантом будет Regex.
Попробуйте это:

Option Explicit
Dim oFso        : Set oFso = CreateObject("Scripting.FileSystemObject")
Dim srcPath     : SrcPath = oFso.GetParentFolderName(WScript.ScriptFullName)
Dim sWordList   : sWordList = ofso.OpenTextFile(oFso.BuildPath(srcPath, "search.txt")).ReadAll()
Dim sTargFile   : sTargFile = ofso.OpenTextFile(oFso.BuildPath(srcPath, "target.txt")).ReadAll()
Dim strWords    : strWords = Join(Split(sWordList, vbCrLf), "|")
Dim oReg        : Set oReg = New RegExp
Dim oDict       : Set oDict = CreateObject("Scripting.Dictionary") 'for found words
oDict.CompareMode = vbTextCompare 'case insensitive

With oReg
    .Global = True
    .IgnoreCase = True
    .Pattern = "("& strWords &")" ' (word1|word2|word3|etc..)
    'if the words contain some special chars for regex, you may need to escape with \ char
    'see the information below: http://goo.gl/cqGVp
    Dim collFND : Set collFND = oReg.Execute(sTargFile)
    Dim Fnd
    'WScript.Echo String(50, "-")
    For Each Fnd In collFND
        With Fnd
            'WScript.Echo "Word : "& .Value, ", Position: ("& .FirstIndex &","& .Length &")"
            oDict(.Value) = ""
        End With
    Next
    Set collFND = Nothing
    'WScript.Echo String(50, "-"), vbCrLf, "Higlighted Output:", oReg.Replace(sTargFile, "[$1]")
    ofso.CreateTextFile(oFso.BuildPath(srcPath, "foundwords.txt"),True).Write(Join(oDict.Keys, vbCrLf)) 'found words saved
End With
...