Newsgroup: it.comp.lang.visual-basic
Titolo: Chi può aiutarmi?

Come posso leggere il carattere utilizzato come separatore di decimali e di
migliaia impostato nelle impostazioni internazionali ?
                                                        Saluti Antonio

 migliaia impostato nelle impostazioni internazionali ?
Dim s As String
s = 0.3
separatore = Mid(s, 2, 1)

 ha scritto nel messaggio
news:auvf16$a9fuc$1...@ID-174464.news.dfncis.de...

Grazie Lupo,
l'ho provato funziona, ma mica ho capito perchč.

 l'ho provato funziona, ma mica ho capito perchè.
L'artificio (certo ci saranno anche altri modi) fa sì che il numero 0.3
venga messo trasformato in "s" e come tale trasformato in stringa. Tale
trasformazione usa le impostazione del pannello di controllo e il secondo
carattere assumerà quanto previsto per il separatore interi/decimali.

ciao! zona? anni?
Per la cronaca forse è più corretto e pulito:

 >> separatore = Mid(s, 2, 1)
Per la cronaca dovrebbe essere più corretto:
Dim s As double
s = 0.3
separatore = Mid(trim(s), 2, 1)
oppure
Dim s As String
s = trim(0.3)
separatore = Mid(s, 2, 1)
In quanto dichiarare una variabile come stringa e poi metterci un numero
senza fare conversioni non è proprio il massimo e delle conversioni
implicite è meglio non fidarsi troppo.
Gianni

Per la cronaca dovrebbe essere più corretto:
[cut]
Piuttosto la farei cosi':
Dim separatore As String
' converto esplicitamente il valore Single in String
' utilizzando le impostazioni del pannello di controllo
' tramite la funzione CStr
separatore  = CStr(0.3)
' adessi in seconda posizione c'e' il carattere separatore
' dei decimali come da pannello di controllo
separatore = Mid$(separatore, 2, 1)
-- 
ciao, hal

 ha scritto nel messaggio
news:s1p61v4orfr7n9aqn...@4ax.com...

Ringrazio e saluto tutti.
                                Antonio

 implicite è meglio non fidarsi troppo.
No, come fai tu non cambia proprio nulla, poichè la trim converte
implicitamente s in stringa, anzi: un variant contenente un double che viene
riconvertito in variant contenente stringa e poi passato alla trim.
Tanto vale fargli fare tutto alla mid evitando un passaggio :)
Il metodo corretto è quello suggerito da hal, ma come si diceva in un thread
dei giorni scorsi la CStr() viene richiamata implicitamente nelle
conversioni a stringa e quindi è tralasciabile (piuttosto dichiarerei s as
string e userei Mid$, o meglio separatore = Mid$(CStr(0.3), 2, 1)).
Ciao

 migliaia impostato nelle impostazioni internazionali ?
Io ho fatto sempre così:
Dim SepDec As String
SepDec = Mid$(Format$(0, "0.0"), 2, 1)

..e visto che tu chiedevi anche per il separatore delle migliaia (a me non è
mai servito), credo che a naso dovrebbe andare bene questo codice:
Dim SepDec As String        ' Separatore decimali
Dim SepMigl As String        'Separatore migliaia
SepDec = Mid$(Format$(1000.1, "0,000.0"), 6, 1)
SepMigl = Mid$(Format$(1000.1, "0,000.0"), 2, 1)

........o, che è lo stesso:
Dim SepDec As String
Dim SepMigl As String
SepDec = Mid$(Format$(0, "0,000.0"), 6, 1)
SepMigl = Mid$(Format$(0, "0,000.0"), 2, 1)
(scusate tutti questi post)

 SepMigl = Mid$(Format$(0, "0,000.0"), 2, 1)
A cosa serve la Format$? A perdere tempo? :)
SepDec = Mid$(1000.1, 6, 1)
SepMigl = Mid$(1000.1, 2, 1)
--
using System.Gtk.Forms = "
http://www.neodatatype.net/windowsforms/sgf.aspx
"
mathParser = "
http://www.neodatatype.net
"
sitoComune = "
http://www.it-lang-vb.net
"

 SepMigl = Mid$(1000.1, 2, 1)
Scusa, ma nel togliere il Format butti l'acqua sporca e il  bimbo nella
tinozza. Forse non hai seguito bene il thread. Se rileggi ( ma sono sicuro
che te ne sei già accorto), di sicuro capirai. in caso contrario riposta che
te lo spiego.

 te lo spiego.
Sì, spiegamelo :)
Ciao

