procedure cparse (cline) string cline ="" {prompt="character string"} char delim =" " {prompt="field delimiting character"} int nfields =0 {prompt="number of fields in string"} string field1 ="" {prompt="field 1"} string field2 ="" {prompt="field 2"} string field3 ="" {prompt="field 3"} string field4 ="" {prompt="field 4"} string field5 ="" {prompt="field 5"} string field6 ="" {prompt="field 6"} string field7 ="" {prompt="field 7"} string field8 ="" {prompt="field 8"} string field9 ="" {prompt="field 9"} string field10 ="" {prompt="field 10"} string field11 ="" {prompt="field 11"} string field12 ="" {prompt="field 12"} string field13 ="" {prompt="field 13"} string field14 ="" {prompt="field 14"} string field15 ="" {prompt="field 15"} int nselect =0 {prompt="select field"} string selfield="" {prompt="value of selected field"} # @(#) task cparse Author: R.A. Jansen -- Apr 23 1996 # @(#) # @(#) task to parse a character string into separate (character) fields # @(#) given a field delimiting character (e.g. , :, / ). These # @(#) fields are returned as task parameters. Current limit to the num- # @(#) ber of fields that can be parsed is 15. If there are more than 15 # @(#) fields the field15 will contain the remaining part of the string. # @(#) # @(#) Jun.28 2000 -- Added option to select a specific field by giving # @(#) its field number (useful in loops). RAJ. begin string cstr, sep, f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11 string f12, f13, f14, f15, fsel, cchar, ccharold, ftmp int Nf, NN, Nchar, Nsel # Initialize variables cstr = cline sep = delim Nsel = nselect if ( sep == "" ) { sep = " " } cchar = " " ccharold = cchar ftmp = "" f1 = "" f2 = "" f3 = "" f4 = "" f5 = "" f6 = "" f7 = "" f8 = "" f9 = "" f10 = "" f11 = "" f12 = "" f13 = "" f14 = "" f15 = "" fsel= "" Nchar = strlen(cstr) NN = 1 Nf = 0 while ( NN <= Nchar ) { cchar = substr(cstr,NN,NN) if ( cchar != sep && NN != Nchar ) { ftmp = ftmp//cchar NN += 1 } else if ( cchar == sep && ccharold == sep ) { # Ignore leading and multiple 'separators' (usually ) NN += 1 } else if ( cchar == sep || NN == Nchar ) { if ( NN == Nchar && cchar != sep ) { ftmp = ftmp//cchar } Nf += 1 if ( Nf == 1 ) { f1 = ftmp } if ( Nf == 2 ) { f2 = ftmp } if ( Nf == 3 ) { f3 = ftmp } if ( Nf == 4 ) { f4 = ftmp } if ( Nf == 5 ) { f5 = ftmp } if ( Nf == 6 ) { f6 = ftmp } if ( Nf == 7 ) { f7 = ftmp } if ( Nf == 8 ) { f8 = ftmp } if ( Nf == 9 ) { f9 = ftmp } if ( Nf == 10 ) { f10 = ftmp } if ( Nf == 11 ) { f11 = ftmp } if ( Nf == 12 ) { f12 = ftmp } if ( Nf == 13 ) { f13 = ftmp } if ( Nf == 14 ) { f14 = ftmp } if ( Nf == 15 ) { f15 = ftmp } if ( Nf > 15 ) { f15 = f15//sep//ftmp } if ( Nsel == Nf ) { fsel = ftmp } ftmp = "" NN += 1 } else { # It should be impossible to get here! print ("ERROR: somewhere !") } ccharold = cchar } cline = cstr delim = sep nfields = Nf field1 = f1 field2 = f2 field3 = f3 field4 = f4 field5 = f5 field6 = f6 field7 = f7 field8 = f8 field9 = f9 field10 = f10 field11 = f11 field12 = f12 field13 = f13 field14 = f14 field15 = f15 selfield = fsel end