https://foro.gambas-es.org/viewtopic.php?f=1&t=5048
-----------------------------------
v3ctor
Domingo, 20 Diciembre 2015, 02:20

Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
buenas,

La idea de esto es averiguar que tipo de moneda usa el sistema operativo y en base a eso usar el signo de moneda en nuestro programa

alguna idea?


-----------------------------------
vuott
Domingo, 20 Diciembre 2015, 03:31

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
Actualmente sólo puedo sugerir este código, utilizando unas funciones externas de [i]Libc.so.6[/i]:

[code linenumbers=false syntax=gambas]Library "libc:6"

Public Struct Lconv
  decimal_point As Pointer
  thousands_sep As Pointer
  grouping As Pointer
  int_curr_symbol As Pointer
  currency_symbol As Pointer
End Struct

Private Const LC_MONETARY As Integer = 4

' char *setlocale (int __category, const char *__locale)
' Set and/or return the current locale.
Private Extern setlocale(category As Integer, locale As String) As Pointer

' struct lconv *localeconv(void)
' Return the numeric/monetary information for the current locale.
Private Extern localeconv() As Lconv


Public Sub Main()

  Dim lc As New Lconv
  
' Precisamos la categoría y el entorno de la impostación local por lengua
    setlocale(LC_MONETARY, System.Language)
    
' Devuelve un Puntero a la Estructura que da informaciones sobre los símbolos numéricos según la impostación local:
    lc = localeconv()
    
    With lc
      Print "Moneda:  "; String@(.int_curr_symbol)
      Print "símbolo monetario:  "; String@(.currency_symbol)
    End With

End[/code]


-----------------------------------
Shell
Domingo, 20 Diciembre 2015, 10:30

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
Pues si que es raro que la clase System no tenga esa opción. :o


-----------------------------------
Shell
Domingo, 20 Diciembre 2015, 12:32

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
¿ No debería el sistema decirnos todos estos datos y no solo mostrar el mismo resultado que vemos ?.

[code linenumbers=false syntax=bash]
env | grep LC
[/code]

Salida:

[quote]
LC_PAPER=es_ES.UTF-8
LC_ADDRESS=es_ES.UTF-8
LC_MONETARY=es_ES.UTF-8
LC_NUMERIC=es_ES.UTF-8
LC_TELEPHONE=es_ES.UTF-8
LC_IDENTIFICATION=es_ES.UTF-8
LC_MEASUREMENT=es_ES.UTF-8
LC_TIME=es_ES.UTF-8
LC_NAME=es_ES.UTF-8
[/quote]

Saludos


-----------------------------------
Shell
Domingo, 20 Diciembre 2015, 12:57

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
En Gambas se podría ver de otra forma, pero no veo lo que nos interesa.

[code linenumbers=false syntax=gambas]
Public Sub Main()
  Dim varentorno As String 
  
  For Each varentorno In Application.Env
    If InStr(varentorno, "LC_") Then Print varentorno & " | " & Application.Env[varentorno]
  Next
 
End
[/code]

Como Application.Env es una colección, podemos usar  varentorno como clave y luego para encontrar el valor que corresponde a la clave.

Salida:

[quote]
LC_TIME | es_ES.UTF-8
LC_MONETARY | es_ES.UTF-8
LC_ADDRESS | es_ES.UTF-8
LC_TELEPHONE | es_ES.UTF-8
LC_NAME | es_ES.UTF-8
LC_MEASUREMENT | es_ES.UTF-8
LC_IDENTIFICATION | es_ES.UTF-8
LC_NUMERIC | es_ES.UTF-8
LC_PAPER | es_ES.UTF-8
[/quote]

 :neutral: 

Saludos


-----------------------------------
vuott
Domingo, 20 Diciembre 2015, 17:15

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
Shell,

tu codigo no me da ningún resultado !   [img]http://fiddlerman.com/wp-content/forum-smileys/dunno.gif[/img]