> Sě, spiegamelo :)
Certamente, č un piacere.
Ci si chiedeva come ricuperare il separatore dei decimali e quello delle
migliaia in base alle impostazioni internazionali del registry.
Ora, un comando del tipo:
SepDec = Mid$(Format$(0, "0,000.0"), 6, 1)
restituisce una stringa formattata tenendo appunto conto delle impostazione
del registry. Ne consegue che il codice qui sopra restituisce il sesto
carattere in base alle impostazione internazionali, appunto un .(punto)
ovvero una , (virgola) o quant'altro in uso dal sistema in quel dato
istante.
Se tu, come da te suggerito, togli il Format e scrivi semplicemente:
SepDec = Mid$(1000.1, 6, 1)
ottieni banalmente il sesto carattere della stringa argomento della funzione
MID, che ovviamente č una costante. L'ironia vuole pure che nel tuo caso si
ottenga una cifra e nemmeno un segno di interpunzione!
Comunque, ti invito alla prova pratica, magari modificando alla bisogna le
impostazioni internazionali del tuo sistema.

 ottenga una cifra e nemmeno un segno di interpunzione!
E' vero :) non ci avevo pensato.
Perņ č inutile nel caso del separatore decimale. :P
Ciao

> Perņ č inutile nel caso del separatore decimale. :P
Adesso sono io che non capisco. E' inutile cosa?
Il problema non č che nel tuo caso ottieni la cifra 1; potresti infatti
scrivere:
SepDec = Mid$("1,000.1", 6, 1)
ed otteresti certamente il punto decimale. Ma, cio' equivarrebbe a scrivere
piu' semplicemente:
SepDec = "."
Per contro, invece, il mio codice:
SepDec = Mid$(Format$(0, "0,000.0"), 6, 1)
restituisce un _punto_ ovvero una _virgola_  a seconda delle impostazioni
del registry. Cioč, il mio codice č dinamico, riflettendo le impostazioni
internazioni del sistema operativo e cio' grazie all apresenza di Format.

 SepDec = "."
Tutto perchè quel 6 dev'essere un 5... ;-)
Faccio il millantatore perchè la richiesta originaria riguardava il solo
separatore interi/decimali, non quello fra le migliaia e allora abbrevio la
prima ipotesi:
separatore = Mid(0.3, 2, 1)

 separatore = Mid(0.3, 2, 1)
La domanda originaria era:
Come posso leggere il carattere utilizzato come separatore di decimali e di
migliaia impostato nelle impostazioni internazionali ?
                                                        Saluti Antonio
Quindi come vedi riguardava entrambi i separatori

 Quindi come vedi riguardava entrambi i separatori
Hai ragione.
Il fatto che io abbia bevuto mi puň scusare un pochettino? ;-)

 Perņ č inutile nel caso del separatore decimale. :P
Zanna ti chiedo scusa. E' vero, č inutile in questo caso (non avevo
afferrato il senso del tuo ragionamento). ma solo per i decimali. Il fatto č
che io pensavo anche al separatore delle migliaia. Grazie anche a Lupo che
mi ci ha fatto arrivare.

 Il fatto che io abbia bevuto mi puň scusare un pochettino? ;-)
Hic, hic!!! Buon anno!;)

 afferrato il senso del tuo ragionamento). ma solo per i decimali.
Vero :)
Comunque (giusto per la cronaca) il sistema corretto per tutto questo e
molto altro č affidarsi alla GetLocaleInfo().
Ciao


 molto altro è affidarsi alla GetLocaleInfo().
Anche perche' in generale il separatore decimale e quello delle migliaia 
possono anche essere costituiti da piu' di un carattere.
E visto che noi aspiriamo a vendere i nostri programmi in tutto il mondo 
  ... ;-)
ciao
	maxx
-- 
NOSPAM: Rimuovere i trattini dallo username!
Cut hyphens from my username!

  ... ;-)
Non solo: puo' accadere (mi e' capitato) che ci sia incoerenza tra le
impostazioni dei separatori per i numeri e per le valute: cioe' il
separatore decimali dei numeri e' diverso da quello delle valute
perche' il pannello di controllo non fa validazione alcuna in tal
senso.
All'OP mi permetto di suggerire la lettura di questo mio vecchio post:
http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&selm=913m35%242onqa%243%40ID-56381.news.dfncis.de
-- 
ciao, hal

 possono anche essere costituiti da piu' di un carattere.
Sei sicuro? Io ho provato da Pannello di controllo a impostare due caratteri
per il separatore, ma in VB ottengo comunque solo il primo di carattere


LOCALE_SDECIMAL	Character(s) used as the decimal separator.
LOCALE_STHOUSAND	Character(s) used to separate groups of digits to the 
left of the decimal.
Io ho impostato ,# come separatore decimale e mi viene riportato 
correttamente dalle API Locales ...
Forse hai visualizzato le impostazioni di sistema 
(LOCALE_SYSTEM_DEFAULT) e non quelle utente (LOCALE_USER_DEFAULT).
