Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Normalizzazione indirizzi

509 views
Skip to first unread message

Massimo Piubelli

unread,
Oct 24, 2006, 9:09:25 AM10/24/06
to
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

eSQueL

unread,
Oct 24, 2006, 9:32:10 AM10/24/06
to
"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

ciroteo

unread,
Oct 24, 2006, 9:39:12 AM10/24/06
to

Massimo Piubelli ha scritto:


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

VT @ home

unread,
Oct 24, 2006, 9:58:14 AM10/24/06
to
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 ...

Massimo Piubelli

unread,
Oct 24, 2006, 10:03:39 AM10/24/06
to
eSQueL wrote:

>
> Se non ti suggeriscono di meglio (ma dubito che accada) puoi usare
> queste.

intanto grazie

>
> Girano su Excel, dividono e uniscono stringhe con qualsiasi
> separatore vuoi usare (spazio, nel tuo caso).
>
> Puoi esportare, elaborare ed reimportare.
>

[CUT]
il problema è che lo spazio (mio separatore) non è il massimo... ovvero in alcuni casi ce ne sono due, in altri tre :-(

Comunque ora guardo bene le funzioni e ci medito

> Ciao.
>
> eSQueL

Grazie e ciao,
Max

eSQueL

unread,
Oct 24, 2006, 10:04:21 AM10/24/06
to

"Massimo Piubelli" <massim...@accessgroup.it.invalid> ha scritto nel
messaggio news:ehl6fk$dm0$1...@tdi.cu.mi.it...
eSQueL wrote:

intanto grazie

> Ciao.
>
> eSQueL

Grazie e ciao,
Max
_________________

Funge anche se lo spazio è ripetuto


Massimo Piubelli

unread,
Oct 24, 2006, 10:04:36 AM10/24/06
to
ciroteo wrote:

>
> dai manda il file ... te lo faccio a manina per 500 euro ...

stavo pensando di prendere unA stagistA infatti ;-)

> o una cassa di soave ...

ecco... già più fattibile

> :-)

Ciao,
Max

Massimo Piubelli

unread,
Oct 24, 2006, 10:06:50 AM10/24/06
to

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


Michele (Giò)

unread,
Oct 24, 2006, 1:22:39 PM10/24/06
to
"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


ciroteo

unread,
Oct 24, 2006, 3:54:54 PM10/24/06
to

"Massimo Piubelli" <massim...@accessgroup.it.invalid> ha scritto nel
messaggio news:ehl6he$do3$1...@tdi.cu.mi.it...
ciroteo wrote:

ecco... già più fattibile

> :-)

Ciao,
Max


;-)


Sergio MAZZA

unread,
Oct 25, 2006, 6:50:44 AM10/25/06
to
"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

0 new messages