Copy link to clipboard
Copied
Hi all, I have a catalogue of products of which I have a script to convert to other currencies.
I have prices for both RRP and TRADE.
The RRP price I need to round up to the nearest whole number.
The TRADE I need to leave with 2 decimal places.
For example:
RRP: £8.00
TRADE: £3.25
My polish conversion rate is x 5.7 which gives me:
RRP: 45.60zł - (My script is converting to 46zł which is correct.)
TRADE: 18.53zł - (This is correct with the decimal places.)
I add in the zł by finding and replacing the £
My question is, is there a script that will accommodate both of these price conversions?
At the moment I can only do one or the other.
Apologies if my explanation isn't clear
> this is the format for the entire catalogue...
Ok, finally. Do this:
1. Create two character styles, one called Trade, the other, RRP. They need no formatting.
2. Apply the RRP style to RRP: £\K[\d,\.]+
3. Apply the Trade style to TRADE: £\K[\d,\.]+
You can apply these styles using the GREP tab of the Find/Change window.
Then you can use the price adjuster script.
I think I know what's wrong. The pound symbol is outside the character style so you should set the currency symbol to None.
Copy link to clipboard
Copied
Hi @DanielAustinCarat, Let's ask the author @Peter Kahrel. Maybe the script could be pre-configured to do multiple conversions, by-passing the UI?
- Mark
Copy link to clipboard
Copied
Do you have different CharStyles applied to RRP and TRADE prices?
Because last option - TARGET CHARACTER STYLE - will change only values styled by selected CharStyle.
OK, you need to round values.
If you are in a hurry - you could play with GREP - do conversion without decimal places, then add".00zł" - for RRP of course.
Copy link to clipboard
Copied
I don't have a great deal of experience with GREP but any expert advice would be greatly appreciated
Copy link to clipboard
Copied
I don't have a great deal of experience with GREP but any expert advice would be greatly appreciated
By @DanielAustinCarat
Then it would be best if you tell us more about your document - if RRP / TRADE have different CharStyles applied.
If they are in a spearate Paragraphs, or in separate Cells?
Or can you post a screenshot? Frame Edges visible and Show Hidden Characters.
Copy link to clipboard
Copied
Both RRP and TRADE have the same character styles
Copy link to clipboard
Copied
@DanielAustinCarat wrote:
Both RRP and TRADE have the same character styles
Here is a working GREP:
But you need to do it BEFORE "converting" GBP to PLN.
Unless, of course, someone better than me, will "fix" GREP so it will also include "zł".
Same for the TRADE:
Then you can run again @Peter Kahrel's script.
Copy link to clipboard
Copied
Copy link to clipboard
Copied
Hi thank you, this is the format for the entire catalogue...
By @DanielAustinCarat
Then the GREP should work.
I've upated my previous post.
Copy link to clipboard
Copied
The first question, indeed, is how you tell apart the RRP and Trade prices.
Copy link to clipboard
Copied
Hi Peter, the RRP we want to roound up to the nearest whole number.
The TRADE prices we want to leave with the two decimal places, but both prices are using the same conversion of x5.7
Copy link to clipboard
Copied
Hi @DanielAustinCarat, Peter and Robert are asking how the script can differentiate between the RRP and Trade prices. For example, if they are each set in their own character styles, then the script will be able to target them separately, but if not... then that is the first thing to solve.
Copy link to clipboard
Copied
> Both RRP and TRADE have the same character styles
Ok. But the question remains: how can you tell these prices apart. Not by character style, as you say. But I need to know what distinguishes them. Paragraph style? Cell style? Anything at all?
If the prices cannot be distinguished in any way you needn't even start worrying about GREP.
Copy link to clipboard
Copied
> this is the format for the entire catalogue...
Ok, finally. Do this:
1. Create two character styles, one called Trade, the other, RRP. They need no formatting.
2. Apply the RRP style to RRP: £\K[\d,\.]+
3. Apply the Trade style to TRADE: £\K[\d,\.]+
You can apply these styles using the GREP tab of the Find/Change window.
Then you can use the price adjuster script.
Copy link to clipboard
Copied
Hi thank you for this.
So I created a characher style for each RRP and TRADE.
I then used the GREP codes to give the RRP and TRADE their own characer styles.
(attached screenshot)
These both appear to work as when I highlite a price, the character style name changes in the dialogue box.
When I go to run the price adjuster script, using htr attached settings, no conversion happens.
To test I deslected Target Character Style and all prices converted which I know is wrong but can't help thinking i've missed a step....appreciate you adve and help though thank you.
(attached screnshot)
Copy link to clipboard
Copied
Hi thank you for this.
So I created a characher style for each RRP and TRADE.
I then used the GREP codes to give the RRP and TRADE their own characer styles.
(attached screenshot)
These both appear to work as when I highlite a price, the character style name changes in the dialogue box.
When I go to run the price adjuster script, using htr attached settings, no conversion happens.
To test I deslected Target Character Style and all prices converted which I know is wrong but can't help thinking i've missed a step....appreciate you adve and help though thank you.
(attached screnshot)
By @DanielAustinCarat
Maybe because @Peter Kahrel's GREP is not styling £ - but you've selected it in the dialog?
Copy link to clipboard
Copied
Meanwhile Robert suggested more or less the same while I was posting, which is confusing.
Note that Robert's GREP expression to apply style to numbers targets all numbers, nit just RRP and Trade prices. And the GREP doesn't allow for large numbers that contain thousand separators (commas).
Copy link to clipboard
Copied
Meanwhile Robert suggested more or less the same while I was posting, which is confusing.
Note that Robert's GREP expression to apply style to numbers targets all numbers, nit just RRP and Trade prices. And the GREP doesn't allow for large numbers that contain thousand separators (commas).
By @Peter Kahrel
My GREP is similar to yours - but it also styles RRP and TRADE text - your GREP is applying style ONLY to digits. But you are right - I forgot about thousand separator.
Is that a requirement for your script - that ONLY digits should be styled?
Copy link to clipboard
Copied
> Is that a requirement for your script - that ONLY digits should be styled?
Correct. Well, digits, dots, and commas.
Copy link to clipboard
Copied
> When I go to run the price adjuster script, using htr attached settings, no conversion happens.
To troubleshoot, set a colour in the character styles so that you can see exactly where they are applied. Each style a different colour, of course.
Check that the styles were applied correctly, then try the script again.
Copy link to clipboard
Copied
I think I know what's wrong. The pound symbol is outside the character style so you should set the currency symbol to None.
Copy link to clipboard
Copied
Many thank everybody we got there in the end so many thanks for all your help!!!
Copy link to clipboard
Copied
You've all been more than helpful, but I wonder if i could ask just one more thing at all please?
Now that I have classed the RRP with a Character Style and succesffully made my conversion throughout, if i wanted to round up the RRP to from say £69.60 to £69.99 universally how could I do that using the GREP code please?
Copy link to clipboard
Copied
You can't do that with a GREP in the interface (it can't do calculations). You need a separate script for that (it's to be added to the script):
(function () {
app.findGrepPreferences = null;
app.findGrepPreferences.findWhat = '(?<=[£€$])?[\\d,.]+';
app.findGrepPreferences.appliedCharacterStyle =
app.documents[0].characterStyles.item('RRP');
var found = app.documents[0].findGrep();
for (var i = found.length-1; i >= 0; i--) {
s = Math.ceil(found[i].contents.replace(/,/g,''));
s = String(s).replace(/(\d)(?=(\d\d\d)+\b)/g,'$1,');
found[i].contents = s + '.00';
}
}());
Copy link to clipboard
Copied
I think this line:
found[i].contents = s + '.00';
should be:
found[i].contents = s + '.99';