<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">I see what you mean. I wasn't aware of
the slowness of ++ <br>
So your solution is just fine (? asking): you've just made a
special takewhile that includes the matching predicate and handled
the input like a pipeline. <br>
It reminds a Unix command line, in the case: awk
'/<bug>/,NR==0' | awk 'NR==1,/<\/bug>/'<br>
<br>
<br>
On 07/16/12 12:10, C K Kashyap wrote:<br>
</div>
<blockquote
cite="mid:CAGdT1govMW+mimmMQ-XCEjzdWcx1UZRf+W11PdmuEMBAFSA01w@mail.gmail.com"
type="cite">Thanks Carlos - you can import Text.Regex.Posix to get
(=~)
<div>Is there a way to avoid the (++) in your implementation? It
has a linear time overhead.</div>
<div><br>
</div>
<div>Regards,</div>
<div>Kashyap</div>
<div><br>
<div class="gmail_quote">
On Mon, Jul 16, 2012 at 1:36 AM, Carlos J. G. Duarte <span
dir="ltr"><<a moz-do-not-send="true"
href="mailto:carlos.j.g.duarte@gmail.com" target="_blank">carlos.j.g.duarte@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<div>Looks good to me, but I'm just a beginner!<br>
I used the isInfixOf from Data.List instead of =~ to run
your example because the later wasn't working on my
instalation. <br>
<br>
I've made a slightly variant using the break function:<br>
<br>
import Data.List
<div class="im"><br>
startTag = "<bug>"<br>
endTag = "</bug>"<br>
<br>
</div>
main = interact process<br>
<br>
process = unlines . extractSection startTag endTag .
lines<br>
extractSection start stop xs =<br>
let (ls,rs) = break (isInfixOf stop) $ dropWhile (not
. isInfixOf start) xs<br>
in ls ++ take 1 rs
<div>
<div class="h5"><br>
<br>
<br>
On 07/15/12 13:08, C K Kashyap wrote:<br>
</div>
</div>
</div>
<blockquote type="cite">
<div>
<div class="h5">Hi,
<div>I've written a small haskell program to extract
a section from a file between start and end
markers. For example, if I have a file such as
below - </div>
<div>
<div>a</div>
<div>b</div>
<div>c</div>
<div> <bug></div>
<div>d</div>
<div>e</div>
<div>f</div>
<div> </bug></div>
<div>g</div>
<div>h</div>
<div>i</div>
</div>
<div><br>
</div>
<div>I'd like to extract the contents between
<bug> and </bug> (including the
markers). </div>
<div><br>
</div>
<div>
<pre style="text-align:left;font-size:13px;margin-bottom:0px;margin-top:0px"><span>startTag</span> <span>=</span> <span style="color:rgb(54,99,84)">"<bug>"</span>
<span>endTag</span> <span>=</span> <span style="color:rgb(54,99,84)">"</bug>"</span>
<span>process</span> <span>=</span> <span style="color:rgb(51,51,51)">unlines</span> <span style="color:rgb(51,51,51)">.</span> <span style="color:rgb(51,51,51)">specialTakeWhile</span> <span>(</span><span style="color:rgb(51,51,51)">f</span> <span style="color:rgb(51,51,51)">endTag</span><span>)</span> <span style="color:rgb(51,51,51)">.</span> <span style="color:rgb(51,51,51)">dropWhile</span> <span>(</span><span style="color:rgb(51,51,51)">f</span> <span style="color:rgb(51,51,51)">startTag</span><span>)</span> <span style="color:rgb(51,51,51)">.</span> <span style="color:rgb(51,51,51)">lines</span>
<span style="color:rgb(57,116,96)">where</span> <span style="color:rgb(51,51,51)">f</span> <span style="color:rgb(51,51,51)">t</span> <span style="color:rgb(51,51,51)">x</span> <span>=</span> <span style="color:rgb(51,51,51)">not</span> <span>(</span><span style="color:rgb(51,51,51)">x</span> <span style="color:rgb(51,51,51)">=~</span> <span style="color:rgb(51,51,51)">t</span><span>)</span>
<span style="color:rgb(51,51,51)">specialTakeWhile</span> <span>::</span> <span>(</span><span style="color:rgb(51,51,51)">a</span> <span>-></span> <span style="color:rgb(79,67,113)">Bool</span><span>)</span> <span>-></span> <span>[</span><span style="color:rgb(51,51,51)">a</span><span>]</span> <span>-></span> <span>[</span><span style="color:rgb(51,51,51)">a</span><span>]</span>
<span style="color:rgb(51,51,51)">specialTakeWhile</span> <span style="color:rgb(51,51,51)">ff</span> <span style="color:rgb(79,67,113)">[]</span> <span>=</span> <span style="color:rgb(79,67,113)">[]</span>
<span style="color:rgb(51,51,51)">specialTakeWhile</span> <span style="color:rgb(51,51,51)">ff</span> <span>(</span><span style="color:rgb(51,51,51)">x</span><span>:</span><span style="color:rgb(51,51,51)">xs</span><span>)</span> <span>=</span> <span style="color:rgb(57,116,96)">if</span> <span style="color:rgb(51,51,51)">ff</span> <span style="color:rgb(51,51,51)">x</span> <span style="color:rgb(57,116,96)">then</span> <span style="color:rgb(51,51,51)">x</span><span>:</span><span>(</span><span style="color:rgb(51,51,51)">specialTakeWhile</span> <span style="color:rgb(51,51,51)">ff</span> <span style="color:rgb(51,51,51)">xs</span><span>) <span style="color:rgb(57,116,96)">else</span> <span>[</span><span style="color:rgb(51,51,51)">x</span><span>]</span></span></pre>
<pre style="text-align:left;font-size:13px;margin-bottom:0px;margin-top:0px"><span>
</span></pre>
<pre style="text-align:left;font-size:13px;margin-bottom:0px;margin-top:0px"><span>
</span></pre>
<pre style="text-align:left;font-size:13px;margin-bottom:0px;margin-top:0px"><span>It'll be great if I could get some feedback on this.</span></pre>
<pre style="text-align:left;font-size:13px;margin-bottom:0px;margin-top:0px"><span>
</span></pre>
<pre style="text-align:left;font-size:13px;margin-bottom:0px;margin-top:0px"><span>Regards,</span></pre>
<pre style="text-align:left;font-size:13px;margin-bottom:0px;margin-top:0px"><span>Kashyap</span></pre>
</div>
<br>
<fieldset></fieldset>
<br>
</div>
</div>
<pre>_______________________________________________
Beginners mailing list
<a moz-do-not-send="true" href="mailto:Beginners@haskell.org" target="_blank">Beginners@haskell.org</a>
<a moz-do-not-send="true" href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a>
</pre>
</blockquote>
<br>
<br>
</div>
<br>
_______________________________________________<br>
Beginners mailing list<br>
<a moz-do-not-send="true"
href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a moz-do-not-send="true"
href="http://www.haskell.org/mailman/listinfo/beginners"
target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
<br>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
<br>
</body>
</html>