Gambas-it

Gambas3 => Programmazione => Topic aperto da: dex - 02 Giugno 2012, 21:54:35

Titolo: dati float diversi su pc
Inserito da: dex - 02 Giugno 2012, 21:54:35
ciao raga
ho questo problema , due pc con sistema operativo linuxmint 11 ed entrambi hanno le impostazioni lingua italiana.

sul primo pc il codice funziona

es. inserisco 42.65 mi restituisce un valore float 42,65

sul secondo pc inserisco 42.65 mi restituisce null

dichiarazione della variabile Myd:
Citazione
Public MyD As Variant

codice:
Citazione
Myd = CStr(Trim(Myd))
     MyD = Replace(MyD, ".", ",")
    MyD = Val(MyD)   
    If TypeOf(MyD) < gb.Float Or TypeOf(MyD) = gb.Float Then
        MyD = CFloat(MyD)
    Else
        MyD = 0
    Endif
Titolo: Re: dati float diversi su pc
Inserito da: vuott - 02 Giugno 2012, 22:46:48
A me dà: 42,65.
Titolo: Re: dati float diversi su pc
Inserito da: dex - 11 Giugno 2012, 14:30:23
l'errore viene generato da Cfloat che non accetta la virgola come separatore (con il punto funziona), nonostante sull'help di Cfloat è scritto:
Citazione
Attenzione! Questa funzione non tiene conto della localizzazione corrente. Ciò significa che se un'espressione stringa contiene il separatore decimale, il separatore DEVE essere una virgola (,) come accade in francese tedesco ecc

Ora la cosa che non capisco, è, che ho 10 pc tutti con linux mint 11 e tutti impostati come lingua italiano (impostazioni identiche in tutto), come mai su 9 accetta la virgola e su uno vuole il punto?
Su tutti e 10 i pc ho installato gambas 3 dai repo http://www.gambas-it.org/smf/index.php?topic=2064.0.

Da cosa può dipendere l'anomalia? da un problema hardware no, prima sul pc incriminato avevo linux mint 10 e lo stesso programma fatto con g2 funzionava, cfloat accettava la virgola.

Mi manca qualche libreria?
Titolo: Re: dati float diversi su pc
Inserito da: milio - 11 Giugno 2012, 16:01:23
mi vien da pensare che su quel pc non sia impostato la lingua correttamente...

l'output di export cosa ti dice?
Titolo: Re: dati float diversi su pc
Inserito da: md9327 - 11 Giugno 2012, 16:18:06
Io penserei più ad un'installazione "incompleta" della lingua sui sistemi incriminati.
Titolo: Re: dati float diversi su pc
Inserito da: dex - 11 Giugno 2012, 22:51:11
mi vien da pensare che su quel pc non sia impostato la lingua correttamente...

l'output di export cosa ti dice?

che intendi per output di export?

@md
la lingua risulta completamente installata, il sistema non mi richiede ulteriori pacchetti.
Ma Cfloat non dovrebbe essere indipendente dalla lingua? sui pc (sia alcuni che funzionano sia quello che ha problemi)  ho provato anche a cambiare lingua e formati regionali, funziona sempre, solo su quel pc non và.
Dimenticavo, anche il cd di installazione che ho usato è lo stesso per tutti i pc.
Titolo: Re: dati float diversi su pc
Inserito da: milio - 11 Giugno 2012, 22:53:32
intendo...
apri un terminale, digiti export e dai invio...
Titolo: Re: dati float diversi su pc
Inserito da: md9327 - 12 Giugno 2012, 10:22:13
mi vien da pensare che su quel pc non sia impostato la lingua correttamente...

l'output di export cosa ti dice?

che intendi per output di export?

@md
la lingua risulta completamente installata, il sistema non mi richiede ulteriori pacchetti.
Ma Cfloat non dovrebbe essere indipendente dalla lingua? sui pc (sia alcuni che funzionano sia quello che ha problemi)  ho provato anche a cambiare lingua e formati regionali, funziona sempre, solo su quel pc non và.
Dimenticavo, anche il cd di installazione che ho usato è lo stesso per tutti i pc.

Ho già scritto su questa cosa in altre discussioni...
I valori in virgola mobile sono valori memorizzati in modalità binaria, con una struttura ben definita. Il come poi viene rappresentato questo numero è un'altro paio di maniche, e dipende da un mucchio di fattori, tra cui:
1) il tipo di formato binario utilizzato a livello di hardware
2) la lingua utilizzata

Riguardo il punto 1), è la libreria che si preoccupa di intepretare il valore in memoria.
Rigaurdo al punto 2), anche qui è la funzione che si occupa di rappresentare il valore.

Esiste però un problema, ovvero la differenza tra rappresentazione a video e l'interpretazione di un valore passato come stringa. In questo caso, esistono diverse funzioni atte allo scopo, e alcune dipendono alle impostazioni globali del sistema, come ad esempio la lingua usata.

Faccio un esempio:
a) CFloat(), che è una funzione che permette la conversione da un valore stringa in un valore numerico in virgola mobile, non tiene conto dell'impostazione di lingua usata, ma desidera avere come valore in input un rappresentazione in formato Americano, ovvero con il punto di separazione tra interi e decimali.
b) Val(), al contrario, dipende dalla lingua usata, per cui accetta valori che, in Italia e similari, hanno la virgola come separatore ma, per esempio, in USA è il contrario. Questo vuol dire che è necessaria un'attenzione particolare nelle procedure di lettura/scrittura di variabili miste.
Titolo: Re: dati float diversi su pc
Inserito da: dex - 12 Giugno 2012, 14:38:18
mi sa che ci avete preso, è proprio la lingua.
solo che sul sistema tutti i pacchetti della lingua risultano installati.

questo il pc dove funziona, risultato di export:
Citazione
declare -x COLORTERM="gnome-terminal"
declare -x COMPIZ_CONFIG_PROFILE="ubuntu"
declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-efSWHS4MSq,guid=9477b39f43f884cf6158d86500000028"
declare -x DEFAULTS_PATH="/usr/share/gconf/gnome.default.path"
declare -x DESKTOP_SESSION="gnome"
declare -x DISPLAY=":0"
declare -x GDMSESSION="gnome"
declare -x GDM_KEYBOARD_LAYOUT="it"
declare -x GDM_LANG="it_IT.utf8"
declare -x GNOME_DESKTOP_SESSION_ID="this-is-deprecated"
declare -x GNOME_KEYRING_CONTROL="/tmp/keyring-2ry5Yc"
declare -x GNOME_KEYRING_PID="1901"
declare -x GTK_MODULES="canberra-gtk-module"
declare -x HOME="/home/aft-casa"
declare -x LANG="it_IT.UTF-8"
declare -x LANGUAGE="it_IT:en"
declare -x LOGNAME="aft-casa"
declare -x MANDATORY_PATH="/usr/share/gconf/gnome.mandatory.path"
declare -x OLDPWD
declare -x ORBIT_SOCKETDIR="/tmp/orbit-aft-casa"
declare -x PATH="/home/aft-casa/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
declare -x PWD="/home/aft-casa"
declare -x SESSION_MANAGER="local/aftcasa-System-Product-Name:@/tmp/.ICE-unix/1920,unix/aftcasa-System-Product-Name:/tmp/.ICE-unix/1920"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_AGENT_PID="1953"
declare -x SSH_AUTH_SOCK="/tmp/keyring-2ry5Yc/ssh"
declare -x TERM="xterm"
declare -x UBUNTU_MENUPROXY="libappmenu.so"
declare -x USER="aft-casa"
declare -x USERNAME="aft-casa"
declare -x WINDOWID="65011742"
declare -x WINDOWPATH="7"
declare -x XAUTHORITY="/var/run/gdm/auth-for-aft-casa-8RP4Ew/database"
declare -x XDG_CONFIG_DIRS="/etc/xdg/xdg-gnome:/etc/xdg"
declare -x XDG_DATA_DIRS="/usr/share/gnome:/usr/local/share/:/usr/share/"
declare -x XDG_SESSION_COOKIE="0079d04dd2fb52fb354fcff000000009-1339447207.88490-1961793978"

