Hi all,

I wonder if there is an idiomatic way to apply a verb using an array of
start and length pairs. This is a recurring pattern when extracting data
from files.
I've tried 3 adverbs (the example at the end), and the first one is
slightly better on big files, but I'm still looking for possible
improvements (the need is to extract selected fields from multi-gigabyte
memory mapped csv/xml files)

'ab' xmlTagContentSL XML

11 1

22 2

34 3

47 4

'ab' <xmlTagDo XML

+-+--+---+----+

|1|20|300|4000|

+-+--+---+----+

(2 2 $ 'ab'xmlTagContentSL XML) <doSL XML

+---+----+

|1 |20 |

+---+----+

|300|4000|

+---+----+


regards,
Danil

doSL =: 1 : '(,."1@[)u;.0]' NB. SL stands for start len pair

NB. doSL =: 1 : '(0|:[:,:[)u;.0]'

NB. doSL =: 1 : '(u;.0~ ,.)~"1'


xmlTagOpn =: '<' ,'>',~]

xmlTagCls =: '</','>',~]


xmlTagContentSL =: 4 : 0

CS =. (xmlTagOpn >x) (#@[ + I.@E.) y

CE =. (xmlTagCls >x) I.@E. y

CS ,. CE-CS

)


xmlTagDo =: 1 : '(xmlTagContentSL (u doSL) ])f.'


XML =: 0 : 0

<data>

<ab>1</ab>

<ab>20</ab>

<ab>300</ab>

<ab>4000</ab>

</data>

)
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to