[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: RE: How to filter characters from a string?

Subject: Re: RE: How to filter characters from a string?
From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Date: Sat, 30 Mar 2002 07:51:29 -0800 (PST)
p controller
It seems that my first timing results were not too accurate.

I said that the str-filter()-based algorithm overtook the double
translate at string length of around 45K, actually this happens much
earlier -- at a little more than string length of 20K.

The table bellow contains more detailed results:

                      90K              45K         20K         10K
------------------------------------------------------------------------
str-filter:           1.247           0.648       0.286       0.140

double translate:    11.578           1.334       0.259       0.063



Cheers,
Dimitre Novatchev. 
--- Dimitre Novatchev <dnovatchev@xxxxxxxxx> wrote:
> Greg Faron <gfaron at integretechpub dot com> wrote:
> 
> > At 02:11 PM 3/29/2002, you wrote:
> > >Write a translate that removes all the characters that are allowed
> in
> > >base64. The result of this translate is a string containing all
> the
> > >characters that aren't allowed, i.e. the ones you want to remove. 
> > > Use this as the second parameter for another translate():
> > >
> > >translate($x, translate($x, 'ABCDE...abcde...12345...', ''), '')
> > 
> >    Oooh, I like that one.  This way the second translate() is 
> > customized for every argument, but easily coded (and maintained). 
> Do
> 
> > you know of any way to benchmark Microsoft XSLT operations so that
> I 
> > could see which is faster?  I suspect that the double translate()
> is 
> > better than the template solution posted earlier.
> 
> Mike's solution is fantastic -- extremely nice and elegant!
> 
> On the other side, double translate means two passes over the string.
> Even if Mike's algorithm is coded in Assembler, it will be slower
> than
> a one-pass algorithm for fairly big strings.
> 
> I checked this statement and it is true. Compared to the str-filter()
> (a DVC variant) the double translate is lightningly faster for very
> short strings, but its execution time grows very steeply when the
> input
> string is doubled.
> 
> So, at length of around 45000 characters the str-filter() - based
> transformation overtook the double translate. The results in seconds
> were:
> 
> str-filter()       double-translate()
> -----------        ------------------
>   1.095                 1.308
> 
> 
> This was measured on a P4 1.7GHz 256MB RAM with MSXML4.
> 
> For strings with this length or longer, the str-filter() function
> will
> be much faster.
> 
> For example the same two transformations on a 90000 long string
> resulted in:
> 
> str-filter()       double-translate()
> -----------        ------------------
>   2.114                 11.562
> 
> 
> Bellow is the text of the DVC variant of str-filter().
> 
> str-filterDVC.xsl:
> -----------------
> <xsl:stylesheet version="1.0" 
>  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> >
> 
> <xsl:template name="str-filter">
>   <xsl:param name="pStr"/>
>   <xsl:param name="pController" select="/.."/>
>   <xsl:param name="pElName" select="'str'"/>
>     
>   <xsl:if test="not($pController)">
>     <xsl:message terminate="yes">[str-filter]Error: pController not
> specified.</xsl:message>
>   </xsl:if>
>     
>   <xsl:element name="{$pElName}">
>     <xsl:call-template name="_str-filter">
>       <xsl:with-param name="pStr" select="$pStr"/>
>       <xsl:with-param name="pController" select="$pController"/>
>     </xsl:call-template>
>   </xsl:element>
> 
> </xsl:template>    
> 
> <xsl:template name="_str-filter">
>   <xsl:param name="pStr" />
>   <xsl:param name="pController" select="/.."/>
>     
>   <xsl:variable name="vLen" select="string-length($pStr)"/>
> 
>   <xsl:choose>
>     <xsl:when test="$vLen = 1">
> 	  
>       <xsl:variable name="vHolds">
> 	<xsl:apply-templates select="$pController">
> 	  <xsl:with-param name="arg1" select="$pStr"/>
> 	</xsl:apply-templates>
>       </xsl:variable>
> 		    
>       <xsl:if test="string($vHolds)">
> 	<xsl:copy-of select="$pStr"/>
>       </xsl:if>
>     </xsl:when>
>     <xsl:when test="$vLen > 1">
>       <xsl:variable name="vHalf" select="floor($vLen div 2)"/>
> 		    
>       <xsl:call-template name="_str-filter">
> 	<xsl:with-param name="pStr" 
>                         select="substring($pStr, 1, $vHalf)"/>
> 	 <xsl:with-param name="pController" select="$pController"/>
>       </xsl:call-template>
> 		    
>       <xsl:call-template name="_str-filter">
> 	<xsl:with-param name="pStr" 
>                         select="substring($pStr, $vHalf + 1)"/>
> 	<xsl:with-param name="pController" select="$pController"/>
>      </xsl:call-template>
>     </xsl:when>
>   </xsl:choose>
> </xsl:template>
> 
> </xsl:stylesheet>
> 
> 
> I think this is just an example of the potential of useful
> functionality and efficiency, offered by the functional programming
> library FXSL.
> 
> Cheers,
> Dimitre Novatchev.
> 
> 
> 
> 
> 
> 
> 
> __________________________________________________
> Do You Yahoo!?
> Yahoo! Greetings - send holiday greetings for Easter, Passover
> http://greetings.yahoo.com/
> 


__________________________________________________
Do You Yahoo!?
Yahoo! Greetings - send holiday greetings for Easter, Passover
http://greetings.yahoo.com/

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.