questo il pc dove dà problemi:
Citazione
declare -x COLORTERM="gnome-terminal"
declare -x COMPIZ_CONFIG_PROFILE="ubuntu"
declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-TJzJXK7hl9,guid=657942f50da71f2a48ca523700000027"
declare -x DEFAULTS_PATH="/usr/share/gconf/gnome.default.path"
declare -x DESKTOP_SESSION="gnome"
declare -x DISPLAY=":0.0"
declare -x GDMSESSION="gnome"
declare -x GDM_KEYBOARD_LAYOUT="it"
declare -x GDM_LANG="it"
declare -x GNOME_DESKTOP_SESSION_ID="this-is-deprecated"
declare -x GNOME_KEYRING_CONTROL="/tmp/keyring-v6IIy0"
declare -x GNOME_KEYRING_PID="1554"
declare -x GTK_MODULES="canberra-gtk-module"
declare -x HOME="/home/gio"
declare -x LANG="it_IT.UTF-8"
declare -x LANGUAGE="it:en"
declare -x LC_ADDRESS="en_US.UTF-8"
declare -x LC_IDENTIFICATION="en_US.UTF-8"
declare -x LC_MEASUREMENT="en_US.UTF-8"
declare -x LC_MONETARY="en_US.UTF-8"
declare -x LC_NAME="en_US.UTF-8"
declare -x LC_NUMERIC="en_US.UTF-8"
declare -x LC_PAPER="en_US.UTF-8"
declare -x LC_TELEPHONE="en_US.UTF-8"
declare -x LC_TIME="en_US.UTF-8"
declare -x LESSCLOSE="/usr/bin/lesspipe %s %s"
declare -x LESSOPEN="| /usr/bin/lesspipe %s"
declare -x LIBGL_DRIVERS_PATH="/usr/lib/fglrx/dri"
declare -x LOGNAME="gio"
declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:"
declare -x MANDATORY_PATH="/usr/share/gconf/gnome.mandatory.path"
declare -x OLDPWD
declare -x ORBIT_SOCKETDIR="/tmp/orbit-gio"
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
declare -x PWD="/home/gio"
declare -x SESSION_MANAGER="local/gio-mint:@/tmp/.ICE-unix/1573,unix/gio-mint:/tmp/.ICE-unix/1573"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_AGENT_PID="1608"
declare -x SSH_AUTH_SOCK="/tmp/keyring-v6IIy0/ssh"
declare -x TERM="xterm"
declare -x UBUNTU_MENUPROXY="libappmenu.so"
declare -x USER="gio"
declare -x USERNAME="gio"
declare -x WINDOWID="62914589"
declare -x WINDOWPATH="7"
declare -x XAUTHORITY="/var/run/gdm/auth-for-gio-C7PROM/database"
declare -x XDG_CONFIG_DIRS="/etc/xdg/xdg-gnome:/etc/xdg"
declare -x XDG_DATA_DIRS="/usr/share/gnome:/usr/local/share/:/usr/share/"
declare -x XDG_SESSION_COOKIE="8fcff6dbac921937da536d1000000013-1339488905.797656-275672150"

come faccio a forzare il sistema per configuralo nel modo giusto?
Titolo: Re: dati float diversi su pc
Inserito da: md9327 - 12 Giugno 2012, 14:59:10
Sul fatto che c'havevamo ragione non c'erano dubbi...  :evil:

Scherzi a parte, ora viene il problema, perchè devi individuare i programmi, uno per uno, e configurarli...

In alternativa, potresti provare a modificare il "profile" del tuo utente, o quello a livello globale.

Puoi anche fare un controllo veloce, impostando le variabile LANG e LANGUAGE, e tutte quelle che si riferiscono ad impostazioni di lingua, nel terminale da cui poi lancerai l'export. Comunque, imposta prima le varibili di ambiente (sempre da terminale) e lancia subito dopo il tuo eseguibile (sempre dallo stesso terminale, e stesso user).

