logo separator

[mkgmap-dev] Need help with Regex Substition

From Felix Hartmann extremecarver at gmail.com on Sun Jun 22 22:10:56 BST 2014

On 22.06.2014 19:02, Steve Ratcliffe wrote:
>
> Hi Felix
>
>> well the regex commands are a bit too difficult to understand for me. So
>> I would need some practical help..
>> So I have the following
>> a)Key="420 m"
>> b)Key="420m"
>> c)Key="420"
>> d)Key="420ft"
>>
>> I want it to return number only in Key3, and number plus uni in Key2.  I
>> assume if no unit is given in value, value is "m"
>>
>> so I would like to end up with
>> a)Key2=420m  and Key3=420
>> b)Key2=420m and Key3=420
>> c)Key2=420m and Key3=420
>> d)Key2=420ft and Key3=128.016
>
> The only supported conversion is m=>ft, I think because our
> contours are always in feet, so I am changing the
> question to match so it can be tested.  We can easily add
> the reverse convertion.
>
okay - I would have thought reverse is also implemented.
> The following will work with the given values:
>
>     Key=* {
>         set key2='${Key|subst:"[ \t]*~>" | subst:"(?<=[0-9]+)$~>m"}';
>         set key3='${Key|subst:"[a-zA-Z \t]+~>"}';
>     }
>
>     key2 ~ '.*m' { set key3='${key3|conv:"m=>ft"}'; }
>
> In words this:
> 1. First remove all spaces and tabs and set key2
> 2. if a digit is at the end of key2, append a 'm'
> 3. remove all letters and spaces from original Key and set as key3
> 4. if key2 ends in 'm', then apply conversion meters to feet on key3
wow - that's complicated. Well thanks I think I can use it and will try 
to understand/decipher how it's written tomorrow..
>
>
> With the attached StyleTester file, I get the results:
>
> WAY 1: Line 0x2, labels=[key2=420m key3=1378, null, null, null], 
> res=24-24 (1/1),(2/2),
>
> WAY 2: Line 0x2, labels=[key2=420m key3=1378, null, null, null], 
> res=24-24 (1/1),(2/2),
>
> WAY 3: Line 0x2, labels=[key2=420m key3=1378, null, null, null], 
> res=24-24 (1/1),(2/2),
>
> WAY 4: Line 0x2, labels=[key2=420ft key3=420 , null, null, null], 
> res=24-24 (1/1),(2/2),
>
> Using regular expressions will probably lead to more problems though.
> It might fail on other strings we havn't considered for example.
>
> Perhaps a units filter that takes two arguments: a default unit when
> none is specified, and the target unit.
>
Well something similar to the maxspeedkmh() would be quite nice and 
easier (yes I know there is length() - but in this case I rather 
intended to use it for ele key.)
I would guess that a filter KEYlengthinmeters() would be similar in code 
to maxspeedkmh() function,

Thanks a lot,
Felix
> ..Steve

-- 
keep on biking and discovering new trails

Felix
openmtbmap.org & www.velomap.org



More information about the mkgmap-dev mailing list