
Hi all, 1. 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 So I would first need to filter out ft - and then use ${Key|height:"ft=>m"} and set Key2=valueft then filter out the space for a) leave b) intact, and add m to c)... 2. I'm not sure if this is possible. But I would like to remove part of a key. So I have e.g. AT:source:maxspeed= DE:source:maxspeed= ITA:source:maxspeed= and I want to test for source:maxspeed= However I think *:source:maxspeed= is not a working command. So is it possible to simply remove anything before source:maxspeed in the key? -- keep on biking and discovering new trails Felix openmtbmap.org & www.velomap.org

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. 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 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. ..Steve

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
participants (2)
-
Felix Hartmann
-
Steve Ratcliffe