home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
ckscripts
/
wordcount
< prev
next >
Wrap
Text File
|
2020-01-01
|
3KB
|
93 lines
#!/usr/local/bin/wermit +
;
; From: Dat Thuc Nguyen
; Date: 27 May 1999
; Subject: Incoming Script: Word Frequency
; URL: http://www.smalltickle.com
;
; WORD FREQUENCY COUNTING IS THE EXCEL OF SCRIPTING
; LANGUAGES SUCH AS AWK AND PERL. WITH OOP, C-KERMIT ALSO
; HANDLES THAT TRIVIAL TASK COMFORTABLY.
; THE FOLLOWING SCRIPT DEFINES AND USES THE CLASS WORDS
; TO COUNT THE OCCURRENCES OF UNIQUE WORDS OF A REGULAR
; TEXT FILE.
; THE CLASS WORDS SHIELDS THE IMPLEMENTATION DETAILS AND
; PROMOTES REUSE, THE FLAGSHIP OF OOP.
;
; Invoke with argument 1 = Name of text file.
; If no name is given, it is prompted for.
;
; Requires C-Kermit 7.0 Beta.07 or later.
;**************************************************
;* DEFINITION OF THE CLASS WORDS *
;**************************************************
define Words {
; \%1 name of the new Words
_assign Words::\%1.words \x02
_define \%1 {
if define \m(Words::\%1) {
Words::\%1 \v(macro) {\%2} {\%3} {\%4}
if FAIL END \v(return)
return \v(return)
} else {
END -9999 doesNotUnderstand
}
}
}
;**************************************************
;* PUBLIC USAGE INTERFACE OF THE CLASS WORDS *
;**************************************************
define Words::add {
local \%f
assign \%f \find(\x02\%2\x02, \m(Words::\%1.words))
if \%f {
_increment Words::\%1.count[\%2]
} else {
_assign Words::\%1.words \m(Words::\%1.words)\%2\x02
_assign Words::\%1.count[\%2] 1
}
}
define Words::frequency {
local \&a[] \%i
for \%i 1 \fsplit(\m(Words::\%1.words),&a,\x02) 1 {
echo \&a[\%i] => \m(Words::\%1.count[\&a[\%i]])
}
}
define Words::destroy {
local \&a[] \%i
for \%i 1 \fsplit(\m(Words::\%1.words),&a,\x02) 1 {
_define Words::\%1.count[\&a[\%i]]
}
_define Words::\%1.words
_define \%1
}
; AND HERE IS THE WORD FREQUENCY COUNTING SCRIPT word_cnt.ksc
while not defined \%1 {
ask \%1 { Filename: }
}
open read \%1
if fail exit 1 Can't open \%1
words abc ; create a dictionary abc
local \%l \%i
while true {
read \%l ; read a line
if fail break ; until EOF
if > \flength(\%l) 0 { ; skip empty line
declare \&a[] ; allocate a dynamic array
for \%i 1 \fsplit(\%l,&a) 1 { ; split line on nonalphanumeric
abc add \flower(\&a[\%i]) ; add word in lower case to dictionary
}
}
}
abc frequency ; display each words and its count
abc destroy ; get rid of the dictionary
exit