Karakter Frequency Count

April 15  by Eliza

Scott er på utkikk etter en måte å få en "frekvens teller" av alle karakterene i et dokument. Han vil gjerne vite hvor mange ganger hvert tegn, ASCII-koder 9 gjennom 255, forekomme. Det er mulig å bruke Finn og erstatt å bestemme telling av enkelttegn (bare søk etter en karakter i spørsmålet, og deretter erstatte det med seg selv), men en slik tilnærming ville være kjedelig, i beste fall, hvis du trengte å gjøre det for 247 forskjellige tegnkoder for å få den ønskede informasjonen.

En slik oppgave må gjøres med en makro, men det er flere måter å nærme seg det. En måte er å skrive en rask makro som vil gå gjennom hvert medlem av Character samling, undersøke hver, og tildele det tegnet til en av en rekke tellere.

Sub CountChars1 ()
Dim iCount (0 til 255) As Integer
Dim i As Integer
Dim vCharacter Som Variant
Dim STEMP As String

"Initial matrisen
For i = 0 til 255
iCount (i) = 0
Neste jeg

"Fyll matrisen
For Hver oCharacter I ActiveDocument.Characters
i = Asc (oCharacter)
iCount (i) = iCount (i) + 1
Neste

"Legg dokument for resultater
Documents.Add
Selection.TypeText Tekst: = "ASCII Character Count" & vbCrLf

'Bare utgangskoder 9 gjennom 255
For i = 9 til 255
STEMP = Chr (i)
Hvis i <32 Da STEMP = Trim (Str (i))
STEMP = STEMP & Chr (9) og Trim (Str (iCount (i)))
STEMP = STEMP & vbCrLf
Selection.TypeText Tekst: = STEMP
Neste jeg
End Sub

Makroen bruker iCount array å samle de tellinger av hvert tegn kode, og deretter et nytt dokument er opprettet for å sende ut resultatene. (The resultater dokument kan formateres på noen måte ønsket.)

Denne tilnærmingen kan fungere godt for relativt korte dokumenter, opp til et par sider. Når dokumentet blir lengre, blir den makrolangsommere. Hvorfor? Fordi det tar mye tid å bruke tegn samling for noen grunn. Hvis makroen kjører for sakte for dokumentene, vil du ønsker å endre det litt, slik at det fungerer utelukkende med strenger.

Sub CountChars2 ()
Dim iCount (0 til 255) så lenge
Dim jeg så lenge
Dim j som heltall
Dim lCharCount Som Long
Dim sDoc As String
Dim STEMP As String

"Initial matrisen
For i = 0 til 255
iCount (i) = 0
Neste jeg

'Tildele dokument til et stort streng
lCharCount = ActiveDocument.Characters.Count
sDoc = ActiveDocument.Range (0, lCharCount)

"Fyll matrisen
For i = 1 til Len (sDoc)
j = Asc (Mid (sDoc, i, 1))
iCount (j) = iCount (j) + 1
Neste

"Legg dokument for resultater
Documents.Add
Selection.TypeText Tekst: = "ASCII Character Count" & vbCrLf

'Bare utgangskoder 9 gjennom 255
For i = 9 til 255
STEMP = Chr (i)
Hvis i <32 Da STEMP = Trim (Str (i))
STEMP = STEMP & Chr (9) og Trim (Str (iCount (i)))
STEMP = STEMP & vbCrLf
Selection.TypeText Tekst: = STEMP
Neste jeg
End Sub

Legg merke til at denne versjonen av makroen stapper hele dokumentet inn i en enkelt streng, sDoc. Denne streng kan da behandles meget, meget raskt av makro. (En 635-siders dokument tok bare ca 30 sekunder på å behandle, på mitt system.) Fordi denne versjonen er laget for å fungere med lengre dokumenter, bemerk også at noen av de variable typen har blitt endret for å gjenspeile sannsynligheten for større teller.

WordTips er din kilde for kostnadseffektiv Microsoft Word trening. (Microsoft Word er den mest populære tekstbehandlingsprogrammet i verden.) Dette tipset (112) gjelder for Microsoft Word 2007 og 2010. Du kan finne en versjon av dette tipset for den eldre menygrensesnittet i Word her: Character frekvens teller.