Thanks Roger. This is perfect. Ken
-----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Roger Hui Sent: Tuesday, November 11, 2008 5:15 PM To: Programming forum Subject: Re: [Jprogramming] Extracting values from log strings The last line of "tab" has been garbled by accident or by some "helpful" program along the way. In any case: NB. y: log file lines, may be terminated by CRLF or LF NB. x: required attributes tab=: 4 : 0 y=. y-.CR av=. a: -.~ (y e. '&',LF) <;._2 y NB. att=value strings k=. av i.&> '=' a=. k {.&.> av NB. attribute names v=. (1+k) }.&.> av NB. values b=. a e. x NB. attributes of interest n=. (y e. LF) +/;._2 y='=' NB. # attributes on each line m=. (;n{.&.>1) +/;.1 b NB. # attributes of interest in each line x , (m,&#x)$(b#v) ((m#(#x)*i.#m)+x i. b#a)}(m*&#x)$a: ) The last line should read: x , (m , & # x ) $ ... ----- Original Message ----- From: Roger Hui <[EMAIL PROTECTED]> Date: Tuesday, November 11, 2008 14:10 Subject: Re: [Jprogramming] Extracting values from log strings To: Programming forum <[email protected]> > t=: 0 : 0 > att0=4010&att7=2457&att2=439 > att3=902&att2=413&att5=4262&att4=4967 > att5=4040&att1=465 > > att4=2733 > att3=2397&att2=1104&att6=2625 > ) > > NB. y: log file lines, may be terminated by CRLF or LF > NB. x: required attributes > tab=: 4 : 0 > y=. y-.CR > av=. a: -.~ (y e. '&',LF) <;._2 y NB. att=value strings > k=. av i.&> '=' > a=. k {.&.> > av NB. attribute names > v=. (1+k) }.&.> > av NB. values > b=. a e. > x NB. attributes of interest > n=. (y e. LF) +/;._2 > y='=' NB. # > attributes on each line > m=. (;n{.&.>1) +/;.1 > b NB. # attributes of interest in each line > x , (m,)$(b#v) ((m#(#x)*i.#m)+x i. b#a)}(m*)$a: > ) > > (<;._1 ' att0 att1 att2') tab t > +----+----+----+ > |att0|att1|att2| > +----+----+----+ > |4010| |439 | > +----+----+----+ > | | |413 | > +----+----+----+ > | |465 | | > +----+----+----+ > | | | | > +----+----+----+ > | | |1104| > +----+----+----+ > > If lines are separated by CRLF or LF rather than terminated, > you have to append a LF to the right argument of tab . > > > > ----- Original Message ----- > From: "Lettow, Kenneth" <[EMAIL PROTECTED]> > Date: Tuesday, November 11, 2008 12:38 > Subject: [Jprogramming] Extracting values from log strings > To: [email protected] > > > I have some log file data stored as long strings of > (attribute=value)> pairs. Here is some dummy data representing > a few lines: > > ------------------------------------------------------------ > > > att0=4010&att7=2457&att2=439 > > > att3=902&att2=413&att5=4262&att4=4967 > > att5=4040&att1=465 > > > > > att4=2733 > > att3=2397&att2=1104&att6=2625 > > ------------------------------------------------------------ > > Each of the (attribute=value) pairs is delimited by "&", and the > > attribute name is separated from the value by an "=" character. > > > > Each of the lines can have an arbitrary number of attributes, > > includinglines with no attributes. > > > > Values can be strings or numbers, necessitating boxed results. > > > > Attributes can appear in any order on a line (i.e. att0 can occur > > before/after att1 etc.). > > > > What I want to do is to take the values from certain > attributes > > and put > > them into a table, i.e. take the values of att0, att1 and att2 > > in dummy > > data (above) and create the following table. > > > > +----+----+----+ > > |att0|att1|att2| > > +----+----+----+ > > |4010| |439 | > > +----+----+----+ > > | | |413 | > > +----+----+----+ > > | |465 | | > > +----+----+----+ > > | | | | > > +----+----+----+ > > | | |1104| > > +----+----+----+ > > > > Below is what I have so far. I cannot figure out the last steps. > > > > NB. Verb to generate dummy data > > genattdat=: 3 : 0 > > NB. y = #lines testdata to generate > > numlines=. y > > > > NB. Maximum attributes per line (for demo purposes) > > MAXATTS=. 8 > > MAXVAL=. 5000 NB. Max dummy value > > > > NB. Create attribute list > > attrlist=: 'att'&, each cut":i.MAXATTS > > > > res=. '' > > for. i.>:y do. > > randatts=. (~.(? (?#attrlist) $ > > (#attrlist))){attrlist randvals=. ":each > > <"0 ((#randatts) ?MAXVAL) > > res=. res,(<}:;;<"1 > > randatts,.(<'='),.randvals,.(<'&')) end. > > ]res=. >}.res > > ) > > > > NB. Generate 5 lines of dummy data > > ]testdata=: genattdat 5 > > att5=1830 > > att2=3371&att6=3188&att3=536&att4=1176&att7=1832 > > att0=1732&att7=4102&att3=797 > > att6=4278&att1=3480&att2=4333&att5=2933&att7=1160 > > att1=808&att2=2321&att4=3544&att5=3794 > > > > NB. Parsed attributes > > > > ]atts=: deb each >{."1 each > each <"1 '='&cut > > each '&'&cut"1 > > testdata > > +----+----+----+----+----+ > > |att5| | | > > | | > > +----+----+----+----+----+ > > |att2|att6|att3|att4|att7| > > +----+----+----+----+----+ > > |att0|att7|att3| | | > > +----+----+----+----+----+ > > |att6|att1|att2|att5|att7| > > +----+----+----+----+----+ > > |att1|att2|att4|att5| | > > +----+----+----+----+----+ > > > > NB. Parsed values > > ]vals=: deb each >,@}.@|: each > each <"1 > > '='&cut each '&'&cut"1 > > testdata > > +----+----+----+----+----+ > > |1830| | | > > | | > > +----+----+----+----+----+ > > |3371|3188|536 |1176|1832| > > +----+----+----+----+----+ > > |1732|4102|797 | | | > > +----+----+----+----+----+ > > |4278|3480|4333|2933|1160| > > +----+----+----+----+----+ > > |808 |2321|3544|3794| | > > +----+----+----+----+----+ > > > > NB. Attributes I want to keep and put into a table > > > > ]keepattributes=: 'att'&, each cut":i.3 > > +----+----+----+ > > |att0|att1|att2| > > +----+----+----+ > > > > NB. mask of attributes to keep > > > > ]keepmsk=: (#keepattributes)>keepattributes i. atts > > 0 0 0 0 0 > > 1 0 0 0 0 > > 1 0 0 0 0 > > 0 1 1 0 0 > > 1 1 0 0 0 > > > > NB. attributes to keep > > ]keepatts=: keepmsk #"1 1 atts > > +----+----+ > > | | | > > +----+----+ > > |att2| | > > +----+----+ > > |att0| | > > +----+----+ > > |att1|att2| > > +----+----+ > > |att1|att2| > > +----+----+ > > > > NB. values to keep > > ]keepvals=: keepmsk #"1 1 vals > > +----+----+ > > | | | > > +----+----+ > > |3371| | > > +----+----+ > > |1732| | > > +----+----+ > > |3480|4333| > > +----+----+ > > |808 |2321| > > +----+----+ > > > > It is here that I get stuck. How do I get keepatts and > > keepvals to this > > form? > > > > NB. Hand built result > > +----+----+----+ > > |att0|att1|att2| > > +----+----+----+ > > | | | | > > +----+----+----+ > > | | |3371| > > +----+----+----+ > > |1732| | | > > +----+----+----+ > > | |3480|4333| > > +----+----+----+ > > | |808 |2321| > > +----+----+----+ ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