-----------------------------------
Shell
Domingo, 20 Diciembre 2015, 18:38

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
Vuott:

[quote]
tu codigo no me da ningún resultado !
[/quote]

Cierto. En el trabajo se ve y en casa no.  :???: 
Y es la misma distro!. Linux Mint 17.2

Como has visto he usado Instr, para buscar las palabras que contengan o comiencen por LC.
Parece que no hay palabras en las variables de entorno que coincidan con ese patrón... :???: 

Si usas:

[code linenumbers=false syntax=gambas]
Public Sub Main()
  Dim varentorno As String
    
  For Each varentorno In Application.Env
    Print varentorno & " | " & Application.Env[varentorno]
    'If InStr(varentorno, "LC_") Then Print varentorno & " | " & Application.Env[varentorno]
  Next
  

End
[/code]

Veras que da salida. Aunque no es la que nos interesa.  :neutral: 

Saludos


-----------------------------------
vuott
Domingo, 20 Diciembre 2015, 18:50

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
En [u]Ubuntu[/u] muy interesantes son los archivos que están en la directory:
[i]/usr/share/i18n/locales[/i]

En cada archivo, distinguido por LANG, hay tambien la moneda y su símbolo.

Propongo un codigo (esta vez sólo Gambas !) como lo que sigue:    :neutral: 
[code linenumbers=false syntax=gambas]Public Sub Main()
  
  Dim lengua, locales, arcloc, unicode, moneda As String
  Dim b As Byte
  
    locales = "/usr/share/i18n/locales"
  
    lengua = Scan(System.Language, "*.*")[0]
  
    arcloc = File.load(locales &/ Dir(locales, lengua, gb.File)[0])
    
    unicode = Scan(Replace(arcloc, " ", Null), "*int_curr_symbol\"<U*<U0020>*")[1]

    For b = 1 To 18 Step 7
      moneda &= Chr(Val("&" & Mid(unicode, b, 4)))
    Next
    
    Print "Moneda:            "; moneda
    
    
    unicode = Scan(Replace(arcloc, " ", Null), "*currency_symbol\"<U*>*")[1]
    
    Print "Símbolo monetario: "; String.Chr(Val("&" & unicode))

End[/code]


-----------------------------------
Shell
Lunes, 21 Diciembre 2015, 10:10

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
Vuott:

[quote]
Propongo un codigo (esta vez sólo gambas !) como lo que sigue
[/quote]

 [img]http://foro.gambas-es.org/files/images/768/6aplaudir.gif[/img] 

Tengo que examinar mejor el código.

Saludos


-----------------------------------
Shell
Lunes, 21 Diciembre 2015, 11:50

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
[quote]
La idea de esto es averiguar que tipo de moneda usa el sistema operativo y en base a eso usar el signo de moneda en nuestro programa
[/quote]

A ver. Creo que nos hemos ido al monte a buscar la respuesta..

[code linenumbers=false syntax=gambas]
Public Sub Main()
 Dim cantidad As Float
 
 cantidad = 12.56 
  
 Print "Símbolo monetario: " & Split(Format(cantidad, "$#.##"), " ")[1]
 Print "Moneda: " & Split(Format(cantidad, "$$#.##"), " ")[1]
 
End
[/code]

Salida:

[quote]
Símbolo monetario: €
Moneda: EUR
[/quote]

Ejem...cof..cof... :roll: 

Saludos


-----------------------------------
Shell
Lunes, 21 Diciembre 2015, 12:03

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
Ah, no olvidéis que en otro país se puede expresar de otra forma los valores.

Imaginar que el símbolo de la moneda está delante de las cifras. Entonces habría que reconocer que es una cifra y que es una letra. ;-)
Que para eso tambien tenemos funciones en Gambas.

En Europa puede valer. Mientras el símbolo y la moneda sea por la derecha.
En otro país pueda que haya que añadir algo más. No es difícil de modificar.

