Newsgroup: it.comp.appl.access
Titolo: dividere il Campo Cognome Nome  in 2 campi

N.G. Buona Serata
Ho un piccolo problema.
In una tavella ho il campoCognomeNome, vorrei dividere il campo in due campi
Campo: Cognome
Campo: Nome
nel Campo Cognome nome il contenuto di un record P.E. Della Valle 
MariaGrazia
Vorrei dividerlo in
Cognome [Della Valle]
Nome [Maria Grazia]
Grazie per l'aiuto
-- 
Carlo
:-)
--------------------------------------------------------------------------------
La mia Cartella di Posta in Arrivo è protetta con SPAMfighter
794 messaggi contenenti spam sono stati bloccati con successo.
Scarica gratuitamente SPAMfighter! 

 :-)
Ciao Carlo.
Questo è uno dei problemi meno semplici da ottimizzare, e comprenderai
anche il perchè....
La soluzione non c'è puoi provare ad usare una Routine che trovi nel
SitoComune(fai qualche ricerca) ma di certo non otterrai un risultato
perfetto...!
Il Nome ed il cognome possono essere composti da un numero variabili di
parole e distinguere se la parola successiva fà parte del nome o del
cognome è molto difficoltoso...
Della Valle MariaGrazia
Della Valle Maria
Bianca MariaGrazia
Lo Tito PierSilvio Antonino
ecc.... 
Saluti
@Alex

 ha scritto nel messaggio
news:1162059661.0...@e64g2000cwd.googlegroups.com...
Carlo ha scritto:

Ciao Carlo.


Della Valle MariaGrazia
Della Valle Maria
Bianca MariaGrazia
Lo Tito PierSilvio Antonino
ecc....
Saluti
@Alex
E' solo un'idea, ma ammettiamo di avere il campo CodiceFiscale vicino ai
campi Cognome e Nome.
Potremmo testare la prima occorrenza delle consonanti nei primi tre
caratteri del CF per isolare il cognome e quella dei secondi tre caratteri
per il nome.
Certo, rimarrebbero aperti problemi diversi ma, forse, potremmo
circoscrivere l'incidenza dell'errore.
Domani ci provo (ma se, com'è probabile, qualcuno ci ha già provato, vi
prego di dirmelo per riparmiarmi la fatica :)).
Ciao.
eSQueL

 eSQueL
L'idea può essere valida, ma di dubbia utilità...
La cosa più utile come si evince dal problema è avere 2 campi....!
Bene, con la semplice distinzione dello Spazio, a mio avviso si risolve
il 90% dei
casi, per il rimanente 10%, a meno di non essere l'anagrafe di
Milano/Roma/Napoli credo
che la cosa vada valutata...
Se rimangono fuori 100 casi direi che non varrebbe la pena di scrivere
del codice per
poi usarlo 1 volta per 100 records... visto che le parole che andrai a
scrivere ed il tempo
impiegato per farlo è decisamente superiore del tempo di modifica....
C'è poi sempre da sperare che non abbiano inserito Cognome+Nome e
Nome+Cognome come spesso avviene quando queste cose vengono lasciate al
libero arbitrio....
Per ricavare le consonanti, la cosa più semplice come in questi casi
è farsi una Stringa
con tutte le vocali, quindi ciclare la stringa del Nome e prendere
singolarmente un carattere per volta verificare se è presente nella
stringa delle vocali(è una vocale, altrimeni è una consonante)...!
Const myVocali="aeiou"
Dim strIn as string
Dim x as Integer
Dim strX as string
strIn="Della Valle MariaGrazia"
For x=1 to Len(strIn)
      strX=Mid$(strIn,x,1)
      If instr(myVocali,strX)>0 then
           ' Sono una Vocale la butto
      Else
           ' Sono una consonante
           ' incremento il counter(fino a 3)
           ' quando ho 3 consonanti(Counter=3) leggo la stringa fino
           ' al primo spazio successivo ed ottengo il cognome
           ' il resto è il  Nome
      End If
Next
Ciao
@Alex

 ha scritto nel messaggio 
news:1162074512....@k70g2000cwa.googlegroups.com...
eSQueL ha scritto:






Const myVocali="aeiou"


Ciao
@Alex
In effetti, l'idea era quella di beccare le consonanti (o vocali in caso di 
due sole consonanti) del secondo cognome per isolare l'intero cognome 
rispetto al nome (che avrebbe occupato il resto della stringa).
Ma ho verificato che partivo dal presupposto sbagliato che l'algoritmo del 
cf tenesse conto del secondo cognome. Così non è. In effetti, CAPRINI 
BERTONI GIULIO dà "CPRGLI...".
Ciao.
eSQueL

>
Beh ragazzi, l'idea di utilizzare il codice fiscale per tentare di dare un senso concreto al nome e 
al cognome, è un'idea stratosferica! Se mi permetto di dire la mia, se vi trovate di fronte ad un 
nome del tipo
Alessandra Alessandro
Potete provare a vedere se il giorno di nascita del CF è maggiore di 40, in modo da risolvere il 
caso per quel che riguarda il sesso. Ma lo sapevate gia vero?
Buona domenica a tutti
Michele

 BERTONI GIULIO dà "CPRGLI...".
Il presupposto non mi sembra errato. Se il nome e' dato dalla seconda 
tripletta, individuato il nome, tutto quello che c'e' davanti e' Cognome 
e tutto quello che c'e' dopo e' Nome.
--
ac

 Sito Comune
Grazie di cuore
;-) 

Alessandro Cara ha scritto:

