home *** CD-ROM | disk | FTP | other *** search
- ############################################################################
- #
- # File: zipsort.icn
- #
- # Subject: Program to sort mailing labels by ZIP code
- #
- # Author: Ralph E. Griswold
- #
- # Date: June 10, 1988
- #
- ###########################################################################
- #
- # This program sorts labels produced by labels in ascending
- # order of their postal zip codes.
- #
- # Option:
- #
- # The option -d n sets the number of lines per label to n.
- # The default is 9. This value must agree with the value used to
- # format the labels.
- #
- # Zip Codes:
- #
- # The zip code must be the last nonblank string at the
- # end of the label. It must consist of digits but may have an
- # embedded dash for extended zip codes. If a label does not end
- # with a legal zip code, it is placed after all labels with legal
- # zip codes. In such a case, an error messages also is written to
- # standard error output.
- #
- ############################################################################
- #
- # Links: options
- #
- # See also: labels.icn
- #
- ############################################################################
-
- link options
-
- procedure main(args)
- local t, a, label, zip, y, lsize, opts
-
- opts := options(args,"d+")
- lsize := (0 > integer(opts["d"])) | 9
-
- t := table("")
- repeat {
- label := ""
- every 1 to lsize do
- label ||:= read() || "\n" | break break
- label ? {
- while tab(upto(' ')) do tab(many(' '))
- zip := tab(upto('-') | 0)
- zip := integer(zip) | write(&errout,"*** illegal zipcode: ",label)
- }
- t[zip] ||:= label
- }
-
- a := sort(t,3)
- while get(a) do
- writes(get(a))
-
- end
-