最好的Windows脚本工具

时间:2016-03-13 18:39:23

标签: performance vba scripting ms-word windows-scripting

我有一个简单的任务,拿一个文本文件并复制文本文件中的每个单词。因此,如果文本文件是“我喜欢煎饼”,我的输出需要是“我爱吃煎饼煎饼”

我尝试过使用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代码以加快这个过程吗?

1 个答案:

答案 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毫秒。