我有一个简单的任务,拿一个文本文件并复制文本文件中的每个单词。因此,如果文本文件是“我喜欢煎饼”,我的输出需要是“我爱吃煎饼煎饼”
我尝试过使用Word 2013和VBA。这是我的代码:
Sub HLSConvert()
Set docNew = Documents.Add
Set origDoc = Documents.Open("c:\test\AllWords.txt")
Dim r As String
For Each sentence In ActiveDocument.StoryRanges
For Each W In sentence.Words
r = W + W
docNew.Content.InsertAfter r
DoEvents
Next
Next
End Sub
不幸的是,VBA真的很慢。我正在处理的文本文件长达一千页,复制一个大文件需要2个小时的VBA。所以我希望有人可以提供帮助。有没有更好的工具\语言可以用来完成这个?或者有人可以建议改进我的VBA代码以加快这个过程吗?
答案 0 :(得分:1)
有一个基于RegEx的代码用于单词重复的示例。它不需要安装MS Office,您可以将其用作WSH VB脚本,保存到.VBS文件中。它也适用于VBA环境。
Sub WordsDuplicate(strSource, strTarget)
' strSource - full path to the source text file
' strTarget - full path to the target text file
With CreateObject("Scripting.FileSystemObject")
If .FileExists(strSource) Then
' read source text file
With .OpenTextFile(strSource, 1, False, 0) ' -2 - System default, -1 - Unicode, 0 - ASCII
strCont = ""
If Not .AtEndOfStream Then strCont = .ReadAll
.Close
End With
' duplicate
With CreateObject("VBScript.RegExp")
.Global = True
.MultiLine = True
.IgnoreCase = True
.Pattern = "(\b\w+\b)"
strRes = .Replace(strCont, "$1 $1")
End With
' write target text file
With .OpenTextFile(strTarget, 2, True, 0)
.Write (strRes)
.Close
End With
t3 = timer
End If
End With
End Sub
我以包含572614个单词,文件大小为3.11 MB,ANSI字符集的文本为样本。结果时序为:读取源文本文件180毫秒,复制320毫秒,写入目标文本文件39毫秒。总共约540毫秒。