Saludos


-----------------------------------
vuott
Lunes, 21 Diciembre 2015, 13:58

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
[quote user="Shell" post="29326"]Salida:

[quote]
Símbolo monetario: €
Moneda: EUR
[/quote]
[/quote]
No comprendo como sale este resultado.    :o


-----------------------------------
Shell
Lunes, 21 Diciembre 2015, 19:11

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
[quote]
No comprendo como sale este resultado.
[/quote]

¿ Qué no comprendes ?. Tu sabes que en Gambas hay una instrucción que usamos para dar formato a los textos, 
valores convertidos a textos. Tenemos los formatos definidos por el usuario.

[url=http://gambaswiki.org/wiki/cat/userformat?l=es#t3]Sintaxis del formato para monedas

La cantidad que he mostrado es algo que es indiferente por que no queremos ver una cantidad, solo la moneda y el
símbolo internacional.

[code linenumbers=false syntax=gambas]
Print "Símbolo monetario: " & Split(Format(cantidad, "$#.##"), " ")[1]
[/code]

Primero formatea la cantidad 12.56 a formato moneda. Eso te da 12.56 €
Como hay un espacio en medio , el separado es el espacio.
Se forma un array de dos elementos. Valor (indice 0) y símbolo del € (indice 1).

[code linenumbers=false syntax=gambas]
Split(Format(cantidad, "$#.##"), " ")[1]
[/code]

Tomamos el segundo valor del array , que es indice 1. Donde se encuentra el símbolo de la moneda
y lo concatenamos con la frase "Símbolo monetario: ".

¿ Cómo obtienes la salida ? . Usando un valor. Un valor que es indiferente, solo te interesa el resultado final,
que es el valor y el símbolo. (Lo que nos interesa)


Saludos


-----------------------------------
vuott
Lunes, 21 Diciembre 2015, 22:14

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
Simplemente el mi resultado es:

[i]Símbolo monetario: 12,56
Moneda: 12,56[/i]

No hay simbolo monetario.


-----------------------------------
v3ctor
Lunes, 21 Diciembre 2015, 23:36

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
la otra seria dejar un txt donde el usuario ponga el signo de pesos de su pais,
facil y seguro, ahorro de codigo.

y asignarlo a una variable llamada moneda.


 :lol:  :lol:  :lol:  :lol:  :lol: 

simple y elegante  :cool:


[b][color=#FF0000]editado:[/color][/b]
perdón no es un archivo txt sino un textbox donde el usuario ingrese el signo de moneda y eso se asignaría a una variable moneda.


-----------------------------------
Shell
Martes, 22 Diciembre 2015, 00:23

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
Vuott:

 :shock: 

Por casualidad, ¿ sabes si otro compañero de la comunidad de Italia le ocurre lo mismo ?.

v3ctor:

No es mala idea lo del archivo.  :lol: 

Saludos


-----------------------------------
vuott
Martes, 22 Diciembre 2015, 00:40

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
[quote user="v3ctor" post="29339"]la otra seria dejar un txt donde el usuario ponga el signo de pesos de su pais,
facil y seguro[/quote]

No, porque no tendría ningún sentido este tu asunto: faltaría la verificación en / desde el sistema operativo !


-----------------------------------
vuott
Martes, 22 Diciembre 2015, 11:29

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
[quote user="Shell" post="29342"]Por casualidad, ¿ sabes si otro compañero de la comunidad de Italia le ocurre lo mismo ?[/quote]

Bueno, no parece que el problema sea la lengua. El tu codigo, para obtener moneda y su simbolo, a mi funciona solo eligendo el resultado de indice [i]zero[/i] desde [i]Split()[/i].
Es decir:
[code linenumbers=false syntax=gambas]Print "Símbolo monetario: " & Split(Format(cantidad, "$#.##"), " ")[0]
Print "Moneda: " & Split(Format(cantidad, "$$#.##"), " ")[0][/code]

Este cambio de indice [i]parece[/i] ser necesario usando Ubuntu 14.04.3 y Gambas 3.8.4 .


-----------------------------------
vuott
Martes, 22 Diciembre 2015, 11:38

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
...pero asì:
[code linenumbers=false syntax=gambas]Public Sub Main()
  
 Print "Símbolo monetario: "; Format(0, "$#")
 Print "Moneda:            "; Format(0, "$$#")

End[/code]   :roll: 
no es más facil para solucionar el problema ?


-----------------------------------
Shell
Miercoles, 23 Diciembre 2015, 09:44

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
Vuott:

[quote]
Bueno, no parece que el problema sea la lengua. El tu codigo, para obtener moneda y su simbolo, a mi funciona solo eligendo el resultado de indice zero desde Split().
[/quote]

Entonces usáis el formato € 10,20 por ejemplo ?. Pues a mi me gusta más 10,20 €..   :mryellow: 
Yo creía que vivíamos en la misma Europa.    :roll: 

Menos mal que no lo has puesto en formato "denarios"!!.  :twisted: 
Oye que como curiosidad histórica. ¿ Sabías que el "As" ...(si, el de los naipes) era una moneda romana ?.

[url=https://es.wikipedia.org/wiki/Sestercio]Sestercio
[url=https://es.wikipedia.org/wiki/Moneda_en_la_Antigua_Roma]Moneda en la antigua Roma

[quote]
no es más fácil para solucionar el problema ?
[/quote]

Pues si, no hay ningún valor. Cuestión de probar cosas. :-D

Saludos


-----------------------------------
v3ctor
Jueves, 24 Diciembre 2015, 16:06

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
asi lo resolvi:

 [img]http://foro.gambas-es.org/files/images/2261/moneda3.png[/img]

[code linenumbers=false syntax=gambas]Public Sub btnGuardarMoneda_Click()
  
  FMain.Moneda = txtMoneda.Text
  FMain.MonedaDescripcion = txtDescripcionMoneda.Text
  Settings["Opciones/Moneda"] = FMain.Moneda  
  Settings["Opciones/MonedaDescripcion"] = FMain.MonedaDescripcion
  Ventanas.Mgv1.Close
  Ventanas.Mgv1.Open("Cambios guardados.")
  Wait 1
  Ventanas.Mgv1.Close
  
End[/code]

los guardo en un archivo settings
después en los eventos actívate actualizo las variables y inmediatamente se visualizan los cambios en los formularios.


-----------------------------------
vuott
Jueves, 24 Diciembre 2015, 16:33

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
[quote user="v3ctor" post="29369"]asi lo resolvi[/quote]

No has explicado, pero, cual solución usaste para obtener el tipo de moneda y su simbolo.   :o


-----------------------------------
v3ctor
Jueves, 24 Diciembre 2015, 16:48

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
[quote user="vuott" post="29370"][quote user="v3ctor" post="29369"]asi lo resolvi[/quote]

No has explicado, pero, cual solución usaste para obtener el tipo de moneda y su simbolo.   :o[/quote]


puedo estar equivocado pero me doy cuenta que averiguar la moneda del sistema es demasiado complicado, sabiendo que hay muchos sistemas operativos y cientos de monedas distintas con variaciones de símbolos de una misma moneda, lo que concluyo es que el mejor método es que el usuario la configure a gusto y placer.


-----------------------------------
Shell
Viernes, 25 Diciembre 2015, 10:22

Re: Averiguar Que Tipo De Moneda Usa El Sistema Operativo?
-----------------------------------
v3ctor:

Opino que la solución de usar format no es mala idea.  :neutral: 
Y con la última solución que hemos llegado a hacer Vuott y yo, obtienes el símbolo monetario.

¿ No te funciona ?.

Saludos


