home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.cs.arizona.edu
/
ftp.cs.arizona.edu.tar
/
ftp.cs.arizona.edu
/
icon
/
historic
/
v941.tgz
/
icon.v941src.tar
/
icon.v941src
/
ipl
/
progs
/
setmerge.icn
< prev
next >
Wrap
Text File
|
2000-07-29
|
2KB
|
71 lines
############################################################################
#
# File: setmerge.icn
#
# Subject: Program to combine sets of text items
#
# Author: Gregg M. Townsend
#
# Date: May 31, 1994
#
############################################################################
#
# This file is in the public domain.
#
############################################################################
#
# Setmerge combines sets of items according to the specified operators.
# Sets are read from files, one entry per line. Operation is from left
# to right without any precedence rules. After all operations are
# complete the resulting set is sorted and written to standard output.
#
# Usage: setmerge file [[op] file]...
#
# Operations:
# + add contents to set
# - subtract contents from set
# * intersect contents with set
#
# Note that operators must be separate command options, and that some
# shells my require some of them to be quoted.
#
# Example 1: combine files, sorting and eliminating duplicates:
#
# setmerge file1 + file2 + file3 + file4
#
# Example 2: print lines common to three files
#
# setmerge file1 '*' file2 '*' file3
#
# Example 3: print lines in file1 or file2 but not in file3
#
# setmerge file1 + file2 - file3
#
############################################################################
procedure main(args)
local items, a, op, f, s
items := set()
op := "+"
every a := !args do {
if *a = 1 & any('+-*', a) then {
op := a
}
else {
f := open(a) | stop("can't open ", a)
case op of {
"+": every insert(items, !f)
"-": every delete(items, !f)
"*": {
s := set()
every insert(s, member(items, !f))
items := s
}
}
}
}
every write(!sort(items))
end