Forse ho capito male, ma:
CAPRINI BERTONI GIULIO
CF=CPRGLI
Se è stato inserito Cognome e Nome, ed essendo la 2° Tripletta come
la distingui...?
devi cercare le consonanti della 2° Tripletta in tutte le parole.....
a mio avviso è fallace
in partenza... se non a fronte di moltissimi controlli..., ma siamo
sicuri che convenga..?
@Alex

 sicuri che convenga..?
Mo' vado a pranzo. Oggi pomeriggio posto qualcosa.
Tanto la "Maggica" ha giocato ieri.
--
ac

Alessandro Baraldi wrote:
P.S. Cazzia e dai una mano ad "Access"
Sempre se hai tempo e per favore ;<)
--
ac

Alessandro Cara ha scritto:

Per "maggica" intendi la Lazio...??
Che devo fà...?
Di tempo ne ho poco ma se c'è da divertirsi lo trovo...!
;-)
@Alex

 Per "maggica" intendi la Lazio...??
pfui pure a te, non sono un antilaziale ma non confondiamo i residui 
corporei con la cioccolata.
Pure Valentino ha perso il mondiale puo' essere una giornataccia
--
ac

 Scarica gratuitamente SPAMfighter!
Trovato. L'ho scritto veloce, perciň č molto facile che vi sia piů di un 
errore. Ma con due cognomi e tre nomi funziona discretamente.
Prende la stringa intera e restituisce due sottostringhe (Surname e Name).
Sub prova()
    Dim Stringa, CodFis As String, SurName As String, Name As String
    Dim Ch1 As String, Ch2 As String, found As Boolean
    Dim i As Long, ii As Long
    CodFis = "CPRGLI06R55F216B"
    Name = "CAPRINI BERTONI GIULIA MARIA LUCIANA"
    Stringa = SplitName(CodFis, Name)
    i = 0
    ii = 0
'Estrae le triplette
    Ch1 = Left(CodFis, 3)
    Ch2 = Mid(CodFis, 4, 3)
        For ii = 0 To 2
            If InStr(1, Stringa(i), Mid(Ch1, i + 1, 1)) <> 0 Then found = 
True
        Next ii
        If found = True Then SurName = SurName & Stringa(i)
        found = False
    For i = 1 To UBound(Stringa)
        ii = 0
        For ii = 0 To 2
            If InStr(1, Stringa(i), Mid(Ch2, i + 1, 1)) <> 0 Then found = 
True
        Next ii
        If found = False Then SurName = SurName & " " & Stringa(i)
        If i > 1 And found = True Then Name = Name & " " & Stringa(i)
    Next i
End Sub
Function SplitName(cf As String, Nome As String) As Variant
'Estrae i token dalla stringa memorizzandoli
'nella matrice restituita
    Dim token(), SurName As String, i As Long, ii As Long
    ii = 0
    Do Until Nome = ""
        i = InStr(1, Nome, " ")
        ReDim Preserve token(ii)
        If i = 0 Then
            token(ii) = Nome
            Exit Do
        End If
        token(ii) = Left(Nome, i)
        token(ii) = Trim(token(ii))
        Nome = Replace(Nome, token(ii), "")
        Nome = Trim(Nome)
        ii = ii + 1
    Loop
    SplitName = token
    Nome = ""
End Function
Ciao.
eSQueL 

Ho corretto qualche errore. Adesso sembra più robusta.
Sub SplitFieldName()
    Dim Stringa, CodFis As String, SurName As String, Name As String
    Dim Ch1 As String, Ch2 As String, found As Boolean
    Dim i As Long, ii As Long, iii As Long, NameDirty As Boolean
    CodFis = "DPLBRN01A01F205W"
    Name = "DE' PAOLI CIRIMBELLI BRUNO MARIO"
    Stringa = SplitName(Name)
    i = 0
    ii = 0
    iii = 1
    NameDirty = False
'Estrae le triplette
    Ch1 = Left(CodFis, 3)
    Ch2 = Mid(CodFis, 4, 3)
'Individua il primo cognome
        For ii = 0 To 2
            If InStr(1, Stringa(i), Mid(Ch1, i + 1, 1)) <> 0 Then found = 
True
        Next ii
'e lo assegna alla variabile
        If found = True Then SurName = SurName & Stringa(i)
        found = False
'Individua le sottostringhe del cognome e del nome
    For i = 1 To UBound(Stringa)
        ii = 0
        For ii = 0 To 2
            If InStr(1, Stringa(i), Mid(Ch2, iii, 1)) <> 0 Then
                found = True
            Else
                found = False
            End If
            iii = iii + 1
        Next ii
'Assegna i valori
        If found = False And NameDirty = False Then SurName = SurName & " " 
& Stringa(i)
        If found = True Or NameDirty = True Then
            Name = Name & " " & Stringa(i)
            NameDirty = True
        End If
        iii = 1
    Next i
    Name = Trim(Name)
End Sub
Function SplitName(Nome As String) As Variant
'Estrae i token dalla stringa Nome memorizzandoli
'nella matrice restituita
    Dim token(), SurName As String, i As Long, ii As Long
    ii = 0
    Do Until Nome = ""
        i = InStr(1, Nome, " ")
        ReDim Preserve token(ii)
        If i = 0 Then
            token(ii) = Nome
            Exit Do
        End If
        token(ii) = Left(Nome, i)
        token(ii) = Trim(token(ii))
        Nome = Replace(Nome, token(ii), "")
        Nome = Trim(Nome)
        ii = ii + 1
    Loop
    SplitName = token
    Nome = ""
End Function
Ciao
eSQueL