[comp.lang.icon] Handy Icon Procedure for Reports

tenaglia@mis.mcw.edu (Chris Tenaglia - 257-8765) (03/15/90)

Dear Icon Group :

I am including a handy procedure that can reformat strings. It's
fairly intuitive as far as usage is concerned. My implementaion
is pretty plain. Perhaps someone has a more elegant expression
that makes use of string scanning or co-expressions? Enjoy!

########################################################################
#                                                                      #
# THIS PROCEDURE IS A HANDY STRING REMAPPER/FORMATTER AND IT'S         #
# VERY HANDY FOR REPORT GENERATION. USAGE PATCH(VARIABLE,MASK)         #
# WHERE VARIABLE IS A STRING AND MASK IS A STRING. MASK CONTAINS       #
# A SEQUENCE THAT TRANSFORMS VARIABLE. THE # CHARACTER MEANS TO        #
# COPY THE CHARACTER AT THAT POSITION. THE $ CHARACTER MEANS TO        #
# DELETE THE CURRENT CHARACTER AT THAT POSITION. ANY OTHER BYTES       #
# GET INSERTED INTO THE VARIABLE AT THEIR RESPECTIVE POSITIONS.        #
# EXAMPLES : patch("12/03/89","##$##$##") returns 120389               #
#            patch("120389","##/##/19##") returns 12/03/1989           #
#            patch("12/03/1989","##$")    returns 12                   #
#                                                                      #
########################################################################
procedure patch(var,mask)
  text := ""
  i    := 0
  every mark := !mask do
    {
    case mark of
      {
      "#" : {
            text ||:= var[(i+:=1)]
            next
            }
      "$" : {
            i +:= 1
            next
            }
  default : text ||:= mark
      }
    }
  return text
  end

#############################################################
Chris Tenaglia (System Manager)
Medical College of Wisconsin
8701 W. Watertown Plank Rd.
Milwaukee, WI 53226
(414)257-8765
tenaglia@mis.mcw.edu