Newsgroup: it.comp.appl.access
Titolo: Normalizzazione indirizzi

Ciao a tutti,
sono alle prese con la normalizzazione di un DB.
Ora il "programmatore" che l'ha impostato ha seguito alla perfezione le regole della normalizzazione, tra cui particolare attenzione ha rivolto alla prima. Infatti il campo "indirizzo" contiene
VIA LE MANI DAL NASO,       00100       MILANO
Ora, vorrei provare a fare una normalizzazione dei dati, ma (ovviamente) il numero di caratteri non corrisponde mai...
Per carità, sono un migliaio di clienti, ma se gli dico di farlo a manina mi mandano a quel paese (con il cap davanti pure)
Qualsiasi idea/suggerimento è bene accetto...
Ciao, e grazie in anticipo a tutti
Max

"Massimo Piubelli" <massim...@accessgroup.it.invalid> ha scritto nel 
messaggio news:ehl39v$8to$1...@tdi.cu.mi.it...
Ciao a tutti,



_________________________________________
Se non ti suggeriscono di meglio (ma dubito che accada) puoi usare queste.
Girano su Excel, dividono e uniscono stringhe con qualsiasi separatore vuoi 
usare (spazio, nel tuo caso).
Puoi esportare, elaborare ed reimportare.
Sub aSplit()
'/////////////
'Funzione SPLIT. Divide una stringa in n-sottostringhe.
'Fuoco sulla prima cella a dx di quella da dividere.
'Output nelle celle adiacenti di dx.
'/////////////
    Dim a As Range, b() As String, c As String
    c = InputBox("Inserisci il criterio di delimitazione delle singole 
stringhe")
    Do Until Selection.Offset(0, -1) = ""
        If Selection.Offset(0, -1) = "" Then
            Selection.Offset(1, 0).Select
        Else
            Set a = Selection.Offset(0, -1)
            b() = Split(a, c, -1, vbBinaryCompare)
            ActiveCell = b(0)
                For i = 1 To UBound(b)
                    Selection.Offset(0, i) = b(i)
                Next
                Selection.Offset(1, 0).Select
        End If
    Loop
End Sub
Sub aJoin()
'Fuoco sulla prima colonna di sx ("A")
Dim c() As String, a As String, b As String, d As Range
Dim Col As Integer, i As Integer, separatore As String
    separatore = InputBox("Inserisci il separatore che intendi usare", 
"Kronos")
Do Until ActiveCell = ""
    If Selection.Offset(0, 1).Value <> "" Then Range(Selection, 
Selection.End(xlToRight)).Select
    Set d = Selection
        Col = d.count
            Selection.End(xlToLeft).Select
                a = ActiveCell
    i = 1
    For i = 1 To Col
        Selection.Offset(0, 1).Select
        b = ActiveCell
        a = a & separatore & "" & b
    Next i
    Selection.Offset(0, -Col).Select
    ActiveCell = a
        Selection.Offset(1, 0).Select
            a = ActiveCell
            Col = 0
Loop
End Sub
Ciao.
eSQueL

Massimo Piubelli ha scritto:

dai manda il file ... te lo faccio a manina per 500 euro ... o una
cassa di soave ...
:-)

Il Tue, 24 Oct 2006 15:09:25 +0200, "Massimo Piubelli"
<massim...@accessgroup.it.invalid> ha scritto:

Potresti:
- trimmare la stringa del contenuto del campo indirizzo
- scandirla da destra verso sinistra e:
a) cercare la posizione del primo spazio
b) assumere che la città sia ciò che segue la posizione al punto a)
c) estrarre la sottostringa fino alla posizione a)
d) ripetere il passo a) sulla stringa ottenuta al passo c)
e) assumere che il cap sia ciò che segue la posizione al punto d)
f) assumere che il toponimo sia la left della stringa al passo c) fino
alla posizione al passo d)
In pratica:
se Indirizzo="VIA LE MANI DAL NASO,       00100       MILANO"
il primo spazio da destra verso sinistra è in posizione 40, quindi
Città=Mid$(Indirizzo,41)
Applicando Indirizzo=Trim$(Left$(Indirizzo,41)) ottieni
Indirizzo="VIA LE MANI DAL NASO,       00100"
dove il primo spazio da destra verso sinistra è in posizione 28,
quindi
CAP=Mid$(Indirizzo,29)
e Toponimo=Trim$(Left$(Indirizzo,28))
Se però
Indirizzo="VIA LE MANI DAL NASO,       00123   S. Giovanni in
Persiceto"
non può funzionare.
In alternativa, potresti cercare nella stringa dell'indirizzo i valori
dei CAP e dei comuni letti dall'archivio delle poste.
Però se Indirizzo contiene Incisa V.no non lo troverai mai, dato che
la denominazione ufficiale è Incisa in Val d'Arno ...
Forse, combinando i due metodi ...

 eSQueL
Grazie e ciao,
Max

 eSQueL
Grazie e ciao,
Max
_________________
Funge anche se lo spazio è ripetuto

 :-)
Ciao,
Max


Infatti la mia prima idea era di fare un parse della striga per trovare i 5 valori numerici del cap
determinato quello, a sinistra c'è l'indirizzo a destra la località
Perderei il campo della provincia che farebbe anche lo stesso
Grazie mille anche a te.
Ciao,
Max

"Massimo Piubelli" <massim...@accessgroup.it.invalid> ha scritto nel messaggio 
news:ehl39v$8to$1...@tdi.cu.mi.it...
Ciao a tutti,



Secondo me ti conviene individiare per primo il CAP partendo da destra (lato città), in quanto non 
esistono città che annoverano nel loro nome numeri a 5 cifre. Non partire da sinistra (lato 
indirizzo) in quanto potrebbero esserci vie (!!!) del tipo
Via milano 12590
e 12590 ti diventerebbe CAP e non numero civico.
Una volta individuato il CAP puoi tranquillamente ricavare indirizzo e città.
Una soluzione....
Michele

 :-)
Ciao,
Max
;-)

"Massimo Piubelli" <massim...@accessgroup.it.invalid> ha scritto nel 
messaggio news:ehl39v$8to$1...@tdi.cu.mi.it...
Ciao a tutti,



[risposta]
Prova così: sostituisci (a più riprese) la sequenza di 2 spazi con un 
carattere "strano" es. ~ = ALT+(pad numerico)126.
Poi sostituisci (a più riprese) tutte le sequenze di 2 ~ con 1 ~.
Alla fine dovresti ottenere i dati separati dal carattere particolare; lo 
utilizzi insieme alla funzione Split per separare le informazioni...
Ciao.
P.S. Ovviamente fai prima una copia della tabella.
-- 
Sergio MAZZA