[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