Dictionary 读取txt文件并将所有单词放入字典
到目前为止,我一直在努力创建一个VBScript,它可以读取一个.txt文档,然后将每个单词作为键输入 如果让我们说“Hello”在文本中出现10次,我希望值为10。 不管是一封大信还是一封小信。比如“你好/你好”或者如果有的话!在单词的末尾 例如: “曾经有一个小孩,这个小孩在这个世界上是孤独的!” 这里我希望输出是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:
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