[Jprogramming] Apply at start/lengths pairs

Danil Osipchuk danil.osipchuk at gmail.com
Sun Jun 11 11:19:07 UTC 2017


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. at E.) y

CE =. (xmlTagCls >x) I. at 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>

)


More information about the Programming mailing list