• Publicidad

Pasar de punto a coma

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Pasar de punto a coma

Notapor audax » 2016-08-11 11:20 @514

Buenas, tengo una duda con el método setlocale. Lo que quiero hacer es cambiar la configuración local del "decimal_point" que está establecida con punto, por una coma y "thousands_sep" que está en coma, por un punto.

Para ello tengo el siguiente código.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use POSIX qw(locale_h);
  2. use locale;
  3.  
  4. my $oldlocale = setlocale(LC_CTYPE); # aquí me entrega la configuración regional del equipo
  5. my $nuevalocale = setlocale(LC_CTYPE,"es_MX") or die "No cambia" ; # aquí no cambia a la configuración mexicana que es la que necesito
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


¿Alguien me puede decir qué estoy haciendo mal? Gracias.
audax
Perlero nuevo
Perlero nuevo
 
Mensajes: 56
Registrado: 2013-06-03 13:16 @594

Publicidad

Re: Pasar de punto a coma

Notapor explorer » 2016-08-11 13:51 @619

Primero tienes que comprobar qué locales tienes instaladas en tu ordenador. Esto es lo que sale en el mío:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. $ locale -a |fgrep MX
  2. es_MX.utf8
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4

Y ahora ya sabemos qué nombre usar:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use open IO => ':locale';
  3. use POSIX qw(locale_h);
  4. use locale;
  5.  
  6. my $oldlocale   = setlocale(LC_CTYPE);
  7. my $nuevalocale = setlocale(LC_CTYPE,"es_MX.utf8") or die "No cambia";
  8.  
  9.  
  10. my $locale_values = localeconv();
  11.  
  12. # salida ordenada de los valores
  13. for (sort keys %$locale_values) {
  14.     my($k, $v) = ($_, $locale_values->{$_});
  15.  
  16.     if ($k =~ /grouping/) {
  17.         my @g = unpack "C*", $v;
  18.         $v = "[" . join("|", @g) . "]";
  19.     }
  20.  
  21.     printf "%-20s = %s\n", $k, $v;
  22. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

La salida es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
currency_symbol      = €
decimal_point        = ,
frac_digits          = 2
grouping             = [3|3]
int_curr_symbol      = EUR
int_frac_digits      = 2
int_n_cs_precedes    = 0
int_n_sep_by_space   = 1
int_n_sign_posn      = 1
int_p_cs_precedes    = 0
int_p_sep_by_space   = 1
int_p_sign_posn      = 1
mon_decimal_point    = ,
mon_grouping         = [3|3]
mon_thousands_sep    = .
n_cs_precedes        = 0
negative_sign        = -
n_sep_by_space       = 1
n_sign_posn          = 1
p_cs_precedes        = 0
p_sep_by_space       = 1
p_sign_posn          = 1
thousands_sep        = .
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Pasar de punto a coma

Notapor audax » 2016-08-19 12:57 @581

Muchas gracias, explorer. Al final era algo parecido a como dices tu, pero para Windows el idioma se escribe diferente. A mi me sirvió al final el idioma español de España, o sea el código fue "Spanish_Spain.1252".

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $nuevalocale = setlocale(LC_CTYPE,"Spanish_Spain.1252")
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


:D :D

Gracias por la ayuda.
audax
Perlero nuevo
Perlero nuevo
 
Mensajes: 56
Registrado: 2013-06-03 13:16 @594


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 7 invitados