字符频率计数(Microsoft Word)
Scott正在寻找一种获取文档中所有字符“频率计数”的方法。他想知道每个字符(ASCII代码9到255)出现了多少次。可以使用“查找并替换”来确定单个字符的数量(只需搜索有问题的字符,然后将其替换为自己),但是这种方法充其量是乏味的,如果您需要在247进行一次,则最好。不同的字符代码以获得所需的信息。
必须使用宏来完成这样的任务,但是有几种方法可以实现它。一种方法是编写一个快速宏,该宏将遍历Character集合的每个成员,检查每个成员,并将该字符分配给多个计数器之一。
Sub CountChars1() Dim iCount(0 To 255) As Integer Dim i As Integer Dim vCharacter As Variant Dim sTemp As String ' Initialize the array For i = 0 To 255 iCount(i) = 0 Next i ' Fill the array For Each oCharacter In ActiveDocument.Characters i = Asc(oCharacter) iCount(i) = iCount(i) + 1 Next ' Add document for results Documents.Add Selection.TypeText Text:="ASCII Character Count" & vbCrLf ' Only output codes 9 through 255 For i = 9 To 255 sTemp = Chr(i) If i < 32 Then sTemp = Trim(Str(i)) sTemp = sTemp & Chr(9) & Trim(Str(iCount(i))) sTemp = sTemp & vbCrLf Selection.TypeText Text:=sTemp Next i End Sub
宏使用iCount数组累加每个字符代码的计数,然后创建一个新文档以输出结果。 (结果文档可以采用任何所需的格式。)
对于相对短的文档(最多几页),此方法可以很好地工作。当文档变长时,宏变慢。为什么?
因为某种原因,使用Characters集合会花费大量时间。如果宏对于您的文档运行太慢,那么您将需要对其进行一些更改,使其仅与字符串一起使用。
Sub CountChars2() Dim iCount(0 To 255) As Long Dim i As Long Dim j as integer Dim lCharCount As Long Dim sDoc As String Dim sTemp As String ' Initialize the array For i = 0 To 255 iCount(i) = 0 Next i ' Assign document to a huge string lCharCount = ActiveDocument.Characters.Count sDoc = ActiveDocument.Range(0, lCharCount) ' Fill the array For i = 1 to Len(sDoc) j = Asc(Mid(sDoc, i, 1)) iCount(j) = iCount(j) + 1 Next ' Add document for results Documents.Add Selection.TypeText Text:="ASCII Character Count" & vbCrLf ' Only output codes 9 through 255 For i = 9 To 255 sTemp = Chr(i) If i < 32 Then sTemp = Trim(Str(i)) sTemp = sTemp & Chr(9) & Trim(Str(iCount(i))) sTemp = sTemp & vbCrLf Selection.TypeText Text:=sTemp Next i End Sub
请注意,此版本的宏将整个文档填充为单个字符串sDoc。然后,宏可以非常快速地处理该字符串。 (在我的系统上处理一个635页的文档只花费了大约30秒的时间。)由于此版本适用于更长的文档,因此请注意,某些变量类型已更改,以反映更多计数的可能性。
注意:
如果您想知道如何使用此页面(或_WordTips_网站上的任何其他页面)中描述的宏,我准备了一个包含有用信息的特殊页面。
_WordTips_是您进行经济有效的Microsoft Word培训的来源。
(Microsoft Word是世界上最流行的文字处理软件。)本技巧(411)适用于Microsoft Word 97、2000、2002和2003。您可以为Word(Word 2007)的功能区界面找到此技巧的版本。和更高版本)在这里: