[VB.NET] Formattare Nome Cognome

mercoledì 09 aprile 2008 - 10.52

marco.santilli Profilo | Junior Member

Un pò di tempo fa ho trovato una funzione in rete che mi permette di formattare un Nominativo

Se un Nominativo era scritto tipo:

PIPPO FRANCO

Con questa funzione lui scriveva:

Pippo Franco

Adesso ho riscontrato un problema se uno scrive il nome lasciando per sbaglio 2 spazi invece di uno

PIPPO FRANCO
PIPPO FRANCO

la funzione va in errore, scrivendo:
"Indice oltre i limiti della matrice."


Riporto la funzione, come posso modificarla???

Ciao e grazie

-----------------------------------------

'Metto tutto in minuscolo e rimuovo gli spazi all'inizio e alla fine
nome = LCase(nome).Trim()
'Creo un array dove separo il nome dal cognome
Dim temp() As String = nome.Split(" ")
Dim result As String = ""
For Each s As String In temp
'Inserisco come secondo carattere la lettera in maiuscolo
s = s.Insert(1, UCase(s(0)))
'Rimuovo il primo carattere (quello in minuscolo)
s = s.Remove(0, 1)
'Aggiungo la stringa al risultato
result += s + " "
Next
'Ritorno il risultato senza spazi all'inizio e alla fine
Return result.Trim()

-----------------------------------------

totti240282 Profilo | Guru

io mi ricordo che se intervieni sulla cultura,c'è un modo di formattare solo le prime lettere maiuscole,dovresti andare a vedere bene la msdn.
C'è solo un capitano !!!!!!

aiedail92 Profilo | Expert

Ciao

Se non sbaglio quella è la funzione che ti avevo scritto qualche tempo fa...

L'errore deriva dal fatto che, se quando esegui lo split la stringa da usare come splitter si ripete di seguito (in questo caso si ripetono due spazi), nel risultato ottieni un array che contiene delle stringhe vuote. Per eliminare il problema basta aggiungere al metodo Split l'opzione StringSplitOptions.RemoveEmptyEntries:

Public Function GetNomeProprio(ByVal nome As String) As String 'Metto tutto in minuscolo e rimuovo gli spazi all'inizio e alla fine nome = LCase(nome).Trim() 'Creo un array dove separo il nome dal cognome Dim temp() As String = nome.Split(New Char() {" "}, _ StringSplitOptions.RemoveEmptyEntries) Dim result As String = "" For Each s As String In temp 'Inserisco come secondo carattere la lettera in maiuscolo s = s.Insert(1, UCase(s(0))) 'Rimuovo il primo carattere (quello in minuscolo) s = s.Remove(0, 1) 'Aggiungo la stringa al risultato result += s + " " Next 'Ritorno il risultato senza spazi all'inizio e alla fine Return result.Trim() End Function

Altrimenti, come suggeriva totti240282, potresti usare la Culture, e in particolare il metodo ToTitleCase della TextInfo, in questo modo:

Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(nome)

e in questo modo vengono anche lasciati gli spazi ripetuti.

Luca

totti240282 Profilo | Guru

Grazie era proprio questo .
C'è solo un capitano !!!!!!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5