LSTOWN-L Archives

LISTSERV List Owners' Forum

LSTOWN-L

Options: Use Monospaced Font
Show Text Part by Default
Show All Mail Headers

Topic: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Craig Cockburn 02-Sep-1992 0841 <[log in to unmask]>
Wed, 2 Sep 1992 02:56:24 -0500
text/plain (131 lines)
The following program constructs an index of a listserver list using a
listserv monthly logfile as input. The program is written in DCL and
runs on VAX/VMS.
 
To use the program, set up a symbol of the form
 
$ index == "@this_program"
 
and then run it by entering
 
$ index <monthly logfile>
 
The output is put into a file sys$scratch:index.lis
and contains an alphabetic list of all the subjects discussed that
month, and a record of how many replies there were for each subject.
 
The program has been used to index over three years of GAELIC-L logs,
a task which would have been a lot more difficult without the program!
 
There's no support with this program - you need to fix bugs yourself!
 
You'll need to substitute the "GAELIC-L" string in the program with
the name of the list you're indexing.
 
Craig
 
-------- cut here -----
$  on control_y then goto abort
$  file = p1
$ ask_file:
$  if file .eqs. "" then inquire file "File? "
$  if file .eqs. "" then goto ask_file
$  search 'file "subject:"/out=sys$scratch:subj.tmp
$
$  open/read subj sys$scratch:subj.tmp
$  open/write compress sys$scratch:comp.tmp
$
$ read_loop:
$  read/end=close_subj subj line
$  line = f$edit(line,"TRIM")
$  if f$extract(0,1,line) .eqs. ">" then goto read_loop
$
$ remove_subj:
$  line = f$edit(f$extract(9,999,line),"TRIM")
$  if f$edit(f$extract(0,5,line),"UPCASE") .eqs. "SUBJ:" then -
	line = f$edit(f$extract(5,999,line),"TRIM")
$  if f$edit(f$extract(0,8,line),"UPCASE") .eqs. "SUBJECT:" then -
	line = f$edit(f$extract(8,999,line),"TRIM")
$  if f$extract(0,4,line) .eqs. "subj" then goto remove_subj
$
$ quote_loop:
$  quote_posn = f$locate("""",line)
$  if quote_posn .eq. f$length(line) then goto remove_re
$  line = f$extract(0,quote_posn,line)+ f$extract(quote_posn+1,999,line)
$  goto quote_loop
$
$ remove_re:
$  line = f$edit(line,"TRIM")
$  re_string = f$edit(f$extract(0,3,line),"UPCASE")
$  if (re_string .eqs. "RE:") .or. (re_string .eqs. "RE ") -
		.or. (re_string .eqs. "RE.") -
		then line = f$extract(3,9999,line)
$  if (re_string .eqs. "RE:") .or. (re_string .eqs. "RE ") -
		.or. (re_string .eqs. "RE.") -
		then goto remove_re
$
$  line = f$edit(line,"TRIM")
$  if f$extract(0,1,line) .eqs. ":" .or. -
      f$extract(0,1,line) .eqs. "*"
$  then
$    line = f$extract(1,999,line)
$    goto remove_re
$  endif
$
$  line = f$edit(line,"TRIM")
$  line = f$edit(f$extract(0,1,line),"UPCASE")+f$extract(1,9999,line)
$  if f$locate("File: GAELIC-L LOG",line) .eq. f$length(line) then -
	write compress line
$  goto read_loop
$
$ close_subj:
$  close compress
$  close subj
$
$  sort sys$scratch:comp.tmp sys$scratch:sort.lis
$  count = 0
$  previous = ""
$  reply_string = ""
$  open/read subj sys$scratch:sort.lis
$  open/write outfile sys$scratch:index.lis
$
$ read_loop:
$  read/end_of_file=finished subj line
$  if f$edit(line,"UPCASE") .eqs. f$edit(previous,"UPCASE")
$  then
$     count = count + 1
$  else
$     reply_string = " (no replies) "
$     if count .eq. 1 then reply_string = " [ 1 reply   ]"
$     if count .gt. 1 then reply_string = " [ ''count' replies ]"
$     if previous .nes. "" then previous =  f$extract(0,65,previous)
$     pad = 80 - f$length(previous) - f$length(reply_string)
$     reply_string = f$fao("!(#AS)",pad," ") + reply_string
$     outline = previous + reply_string
$     if previous .nes. "" then write outfile outline
$     count = 0
$     previous = line
$  endif
$  goto read_loop
$
$ finished:
$  reply_string = " (no replies) "
$  if count .eq. 1 then reply_string = " [ 1 reply   ]"
$  if count .gt. 1 then reply_string = " [ ''count' replies ]"
$  line =  f$extract(0,65,line)
$  pad = 80 - f$length(line) - f$length(reply_string)
$  reply_string = f$fao("!(#AS)",pad," ") + reply_string
$  write outfile line + reply_string
$  close outfile
$  close subj
$  delete sys$scratch:comp.tmp;*
$  delete sys$scratch:subj.tmp;*
$  delete sys$scratch:sort.lis;*
$  exit
$
$ abort:
$  write sys$output "Program aborted"
$  if f$trnlnm("subj") .nes. "" then close subj
$  if f$trnlnm("comp") .nes. "" then close comp
$  if f$trnlnm("outfile") .nes. "" then close outfile

ATOM RSS1 RSS2