Dictionary 读取txt文件并将所有单词放入字典

Dictionary 读取txt文件并将所有单词放入字典,dictionary,vbscript,wsh,Dictionary,Vbscript,Wsh,到目前为止,我一直在努力创建一个VBScript,它可以读取一个.txt文档,然后将每个单词作为键输入 如果让我们说“Hello”在文本中出现10次,我希望值为10。 不管是一封大信还是一封小信。比如“你好/你好”或者如果有的话!在单词的末尾 例如: “曾经有一个小孩,这个小孩在这个世界上是孤独的!” 这里我希望输出是 Key: Value: Once: 1 There: 1 Was: 1 A: 1 Little: 1 Child: 2 The:

到目前为止,我一直在努力创建一个VBScript,它可以读取一个.txt文档,然后将每个单词作为键输入

如果让我们说“Hello”在文本中出现10次,我希望值为10。 不管是一封大信还是一封小信。比如“你好/你好”或者如果有的话!在单词的末尾

例如:

“曾经有一个小孩,这个小孩在这个世界上是孤独的!”

这里我希望输出是

Key:   Value:
Once:    1
There:   1
Was:     1
A:       1
Little:  1
Child:   2
The:     1
等等

现在我被困在零件上,想把它和键和值一起放到字典里。 如果这个词出现不止一次,我想检查这个词是否存在,如果不存在,创建键并给出值1。如果已经存在,则增加该值

Const ForReading = 1

Dim strcontents
Dim objfile
dim Place
Dim dictPerson

Set  dictPerson  = CreateObject("Scripting.Dictionary")

Place = InputBox("File Place","Place:",     "C:\text.txt") 

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(Place, ForReading)
strContents = objFile.ReadAll
objFile.Close

i = i + 1

arrLines = Split(strContents, " ")

For Each strLine in arrLines
  'WScript.Echo (strline) 
Next
编辑:

这是我最后的密码

我给了我一个“错误”的输出

这看起来对吗

输出的第一行是孔线,而不是前两个字? (第一行写着Egon Olsen)在我的输出中也写着Egon Olson

输出:

Microsoft(R)Windows脚本主机版本5.8 版权所有(C)微软公司1996-2001。阿勒·瑞蒂希德·福布斯

 Egon:  2
 Olsen
 Jeg:   1
 har:   6
 Han:   1
 var:   3
 aldeles:   1
 svensker:  1
 han:   1
 bare:  1
 almindelig:    1
 fuld
 Benny: 1
 Frandsen
 Skide: 1
 godt:  1
 Egon!
 Egon:  1
 fanden.
 Den:   1
 go':   1
 nok:   1
 Egon!
 Hva':  1
 faan:  2
 sgu:   1
 fyldt: 1
 femmer!
 så:    1
 rolig: 1
 nu:    3
 Egon
 "Gode: 1
 gamle: 1
 Franz.
 Hva´:  1
 taget: 1
 røven: 1
 dig:   2
 igen:  1
 ?
 Så:    1
 Keld:  1
 jo:    3
 ment
 Du:    1
 smælderfed:    1
 mand!
 Yvonne:    1
 Jensen
 Der:   1
 kommer:    2
 et:    1
 tidspunkt: 1
 enhver:    1
 kvindes:   1
 liv:   1
 hvor:  1
 hun:   1
 må:    1
 blomstre:  1
 folde: 1
 sig:   1
 ud.
 Nej.:  1
 siger: 1
 Egon.
 Ja,:   1
 Vorherre:  1
 bevares.
 Du:    1
 lovede:    1
 skulle:    1
 millionærer.
 Meget: 1
 du:    1
 budt:  1
 gennem:    1
 alle:  1
 disse: 1
 år.
 ..og:  1
 når:   1
 vores: 1
 alder: 1
      kun:  1
 resten:    1
 livet: 1
 tilbage.
 :  1


 ***** script completed - exit code: 0 *****
这只是代码中的一部分,因为有363个单词。 但是,正如您所能看到的,它为Hello和Hello制作了一个键(示例)?甚至是同一个词

而且它不会移除。,?!从一些词? +在第一行,它把Egon Olsen变成了一个词?我做错了什么


如果有人想要文本,我也可以上传,但它是丹麦语的……)

拆分
每行,删除尾随标点,然后将单词添加到词典中:

Set re = New RegExp
re.Pattern = "^(.*)[.:,;!?´-]+$"

For Each strLine In arrLines
  For Each word In Split(strLine)
    word = re.Replace(word, "$1")
    dictPerson(word) = dictPerson(word) + 1
  Next
Next
将字典的
CompareMode
属性设置为
vbTextCompare
会使键不区分大小写:

Set dictPerson = CreateObject("Scripting.Dictionary")
dictPerson.CompareMode = vbTextCompare
作为旁注,我建议在循环中使用
ReadLine
,而不是
ReadAll
Split

Set objFile = objFSO.OpenTextFile(Place, ForReading)
Do Until objFile.AtEndOfStream
  strLine = objFile.ReadLine
  ...
Loop
objFile.Close
这样,您一次只处理一行,而不是一次读取整个内容,对于大型文件来说,这可能会非常消耗内存

编辑:要显示结果,您可以(例如)执行以下操作:

list = ""
For Each key In dictPerson.Keys
  list = list & key & ":" & vbTab & dictPerson(key) & vbNewLine
Next
WScript.Echo list

非常感谢您的帮助,当我现在运行代码时,我得到了。*****脚本已完成-退出代码:0****我缺少什么?我的头烧坏了p您或我的代码中没有任何内容可以生成这样的输出。你是如何运行脚本的?此外,退出代码0通常意味着执行成功完成。有什么事情没有像预期的那样起作用吗?如果是:你得到了什么样的结果,它与你期望的结果有什么不同?好的,我将向您介绍整个情况:创建一个脚本,可以计算文本文件中单词的出现次数应用程序必须接收一个参数,该参数就是要计算的文件:text file=test.txt程序的示例输出:嗯:3次Fishmonger:4次Hello:2次Me:119次基本上,我想让它计算文本文件中每个单词被提及的数量。提前谢谢我在VbsEdit(Cscript)中运行代码如果您想要输出,您需要添加实际创建输出的代码。你发布的代码没有这个。你能给我一个你的意思的例子吗?我的根本不起作用!!我是一个傻瓜,所以请容忍我
list = ""
For Each key In dictPerson.Keys
  list = list & key & ":" & vbTab & dictPerson(key) & vbNewLine
Next
WScript.Echo list