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