Re: [xsl] Question on translate() function

Subject: Re: [xsl] Question on translate() function
From: "Mailing Lists Mail daktapaal@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 26 Sep 2017 01:44:36 -0000
I also have another question..
I want to replace '[()''+\-*$=]' with the character + a #
like
if(a+b+(c - d) * $x = 3*x) then do funct() else do exit()

should become

if#(#a#+#b#+#(#c# -# d#)# #*# #$#x = 3#*#x#)# then do funct#(# #)#
else do exit#(#)#

which means, if I have a string, and i find the following characters:
'[()''+\-*$=]'
then i should surround each of these characters with # .. x becomes
#x# where x = one of  '[()''+\-*$=]'

i can do one boring way of creating a variable

var rep = replace($str, '+' , '#+#');
var rep = replace ( $rep, '-', '#-#')
var rep = replace ( $rep, '$', '#$#')

so on and so forth for all the chars i have in my list..( which are limited )

or I can store all the chars in a variable as sequence, and then
somehow loop them and replace them in the string... any good way ?


dak


On Mon, Sep 25, 2017 at 9:34 PM, Mailing Lists Mail
daktapaal@xxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> Great..
> I have seen expressions like :
> translate($xxx, 'ABCDE','x');
> which is to say, replace ABCDE with x .. this also works fine
> is this not valid?
>
> or should we do ..translate($xxx, 'ABCDE','xxxxx');
>
> dak
>
> On Mon, Sep 25, 2017 at 6:00 PM, Liam R. E. Quin liam@xxxxxx
> <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>> On Mon, 2017-09-25 at 17:42 +0000, Syd Bauman s.bauman@xxxxxxxxxxxxxxxx
>> wrote:
>>>
>>> I have always presumed that translate() is faster than replace().[1]
>>
>> I'd say, use whichever is clearer, braver, more noble. Take pity on
>> your future self trying to understand replace("[{]\\\$[()][}]", "#",
>> "g")...
>>
>> As for which is faster, it depends not only (as the inestimable Dr Kay
>> has expressed) upon the quality of the optimizer but for some
>> implementations the quality of the underlying code. Unfortunately there
>> are enough differences between XSLT and Perl regular expressions that
>> using libpcre has become difficult, as that library gets extensive
>> optimization outside of our universe and then returns through alternate
>> dimensions to dazzle us :)
>>
>>> But I can't help it, sometimes -- I'd really like to know if
>>> translate() is significantly more efficient (computationally) than
>>> replace() or not.
>>
>> There's no inherent reason why
>>   translate("abc", "ddd")
>> should be faster or slower than
>>   replace("[abc]", "d", "g")
>> once the parsing has been done; however, the work to recognize these
>> two cases may be easier for translate().
>>
>> There are implementations that are faster than a freshly-oiled cow at
>> recognizing regular expression character classes, so if your input
>> string is, say, 100MBytes long, you might well be able to measure the
>> difference. In ASCII days there were implementations that used a bit
>> mask, and then you compare each input character (or four characters at
>> a time, say, using a wider mask) with the or'd mask and only do the
>> more expensive computation when needed. So an implementation using a
>> heavily optimized regular expression library might go faster with
>> replace() than translate(), because the XSLT/XPath/XQuery implementor
>> of translate() might not have done that sort of optimization.
>>
>> Liam
>>
>> --
>> Liam Quin, W3C, http://www.w3.org/People/Quin/
>> Staff contact for Verifiable Claims WG, SVG WG, XQuery WG
>>
>> Web slave for http://www.fromoldbooks.org/

Current Thread