From: Mojca M. <moj...@gm...> - 2006-07-14 22:22:43
|
Hello, is there a way to ask gnuplot for a similar behaviour as decimalsign, only for separating thousands? (space, dot, comma, ... might be useful for that) For example, how can I print numbers in the form $1.000,00 $2.000,00 $1.234.567,89 automatically? (If this is trivial, it should be documented better / on more visible places.) Thanks, Mojca |
From: Ethan M. <merritt@u.washington.edu> - 2006-07-14 22:30:22
|
On Friday 14 July 2006 03:22 pm, Mojca Miklavec wrote: > > is there a way to ask gnuplot for a similar behaviour as decimalsign, > only for separating thousands? (space, dot, comma, ... might be > useful for that) help set locale help set decimalsign (or just help decimal) > For example, how can I print numbers in the form > $1.000,00 > $2.000,00 > $1.234.567,89 > automatically? > > (If this is trivial, it should be documented better / on more visible > places.) Can you suggest a more obvious help topic and index entry than "decimalsign"? Perhaps "locale" is not the first word that springs to mind, but it is the standard term for internationalization settings. -- Ethan A Merritt Biomolecular Structure Center University of Washington, Seattle WA |
From: Mojca M. <moj...@gm...> - 2006-07-14 22:50:19
|
On 7/15/06, Ethan Merritt wrote: > On Friday 14 July 2006 03:22 pm, Mojca Miklavec wrote: > > > > is there a way to ask gnuplot for a similar behaviour as decimalsign, > > only for separating thousands? (space, dot, comma, ... might be > > useful for that) > > help set locale > help set decimalsign (or just help decimal) > > > For example, how can I print numbers in the form > > $1.000,00 > > $2.000,00 > > $1.234.567,89 > > automatically? > > > > (If this is trivial, it should be documented better / on more visible > > places.) > > Can you suggest a more obvious help topic and index entry than > "decimalsign"? > > Perhaps "locale" is not the first word that springs to mind, > but it is the standard term for internationalization settings. For decimal sign that's OK, but I want to change the separator for thousand(s) as well. Btw: how can I modify the locale to something other than the default on my computer under windows? I tried set locale "sl" set locale "si" set locale "sl_SI" set locale "sl_SI.utf8" set locale "sl_SI.cp1250" but I always get "Could not find requested locale." set decimal locale works OK (reports comma as a separator). Thanks, Mojca |
From: Mojca M. <moj...@gm...> - 2006-07-15 00:15:43
|
On 7/15/06, Ethan Merritt wrote: > On Friday 14 July 2006 03:49 pm, you wrote: > > > > For example, how can I print numbers in the form > > > > $1.000,00 > > > > $2.000,00 > > > > $1.234.567,89 > > > > > > Perhaps "locale" is not the first word that springs to mind, > > > but it is the standard term for internationalization settings. > > > > For decimal sign that's OK, but I want to change the separator for > > thousand(s) as well. > > That is supposed to be under the control of LC_NUMERIC and LC_MONETARY > in your locale environment. That is ... where? (I know where you can "point-and-click" to change it, but that's not it.) > > Btw: how can I modify the locale to something other than the default > > on my computer under windows? > > Ugh. Windows. I have no idea. Ask Microsoft. > Do you at least have the equivalent of a command "locale -a" > which shows you all the available locale settings? I don't know where. I have many unix-like stuff installed (grep, diff, cp, mv, non-working version of locate, ...) but no "locale". > > I tried > > set locale "sl" > > set locale "si" > > set locale "sl_SI" > > set locale "sl_SI.utf8" > > set locale "sl_SI.cp1250" > > but I always get "Could not find requested locale." > > I don't have sl_SI.<anything> installed on my machines, but > by analogy to the locales I do have installed, I think for me > it would be > > set locale "sl_SI.UTF-8" But that doesn't work either. Any "linux-like" locale doesn't seem to work under Windows. But set decimalsign locale works OK, so I guess that set thousandseparator locale (or whatever) might be doable as well. Do you want to say that the thousand separator is automatically placed under linux if you set the proper locale? Thanks, Mojca |
From: Ethan A M. <merritt@u.washington.edu> - 2006-07-15 03:50:52
|
On Friday 14 July 2006 05:15 pm, you wrote: > > Do you want to say that the thousand separator is automatically placed > under linux if you set the proper locale? Yes. The separator is taken from the table controlled by LC_NUMERIC. To be explicit: "set decimal locale" causes gnuplot to issue a command setlocale(LC_NUMERIC,""); This has the effect of changing the C library routines *printf() and *scanf() to format numbers using the conventions of the current locale. "set decimal locale 'sl_SI.UTF-8'" does the same except that it uses the conventions of sl_SI.UTF-8 whether or not that is the current locale. What you are calling a "thousand separator" is invoked by the C format character ' I downloaded the Slovenian locale set for testing, and here is what I see: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% gnuplot> set decimal locale decimal_sign in locale is . gnuplot> show locale LC_CTYPE is en_US.UTF-8 LC_TIME is C LC_NUMERIC is en_US.UTF-8 gnuplot> set label 1 sprintf("%'.3f", 12345678.7654321) gnuplot> show label 1 label 1 "12,345,678.765" at (0, 0, 0) left not rotated back nopoint gnuplot> set decimal locale 'sl_SI.UTF-8' decimal_sign in locale is , gnuplot> show locale LC_CTYPE is en_US.UTF-8 LC_TIME is C LC_NUMERIC is sl_SI.UTF-8 gnuplot> set label 1 sprintf("%'.3f", 12345678.7654321) gnuplot> show label 1 label 1 "12345678,765" at (0, 0, 0) left not rotated back nopoint gnuplot> set decimal locale 'de_LU.UTF-8' decimal_sign in locale is , gnuplot> show locale LC_CTYPE is en_US.UTF-8 LC_TIME is C LC_NUMERIC is de_LU.UTF-8 gnuplot> set label 1 sprintf("%'.3f", 12345678.7654321) gnuplot> show label 1 label 1 "12.345.678,765" at (0, 0, 0) left not rotated back nopoint %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Conclusions: 1) set decimal locale "xx_YY.UTF-8" works fine 2) locale "en_US.UTF-8" has a thousands' grouping character: comma 3) locale "de_LU.UTF-8" has a thousands' grouping character: dot 4) locale "sl_SI.UTF-8" does not have a thousands' grouping character. So I think your problem goes a little beyond the scope of gnuplot. If you believe that the sl_SI.UTF-8 locale should contain a grouping character, <period> or anything else, I think you will have to take it up with the approriate standards committee. There is more information here: http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap07.html#tag_07_03 -- Ethan A Merritt Biomolecular Structure Center University of Washington, Seattle 98195-7742 |
From: Mojca M. <moj...@gm...> - 2006-07-15 10:33:11
|
On 7/15/06, Ethan A Merritt wrote: > On Friday 14 July 2006 05:15 pm, you wrote: > > > > Do you want to say that the thousand separator is automatically placed > > under linux if you set the proper locale? > > Yes. The separator is taken from the table controlled by > LC_NUMERIC. > > To be explicit: > > "set decimal locale" causes gnuplot to issue a command > setlocale(LC_NUMERIC,""); > This has the effect of changing the C library routines > *printf() and *scanf() to format numbers using the conventions > of the current locale. > > "set decimal locale 'sl_SI.UTF-8'" does the same except > that it uses the conventions of sl_SI.UTF-8 whether or not > that is the current locale. > > What you are calling a "thousand separator" is invoked by > the C format character ' > > I downloaded the Slovenian locale set for testing, and here is what I see: Thanks. It seems that I will have to do everything on Linux if I want to get things right :( >%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% > gnuplot> set decimal locale > decimal_sign in locale is . > gnuplot> show locale > > LC_CTYPE is en_US.UTF-8 > LC_TIME is C > LC_NUMERIC is en_US.UTF-8 > > gnuplot> set label 1 sprintf("%'.3f", 12345678.7654321) > gnuplot> show label 1 > > label 1 "12,345,678.765" at (0, 0, 0) left not rotated back nopoint > > gnuplot> set decimal locale 'sl_SI.UTF-8' > decimal_sign in locale is , > gnuplot> show locale > > LC_CTYPE is en_US.UTF-8 > LC_TIME is C > LC_NUMERIC is sl_SI.UTF-8 > > gnuplot> set label 1 sprintf("%'.3f", 12345678.7654321) > gnuplot> show label 1 > > label 1 "12345678,765" at (0, 0, 0) left not rotated back nopoint > > gnuplot> set decimal locale 'de_LU.UTF-8' > decimal_sign in locale is , > gnuplot> show locale > > LC_CTYPE is en_US.UTF-8 > LC_TIME is C > LC_NUMERIC is de_LU.UTF-8 > > gnuplot> set label 1 sprintf("%'.3f", 12345678.7654321) > gnuplot> show label 1 > > label 1 "12.345.678,765" at (0, 0, 0) left not rotated back nopoint > %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% > > Conclusions: > 1) set decimal locale "xx_YY.UTF-8" works fine Not under windows :( > 2) locale "en_US.UTF-8" has a thousands' grouping character: comma > 3) locale "de_LU.UTF-8" has a thousands' grouping character: dot But I can't try that. > 4) locale "sl_SI.UTF-8" does not have a thousands' grouping character. This number is copied from Control Panel/Reginal and Language Options/Regional Options: 123.456.789,00 So thousands' grouping character is properly set to be a dot (however there are no strict conventions about that: it might be a dot, it might be a space or nothing; only comma for decimal sign is a strict convention). I'm afraid that Gnuplot in Windows doesn't know how to access that value and I need to write a script for someone from America, who needs a comma as thousands' grouping character. Decimal separator can be set manually, but the one for thousand cannot be. And there is no way to set any other default apart from the default one. > So I think your problem goes a little beyond the scope of gnuplot. > If you believe that the sl_SI.UTF-8 locale should contain a > grouping character, <period> or anything else, I think you will have > to take it up with the approriate standards committee. Period is certainy wrong since it's the decimal separator, but I need to do that for someone else. That's why I would like to set it manually, just as decimal separation sign can be set manually. Thanks for testing & reporting, Mojca |
From: Ethan A M. <merritt@u.washington.edu> - 2006-07-15 16:12:28
|
On Saturday 15 July 2006 03:33 am, Mojca Miklavec wrote: > > Conclusions: > > 1) set decimal locale "xx_YY.UTF-8" works fine > > Not under windows :( > I'm afraid that Gnuplot in Windows doesn't know how to access that > value and I need to write a script for someone from America, who needs > a comma as thousands' grouping character. Decimal separator can be set > manually, but the one for thousand cannot be. Gnuplot passes through the requested locale string to the C library routine setlocale(). I don't see how you can blame this problem on gnuplot. It's either a failure of the C library or a failure of the internationalization setup on the machine it is running on. But it does seem that Windows may disagree on what locale strings are legal. Please try some of the strings listed on http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_language_strings.asp If this turns out to the be solution, then I will add examples to the documentation and note that the convention for describing the locale is different on Windows. -- Ethan A Merritt Biomolecular Structure Center University of Washington, Seattle 98195-7742 |
From: Mojca M. <moj...@gm...> - 2006-07-15 16:27:24
|
On 7/15/06, Ethan A Merritt wrote: > On Saturday 15 July 2006 03:33 am, Mojca Miklavec wrote: > > > Conclusions: > > > 1) set decimal locale "xx_YY.UTF-8" works fine > > > > Not under windows :( > > I'm afraid that Gnuplot in Windows doesn't know how to access that > > value and I need to write a script for someone from America, who needs > > a comma as thousands' grouping character. Decimal separator can be set > > manually, but the one for thousand cannot be. > > Gnuplot passes through the requested locale string to the C library > routine setlocale(). I don't see how you can blame this problem on > gnuplot. It's either a failure of the C library or a failure of the > internationalization setup on the machine it is running on. But it > does seem that Windows may disagree on what locale strings are legal. > Please try some of the strings listed on > http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_language_strings.asp > > If this turns out to the be solution, then I will add examples to > the documentation and note that the convention for describing the > locale is different on Windows. Wow! Thanks! That indeed works. It seems that I have to use set locale "slovenian" set decimal locale "slovenian" The result is then LC_CTYPE is C LC_TIME is Slovenian_Slovenia.1250 LC_NUMERIC is Slovenian_Slovenia.1250 Yes, please document those strings somewhere. It's probably best to mention all the strings from that site in a table. And please add "slovenian" as well if possible since it's not on the list. However, one problem wasn't solved yet. No matter which language I set, I get the decimal separator, but nothing for thousands (I tried "slovenian", "english", "america", "german", ...) It might be Microsoft's problem, I don't know. But in some other programs the thousands separator works OK. Thanks, Mojca |
From: Ethan A M. <merritt@u.washington.edu> - 2006-07-15 16:49:23
|
On Saturday 15 July 2006 09:27 am, you wrote: > > Please try some of the strings listed on > > http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_language_strings.asp > > Wow! Thanks! That indeed works. It seems that I have to use > set locale "slovenian" > set decimal locale "slovenian" > > The result is then > LC_CTYPE is C > LC_TIME is Slovenian_Slovenia.1250 > LC_NUMERIC is Slovenian_Slovenia.1250 > > Yes, please document those strings somewhere. It's probably best to > mention all the strings from that site in a table. And please add > "slovenian" as well if possible since it's not on the list. I'll use it as an example. However, I don't think it is reasonable to list all possible locales using both Windows and POSIX conventions. > However, one problem wasn't solved yet. No matter which language I > set, I get the decimal separator, but nothing for thousands (I tried > "slovenian", "english", "america", "german", ...) Did you use the C format character ' that specifies you want a thousands separator? NB: There should be a mechanism for providing a C-standard format for tic-label generation. As it is, the code uses gnuplot's own format interpreter, which doesn't doesn't recognize this specifier. -- Ethan A Merritt Biomolecular Structure Center University of Washington, Seattle 98195-7742 |
From: Ethan A M. <merritt@u.washington.edu> - 2006-07-15 21:12:59
|
On Saturday 15 July 2006 11:00 am, you wrote: > On 7/15/06, Ethan A Merritt wrote: > > On Saturday 15 July 2006 10:30 am, Mojca Miklavec wrote: > > > "%'.3f" prints '.3f instead of the number with thousand separator > > Get a newer C library. > > Newer C library? I have MS Visual Studio 2005. So? This Microsoft web site http://msdn2.microsoft.com/en-us/library/x99tb11d.aspx claims that there is support for the thousands separator via setlocale() in the C libraries for Visual Studio 6.0 I don't know whether that's newer or older than the ones you have, but it sounds like maybe that's the versuib one you need. -- Ethan A Merritt Biomolecular Structure Center University of Washington, Seattle 98195-7742 |