Un esempio:

export LANG=it_IT.UTF-8
...
e via dicendo...
Titolo: Re: dati float diversi su pc
Inserito da: milio - 12 Giugno 2012, 21:51:10
io comunque, se non hai programmi particolari su quel pc, eliminerei tutte le variabili LC_qualchecosa con il comando unset LC_qualchecosa
Titolo: Re: dati float diversi su pc
Inserito da: dex - 12 Giugno 2012, 21:57:42
grazie raga
ora provo a modificare il tutto.

mi è sorto un dubbio, non ne sono sicuro, ma in fase di installazione quando ho avviato il live non ho scelto lingua italiana ma ho installato con il live avviato in inglese. può essere stato questo a settarmi il sistema in inglese?
Titolo: Re: dati float diversi su pc
Inserito da: milio - 12 Giugno 2012, 22:06:43
Tutto puo' essere :)...

Leggendo comunque su wikipedia le variabili d'ambiente LC_qualchecosa hanno la precedenza sulla variabile LANG.... c'e' sempre da imparare! :)
Titolo: Re: dati float diversi su pc
Inserito da: milio - 12 Giugno 2012, 22:11:09
ops il link  :-[

http://it.wikipedia.org/wiki/Variabile_d%27ambiente_(Unix)
Titolo: Re: dati float diversi su pc
Inserito da: dex - 14 Giugno 2012, 13:28:24
Raga provato ad eliminare le Variabili LC_ con unset, prima do dovuto settarle a vuoto altrimenti unset non le toglieva poi eliminale.
Il problema è che al riavvio c'erano di nuovo, deve essere qualche programma che le setta in fase di avvio.
Titolo: Re: dati float diversi su pc
Inserito da: md9327 - 14 Giugno 2012, 14:12:53
Mi pare logico, non crescono da sole...  ;D

Quelle impostazioni sono settate da vari programmi, anche di sistema, per cui è necessario agire appunto sulle configurazioni di sistema.

Mediamente sono applicazioni e/o librerie dedicate all'ambiente grafico, ma non è detto...

Dovresti vedere con i programmi a corredo del desktop manager, settore lingua, e verificare che tutte le impostazioni siano come desiderato.
Di base, ogni distro, installa la lingua inglese, ed è probabile che aggiornamenti successivi non abbiano preso in considerazione proprio tutte le applicazioni...
Titolo: Re: dati float diversi su pc
Inserito da: dex - 20 Giugno 2012, 20:45:56
Aggiornamento
Non sono riuscito a capire da dove vengono avviate le variabili LC_

ho installato la ultima versione di linux mint 13, ma la situazione non è cambiata, nelle lingue risultano installate italiano e inglese, unica differenza con i pc che funzionano non c'è la scritta (Italia)

Pc che funziona: Schermata casa
Pc che non funziona:Schermata ufficio

Inoltre l'eseguibile del  programma che ho fatto io con gambas3, sui pc che funzionano la lingua è tutta italiana, su quello che non funziona alcuni componenti (DateChooser) sono in inglese.
Titolo: Re: dati float diversi su pc
Inserito da: md9327 - 21 Giugno 2012, 00:51:30
Non conosco linux mint, ma il mio dubbio è che siano stati usati repository diversi.

Se la versione è la stessa, è probabile che durante l'installazione, o gli aggiornamenti, siano state scaricate versioni diverse per alcuni pacchetti.

Questo, a meno che tu non abbia fatto modifiche da qualche parte...
Titolo: Re: dati float diversi su pc
Inserito da: dex - 27 Giugno 2012, 00:29:12
Mistero sempre più fitto.

Sul pc difettoso ho formattato tutto e installato ubuntu 12.04 sempre lo stesso problema, sul questo pc le precedenti versioni sia di ubuntu che di linux mint hanno sempre funzionato.

Poi su alcuni pc dove cfloat funzionava ho installato sia linux mint 13 che ubuntu 12.04 ed entrambi funzionano.