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

Ordinare colonna foglio excel con indirizzi IP

877 views
Skip to first unread message

Ari

unread,
Apr 12, 2010, 9:44:51 AM4/12/10
to
Ciao a tutti,
ho una colonna excel con oindirizzi IP e vorrei ordinarla in ordine
crescente.
Come posso fare?
Esiste qualche tipo di filtro o applicazione su indirizzi IP?
Ecco un esempio della mia colonna originale:

IP
10.10.64.34

10.10.64.37

10.10.64.35

10.10.64.43


Ed ecco quella che vorrei avere:

IP
10.10.64.34

10.10.64.35

10.10.64.37

10.10.64.43

Potete aiutarmi?

Grazie


plinius

unread,
Apr 12, 2010, 11:27:37 AM4/12/10
to

"Ari" <pus...@gmail.com> ha scritto nel messaggio
news:ed90c1cc-4ad0-4349...@i37g2000yqn.googlegroups.com...
Se scindi la colonna nelle 4 componenti (Dati\Testo in colonne - separatore
"."), poi ordini come vuoi.
Oppure con una colonna d'appoggio accanto alla tua trasformi
10.10.64.34 in 010.010.064.034 che puoi agevolmente ordinare
Per la trasformazione, per esempio, una UDF:
-----------
Public Function IP(arg As String) As String
Dim re, part, i As Long
Set re = CreateObject("VbScript.RegExp")
With re
.Global = True
.Pattern = "\d.?"
Set part = .Execute(arg)
End With
For i = 0 To part.Count - 1
IP = IP & Right("000" & part(i), 3) & "."
Next
IP = Left(IP, Len(IP) - 1)
End Function
------------

Ciao,
E.


Scossa

unread,
Apr 12, 2010, 2:55:58 PM4/12/10
to
In article <JZGwn.156783$9f6.2...@twister1.libero.it>,
punto.l...@LEVARElibero.it says...

>
> Per la trasformazione, per esempio, una UDF:
> -----------
> Public Function IP(arg As String) As String
> Dim re, part, i As Long
> Set re = CreateObject("VbScript.RegExp")
> With re
> .Global = True
> .Pattern = "\d.?"
> Set part = .Execute(arg)
> End With
> For i = 0 To part.Count - 1
> IP = IP & Right("000" & part(i), 3) & "."
> Next
> IP = Left(IP, Len(IP) - 1)
> End Function
> ------------
>

Ciao Plinius,

una variante più veloce, ma anche una scusa per salutarti:

Public Function IPbis(ByVal arg As String) As String

Dim aParte() As String
Dim j As Integer

aParte = Split(arg, ".")

For j = 0 To 2
IPbis = IPbis & Format(aParte(j), "000") & "."
Next
IPbis = IPbis & Format(aParte(j), "000")

End Function

--
Bye!
Scossa

r

unread,
Apr 13, 2010, 5:33:48 PM4/13/10
to
On 12 Apr, 17:27, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "Ari" <puss...@gmail.com> ha scritto nel messaggionews:ed90c1cc-4ad0-4349...@i37g2000yqn.googlegroups.com...
> E.- Nascondi testo citato
>
> - Mostra testo citato -

ciao a tutti,
ci provo anch'io ...
Function Format_IP(sIP As String) As String
'restituisce un indirizzo IP nel formato
'a 3 cifre fisse
'passando per es.1.12.123.4 restituisce
'001.012.123.004
Dim re As New RegExp


With re
.Global = True

.Pattern = "(\d{1,3})($|\.)"
Format_IP = .Replace(sIP, "00$&")
.Pattern = "0+(\d{3})($|\.)"
Format_IP = .Replace(Format_IP, "$1$2")
End With
End Function

comunque prima sempre meglio verificare si tratti veramente di un
indirizzo IP ...

Function IsIP(sIP As String) As Boolean
'verifica un indirizzo IP
Dim re
Set re = CreateObject("vbscript.regexp")
If Right(sIP, 1) <> "." Then
re.Pattern = "^((25[0-5]|2[0-4]\d" & _
"|1\d\d|[1-9]\d|\d)" & _
"(\.|$)){4}"
IsIP = re.Test(sIP)
End If
End Function

saluti
r

Scossa

unread,
Apr 14, 2010, 7:49:17 AM4/14/10
to
On 12 Apr, 17:27, "plinius" <punto.linea...@LEVARElibero.it> wrote:

Ciao Plimius,

> Per la trasformazione, per esempio, una UDF:
> -----------
> Public Function IP(arg As String) As String


Mi sembra che abbia dei problemi, ad esempio con:

10.108.66.232 restituisce 010.010.08..066.023.002

Bye!
Scossa

Scossa

unread,
Apr 14, 2010, 7:50:40 AM4/14/10
to
On 13 Apr, 23:33, r <robb....@gmail.com> wrote:
> Function Format_IP(sIP As String) As String
cut


Dovrò proprio mettermi a studiarle 'ste RegExp !

Però sono leeente :-)

Bye!
Scossa


r

unread,
Apr 14, 2010, 8:44:32 AM4/14/10
to

intanto una versione con singolo pattern:

Public Function Ipr(ByVal arg As String) As String 'variant?
Dim re, v
Set re = CreateObject("VbScript.Regexp")
arg = arg


With re
.Global = True

.Pattern = "0*?(\d{1,3})(\.|$)"
Ipr = .Replace(.Replace(arg, "00$1$2"), "$1$2")
End With
End Function

per il resto puoi leggere se hai voglia qui :-)

http://groups.google.it/group/microsoft.public.it.office.excel/msg/d4a8e2779fca87af?hl=it

ciao
r

plinius

unread,
Apr 14, 2010, 8:46:13 AM4/14/10
to

"Scossa" <scos...@gmail.com> ha scritto nel messaggio
news:a383b2d3-e479-4413...@x3g2000yqd.googlegroups.com...

Vero...:-\ meglio cosě:
------------


Public Function IP(arg As String) As String

Dim re, part, i As Long
Set re = CreateObject("VbScript.RegExp")
With re
.Global = True

.Pattern = "\d+.|\d+"


Set part = .Execute(arg)
End With

If part.Count <> 4 Then Exit Function
For i = 0 To 2
IP = IP & Right("000" & part(i), 4)
Next


IP = IP & Right("000" & part(i), 3)

End Function
---------------
Ciao,
E. :-)


r

unread,
Apr 14, 2010, 8:58:18 AM4/14/10
to
> http://groups.google.it/group/microsoft.public.it.office.excel/msg/d4...
>
> ciao
> r

ovviamente era da ripulire :-) ... non effettua verifica sulla
validità dell'ip

Public Function Ipr(ByVal arg As String) As String

Dim re


Set re = CreateObject("VbScript.Regexp")

With re
.Global = True
.Pattern = "0*?(\d{1,3})(\.|$)"
Ipr = .Replace(.Replace(arg, "00$1$2"), "$1$2")
End With
End Function

saluti
r

Scossa

unread,
Apr 14, 2010, 9:16:56 AM4/14/10
to
On 14 Apr, 14:44, r <robb....@gmail.com> wrote:
>
> per il resto puoi leggere se hai voglia qui :-)
>
> http://groups.google.it/group/microsoft.public.it.office.excel/msg/d4...


Letto, interessante StopWatch, ma soprattutto:

r > sulla potenzialità di reg exp ... non discuto perchè
r > 1 ancora non ho le conoscenze adeguate

LOL!
a leggerlo adesso che ci fai il caffè con le RegExp :-)

> intanto una versione con singolo pattern:
> Public Function Ipr(ByVal arg As String) As String 'variant

Però resta più lenta della mia :-))
test fattto ad occhio A1:A3000 lo stesso IP
in B1 di volta in volta le tre formule, copia-incolla fino a B3000.
Contando a mente 7 secondi la tua, 5 la mia :-)))

Bye!
Scossa

plinius

unread,
Apr 14, 2010, 9:22:50 AM4/14/10
to

"Scossa" <scos...@gmail.com> ha scritto nel messaggio
news:15517124-8cab-4fe0...@y17g2000yqd.googlegroups.com...

On 14 Apr, 14:44, r <robb....@gmail.com> wrote:
>
> per il resto puoi leggere se hai voglia qui :-)
>
> http://groups.google.it/group/microsoft.public.it.office.excel/msg/d4...


Letto, interessante StopWatch, ma soprattutto:

r > sulla potenzialit� di reg exp ... non discuto perch�


r > 1 ancora non ho le conoscenze adeguate

LOL!
a leggerlo adesso che ci fai il caff� con le RegExp :-)

> intanto una versione con singolo pattern:
> Public Function Ipr(ByVal arg As String) As String 'variant

Per� resta pi� lenta della mia :-))


test fattto ad occhio A1:A3000 lo stesso IP
in B1 di volta in volta le tre formule, copia-incolla fino a B3000.
Contando a mente 7 secondi la tua, 5 la mia :-)))

Bye!
Scossa

********************

Vedi Scossa, usare le regexp per queste cose � come usare una ruspa per
spostare una piuma: certo che fa prima un colibr�!! ehhheheh :-))
La loro potenzialit� sta nel consentirti di
analizzare/smembrare/controllare/parcellizzare/ricomporre/ecc. ecc. stringhe
in modo da riuscire a soddisfare qualunque esigenza si abbia.
In questo roberto � davvero bravo (il maestro) e a leggerlo c'� sempre da
imparare!
...IMHO...
Ciao,
E.


r

unread,
Apr 14, 2010, 10:29:42 AM4/14/10
to
On 14 Apr, 15:16, Scossa <scossa...@gmail.com> wrote:
> On 14 Apr, 14:44, r <robb....@gmail.com> wrote:
>
>
>
> > per il resto puoi leggere se hai voglia qui :-)
>
> >http://groups.google.it/group/microsoft.public.it.office.excel/msg/d4...
>
> Letto, interessante StopWatch, ma soprattutto:
>
> r > sulla potenzialità di reg exp ... non discuto perchè
> r > 1 ancora non ho le conoscenze adeguate
>
> LOL!
> a leggerlo adesso che ci fai il caffè con le RegExp :-)

il senso di farti leggere il link era che ...
va beh mi sembrava d'esserci passato :-)

>
> > intanto una versione con singolo pattern:
> > Public Function Ipr(ByVal arg As String) As String 'variant
>
> Però resta più lenta della mia :-))

beh split non è certo veloce ...
al volo:

Function ip_r2(sIP As String) As String
Dim b() As Byte, i, l As Long
b = sIP
l = 15
ip_r2 = "000.000.000.000"
For i = UBound(b) - 1 To 0 Step -LenB("A")
If b(i) = 46 Then
l = l - l Mod 4
Else
Mid(ip_r2, l, 1) = Chr(b(i))
End If
l = l - 1
Next
End Function

questa non ho provato ma credo darà la paga ...
poi magari si può anche migliorare ... bisogna fare
le prove col cronometro :-)

> test fattto ad occhio A1:A3000 lo stesso IP
> in B1 di volta in volta le tre formule, copia-incolla fino a B3000.
> Contando a mente 7 secondi la tua, 5 la mia :-)))

le regexp sono un mondo molto bello e molto utile
l'associazione tardiva ha dei prezzi da pagare ma
volendo puntare alla velocità con associazione
anticipata le regexp in alcuni casi sono addirittura
più rapide

>
> Bye!
> Scossa

ciao
r

Scossa

unread,
Apr 14, 2010, 11:22:43 AM4/14/10
to
On 14 Apr, 16:29, r <robb....@gmail.com> wrote:
>
> il senso di farti leggere il link era che ...
> va beh mi sembrava d'esserci passato :-)
>

Infatti, mi ha fatto sorridere

>
> beh split non è certo veloce ...
> al volo:
>
> Function ip_r2(sIP As String) As String

> questa non ho provato ma credo darà la paga ...


> poi magari si può anche migliorare ...

Non così tanto: ho dovuto portare a 6000 righe per notare che la tua è
un secondo (sempre occhiometrico) più veloce :-)

Ma la tua soluzione è una *fonte di apprendimento* interessantissima e
ti ringrazio (adesso che la rivedo, mi viene in mente che già avevi
sfruttato la gestione a byte in altra occasione).


>
> le regexp sono un mondo molto bello e molto utile
> l'associazione tardiva ha dei prezzi da pagare ma
> volendo puntare alla velocità con associazione
> anticipata le regexp in alcuni casi sono addirittura
> più rapide

Puoi consigliarmi qualche link *valido* sulle RegExp, tra i tanti
suggeriti da google?

Bye!
Scossa

r

unread,
Apr 14, 2010, 11:33:12 AM4/14/10
to
On 14 Apr, 17:22, Scossa <scossa...@gmail.com> wrote:
> On 14 Apr, 16:29, r <robb....@gmail.com> wrote:
>
>
>
> > il senso di farti leggere il link era che ...
> > va beh mi sembrava d'esserci passato :-)
>
> Infatti, mi ha fatto sorridere
>
>
>
> > beh split non è certo veloce ...
> > al volo:
>
> > Function ip_r2(sIP As String) As String
> > questa non ho provato ma credo darà la paga ...
> > poi magari si può anche migliorare ...
>
> Non così tanto: ho dovuto portare a 6000 righe per notare che la tua è
> un secondo (sempre occhiometrico) più veloce :-)

beh mi è toccato fare una prova :-)
non che non mi fidi ma parlare di secondi ...
diciamo che più o meno impiega la metà del tempo ...

>
> Ma la tua soluzione è una *fonte di apprendimento* interessantissima e
> ti ringrazio (adesso che la rivedo, mi viene in mente che già avevi
> sfruttato la gestione a byte in altra occasione).

non ho fatto prove in questo contesto ...
potrebbe essere che non sia necessario
visto che la lunghezza della stringa è esigua
certo per stringhe lunghe hai un guadagno notevole
cmunque difficilmente i tempi diventano così critici
da dover usare stratagemmi simili

>
>
>
> > le regexp sono un mondo molto bello e molto utile
> > l'associazione tardiva ha dei prezzi da pagare ma
> > volendo puntare alla velocità con associazione
> > anticipata le regexp in alcuni casi sono addirittura
> > più rapide
>
> Puoi consigliarmi qualche link *valido* sulle RegExp, tra i tanti
> suggeriti da google?

no ... non ancora per lo meno :-)
tempo un paio di settimane potrei linkarti la
*guida* che stiamo scrivendo ...
se però hai fretta ... la guida di vbscript accessibile
dall'editor vbscript di excel ...
è valida ...

>
> Bye!
> Scossa

saluti
r

Scossa

unread,
Apr 14, 2010, 1:48:03 PM4/14/10
to
In article <59446ee3-0b41-4db3-8915-cc308cbc8876
@g30g2000yqc.googlegroups.com>, robb...@gmail.com says...

>
> beh mi è toccato fare una prova :-)
> non che non mi fidi ma parlare di secondi ...
> diciamo che più o meno impiega la metà del tempo ...

Non capisco, a me sul pc di casa, su 6000 righe impiegano sia la tua che la
mia poco più di 1 secondo (sempre occhiometricamente: da quando premo invio
per incollare la formula sulle 6000 celle a quando lo schermo è aggiornato,
per 10000 righe siamo a 2,2 sec. entrambe, sicuramente la maggior parte del
tempo è persa ad aggiornare lo schermo).

> non ho fatto prove in questo contesto ...
> potrebbe essere che non sia necessario
> visto che la lunghezza della stringa è esigua
> certo per stringhe lunghe hai un guadagno notevole
> cmunque difficilmente i tempi diventano così critici
> da dover usare stratagemmi simili

Ma è interessante il "concetto", poi come negli scacchi, bisogna saper
"intuire", quando si presenta una certa posizione, che può essere più
facilmente risolta in un modo piuttosto che nell'altro.

> le regexp sono un mondo molto bello e molto utile
> l'associazione tardiva ha dei prezzi da pagare ma
> volendo puntare alla velocità con associazione
> anticipata le regexp in alcuni casi sono addirittura
> più rapide

???? se ti confesso che non ho capito (associazione tardiva .. anticipata),
mi spieghi terra-terra.

> > Puoi consigliarmi qualche link *valido* sulle RegExp, tra i tanti
> > suggeriti da google?
>
> no ... non ancora per lo meno :-)
> tempo un paio di settimane potrei linkarti la
> *guida* che stiamo scrivendo ...

Aspetto aspetto, vorrà dire che il mondo pazienterà ancora un po' prima di
avere i miei contributi con le RegExp :-))

Grazie ancora Roby.

--
Bye!
Scossa

Mauro Gamberini

unread,
Apr 14, 2010, 2:17:18 PM4/14/10
to
> ???? se ti confesso che non ho capito (associazione tardiva ..
> anticipata),
> mi spieghi terra-terra.
>

Se ho capito.

Per vb6:
http://support.microsoft.com/kb/245115/it

Qui trovi un esempio per vbnet, ma la logica
è la stessa:
http://msdn.microsoft.com/it-it/library/0tcf61s1.aspx

La funzione di Roberto, riscritta in associazione anticipata, dovrebbe
essere:

Public Function f(ByVal arg As String) As String

Dim re As RegExp
Set re = New RegExp


With re
.Global = True
.Pattern = "0*?(\d{1,3})(\.|$)"

f = .Replace(.Replace(arg, "00$1$2"), "$1$2")
End With

Set re = Nothing

End Function

Devi però referenziare la libreria:
Microsoft VBScript Regular Expressions 5.5

Il vantaggio dell'associazione tardiva è, ad esempio,
quando utilizzi Excel da vb6 o da AutoCad e non ne conosci la
versione. Quindi *astrai* la chiamata e verrà
lanciato l'Excel che hai di default sulla macchina,
senza bisogno di riferimenti.
Paghi però in termini di prestazioni(molte volte
è inavvertibile la differenza).

Non utilizzo quasi mai le re. Roberto sarprà
spiegarti se referenziando la libreria rischi
di trovare versioni diverse su macchine diverse.

--
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.answers.microsoft.com/Forums/it-IT/officeexcelit/threads


__________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 5029 (20100414) __________

Il messaggio è stato controllato da ESET NOD32 Antivirus.

www.nod32.it

Scossa

unread,
Apr 14, 2010, 5:12:40 PM4/14/10
to
In article <hq50ro$2no$1...@news.eternal-september.org>,
maurogsc...@RIMUOVEREaliceposta.it says...

> Per vb6:
> http://support.microsoft.com/kb/245115/it
>
> Qui trovi un esempio per vbnet, ma la logica
> è la stessa:
> http://msdn.microsoft.com/it-it/library/0tcf61s1.aspx
>


OPS! adesso ho capito: early e late binding, conosco (piuttosto
superficialmente) l'argomento ma ho sempre usato il termine ingelese, LOL!

>
> Devi però referenziare la libreria:
> Microsoft VBScript Regular Expressions 5.5
>
> Il vantaggio dell'associazione tardiva è, ad esempio,
> quando utilizzi Excel da vb6 o da AutoCad e non ne conosci la
> versione. Quindi *astrai* la chiamata e verrà
> lanciato l'Excel che hai di default sulla macchina,
> senza bisogno di riferimenti.
> Paghi però in termini di prestazioni(molte volte
> è inavvertibile la differenza).
>

Ok, grazie.

--
Bye!
Scossa

r

unread,
Apr 15, 2010, 5:13:12 AM4/15/10
to
On 14 Apr, 20:17, "Mauro Gamberini"

Ciao,

La versione 5.0 di VBScript viene installata
automaticamente con IE a partire dalla versione 4.0
o forse 5.0 ... quindi dal lontano 1998? beh giù di li
Referenziando la libreria bisognerà fare attenzione
la vecchia versione 1.0 pur non differendo nella sostanza
offre minor numero di oggetti e proprietà.

mi accorgo solo ora che l'utile dll Help:
http://support.microsoft.com/dllhelp/?dlltype=prod&l=55&pid=2488&vid=36071&S=1&x=13&y=13
non è più disponibile (da febbraio) speriamo venga presto rimpiazzata

Il consiglio che do io è a chi volesse confrontarsi
con la libreria VBScript (oltre alle RegExp ricordiamolo
contiene il mondo FSO e l'utile Dictionary) è quello di scrivere
codice aggiungendo i riferimenti (dal menu strumenti dell'editor VB
-> riferimenti) In questo caso si avrà
a disposizioni alcuni strumenti (ntellisense e Visualizzatore
Oggetti) utili nella scrittura.
Riadattare poi una porzione di codice all'utilizzo con associazione
tardiva è abbastanza semplice e può essere fatto in poco
tempo a fine stesura.

saluti
r

p.s. per scossa ...
il punto centrale della discussione nata con Norman
(il link che ti segnalai) era proprio quello :-)
Norman poi dimostrò che le differenze nei tempi erano
veramente irrisorie ... e Maurizio ricordò a tutti la
il prezzo da pagare quando si usa un associazione
tardiva

Mauro Gamberini

unread,
Apr 15, 2010, 6:40:21 AM4/15/10
to
> Il consiglio che do io è a chi volesse confrontarsi
> con la libreria VBScript (oltre alle RegExp ricordiamolo
> contiene il mondo FSO e l'utile Dictionary) è quello di scrivere
> codice aggiungendo i riferimenti (dal menu strumenti dell'editor VB
> -> riferimenti) In questo caso si avrà
> a disposizioni alcuni strumenti (ntellisense e Visualizzatore
> Oggetti) utili nella scrittura.
> Riadattare poi una porzione di codice all'utilizzo con associazione
> tardiva è abbastanza semplice e può essere fatto in poco
> tempo a fine stesura.
>

In attesa della guida di Roberto(grande Robby, l'aspetto
con impazienza), questo link:

http://www.regular-expressions.info


__________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 5030 (20100415) __________

Message has been deleted

plinius

unread,
Apr 15, 2010, 7:37:41 AM4/15/10
to

"r" <robb...@gmail.com> ha scritto nel messaggio
news:82f363e5-27ec-46d7...@z7g2000yqb.googlegroups.com...

intanto una versione con singolo pattern:

Public Function Ipr(ByVal arg As String) As String 'variant?
Dim re, v
Set re = CreateObject("VbScript.Regexp")
arg = arg
With re
.Global = True
.Pattern = "0*?(\d{1,3})(\.|$)"
Ipr = .Replace(.Replace(arg, "00$1$2"), "$1$2")
End With
End Function

ciao
r

***********************

Malefico r e malefico "*?"!! :-)
Insomma i Matches riportano tutte le cifre di ciascuno dei quattro gruppi di
numeri, zeri inclusi, ma il 1^ dei 2 SubMatches (il secondo, se presente, č
il ".") includendo al massimo 3 cifre, se del caso sottrae degli zeri (fino
alle 3 cifre massime previste) al gruppo "0*?".
Dopo il primo Replace in cui aggiungi gli zeri, il secondo Replace,
ovviamente, conclude brillantemente il lavoro!

Quello che non capisco:
- ma allora la ricerca avviene al contrario (dalla fine all'inizio)?
- e, se sě, perché non funziona anche solo con "0*" senza "?"...

Uff... torno a studiare...
Ciao,
E.


r

unread,
Apr 15, 2010, 8:52:51 AM4/15/10
to
On 15 Apr, 13:37, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "r" <robb....@gmail.com> ha scritto nel messaggionews:82f363e5-27ec-46d7...@z7g2000yqb.googlegroups.com...

>
> intanto una versione con singolo pattern:
>
> Public Function Ipr(ByVal arg As String) As String 'variant?
> Dim re, v
> Set re = CreateObject("VbScript.Regexp")
> arg = arg
> With re
>     .Global = True
>     .Pattern = "0*?(\d{1,3})(\.|$)"
>     Ipr = .Replace(.Replace(arg, "00$1$2"), "$1$2")
> End With
> End Function
>
> ciao
> r
>
> ***********************
>
> Malefico r  e malefico "*?"!!  :-)
> Insomma i Matches riportano tutte le cifre di ciascuno dei quattro gruppi di
> numeri, zeri inclusi, ma il 1^ dei 2 SubMatches (il secondo, se presente, è

> il ".") includendo al massimo 3 cifre, se del caso sottrae degli zeri (fino
> alle 3 cifre massime previste) al gruppo "0*?".
> Dopo il primo Replace in cui aggiungi gli zeri, il secondo Replace,
> ovviamente, conclude brillantemente il lavoro!
>
> Quello che non capisco:

sei già a buon punto quindi :-)
anche se la tua è un po' ... hum :-)

> - ma allora la ricerca avviene al contrario (dalla fine all'inizio)?

da sinistra a destra ...
prova a impostare a false la proprietà
global

> - e, se sì, perché non funziona anche solo con "0*" senza "?"...

* *? e ? sono tre diversi qualificatori
fanno cose diverse :-)

>
> Uff... torno a studiare...

dai dai ... studiando si ... impara :-)
già che ci sei ti do' un po' di materiale didattico :-)

Public Function Ipr2(ByVal arg As String) As String


Dim re, v
Set re = CreateObject("VbScript.Regexp")

With re
.Global = True

.Pattern = "(\d{1,3})(\.|$)"
For Each v In re.Execute(arg)
Ipr2 = Ipr2 & Format(v.SubMatches(0), "000") & v.SubMatches(1)
Next
End With
End Function

> Ciao,
> E.

ciao
r

plinius

unread,
Apr 15, 2010, 9:02:04 AM4/15/10
to

"r" <robb...@gmail.com> ha scritto nel messaggio
news:aa9a057a-d621-4401...@s9g2000yqa.googlegroups.com...

On 15 Apr, 13:37, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "r" <robb....@gmail.com> ha scritto nel
> messaggionews:82f363e5-27ec-46d7...@z7g2000yqb.googlegroups.com...
dai dai ... studiando si ... impara :-)
già che ci sei ti do' un po' di materiale didattico :-)

Public Function Ipr2(ByVal arg As String) As String
Dim re, v
Set re = CreateObject("VbScript.Regexp")
With re
.Global = True
.Pattern = "(\d{1,3})(\.|$)"
For Each v In re.Execute(arg)
Ipr2 = Ipr2 & Format(v.SubMatches(0), "000") & v.SubMatches(1)
Next
End With
End Function

ciao
r
****************

Questa si capisce, è di "*?" che non so nulla! :-\
Perché non lo trovo da nessuna parte?

Mmmmmmh,
E. :-)


Mauro Gamberini

unread,
Apr 15, 2010, 9:12:53 AM4/15/10
to
> Questa si capisce, è di "*?" che non so nulla! :-\
> Perché non lo trovo da nessuna parte?
>

Sito linkato stamattina:

http://www.regular-expressions.info/reference.html

*? (lazy star)

plinius

unread,
Apr 15, 2010, 9:25:17 AM4/15/10
to

"Mauro Gamberini" <maurogsc...@RIMUOVEREaliceposta.it> ha scritto nel
messaggio news:hq73d1$oa9$1...@news.eternal-september.org...
>> Questa si capisce, � di "*?" che non so nulla! :-\
>> Perch� non lo trovo da nessuna parte?

>>
>
> Sito linkato stamattina:
>
> http://www.regular-expressions.info/reference.html
>
> *? (lazy star)
>
> --
> ---------------------------
> Mauro Gamberini
> Microsoft MVP - Excel
> http://www.riolab.org/
> http://www.maurogsc.eu/
> http://social.answers.microsoft.com/Forums/it-IT/officeexcelit/threads
>
>
>
>
> __________ Informazioni da ESET NOD32 Antivirus, versione del database
> delle firme digitali 5030 (20100415) __________
>
> Il messaggio � stato controllato da ESET NOD32 Antivirus.
>
> www.nod32.it
>
>


"This construct is often excluded from documentation because of its limited
use."
Ecco, io ero capitato dove (da pigri) non parlano del "?" pigro...

Grazie Mauro, ora � tutto chiaro! :-)


r

unread,
Apr 15, 2010, 9:26:11 AM4/15/10
to
On 15 Apr, 15:02, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "r" <robb....@gmail.com> ha scritto nel messaggionews:aa9a057a-d621-4401...@s9g2000yqa.googlegroups.com...

ok ...
*? è un quantificatore Lazy
mentre *
è greedy
il primo tenta il confronto col minor numero di caratteri possibili
quindi
* zero o più corrispondenze mentre *? è la prima occorrenza che
consuma il minor numero di ripetizioni possibili
sono 2 cose diverse

p.s.
grazie Balena per avermelo insegnato
se no col cavolo che ci capivo qualcosa :-)

plinius

unread,
Apr 15, 2010, 9:24:53 AM4/15/10
to

"r" <robb...@gmail.com> ha scritto nel messaggio
news:862f4386-e97c-4441...@j21g2000yqh.googlegroups.com...

On 15 Apr, 15:02, "plinius" <punto.linea...@LEVARElibero.it> wrote:
> "r" <robb....@gmail.com> ha scritto nel
> messaggionews:aa9a057a-d621-4401...@s9g2000yqa.googlegroups.com...
> On 15 Apr, 13:37, "plinius" <punto.linea...@LEVARElibero.it> wrote:> "r"
> <robb....@gmail.com> ha scritto nel
> > messaggionews:82f363e5-27ec-46d7...@z7g2000yqb.googlegroups.com...
>
> dai dai ... studiando si ... impara :-)
> giŕ che ci sei ti do' un po' di materiale didattico :-)

>
> Public Function Ipr2(ByVal arg As String) As String
> Dim re, v
> Set re = CreateObject("VbScript.Regexp")
> With re
> .Global = True
> .Pattern = "(\d{1,3})(\.|$)"
> For Each v In re.Execute(arg)
> Ipr2 = Ipr2 & Format(v.SubMatches(0), "000") & v.SubMatches(1)
> Next
> End With
> End Function
>
> ciao
> r
> ****************
>
> Questa si capisce, č di "*?" che non so nulla! :-\

> Perché non lo trovo da nessuna parte?
>
> Mmmmmmh,
> E. :-)

ok ...
*? č un quantificatore Lazy
mentre *
č greedy


il primo tenta il confronto col minor numero di caratteri possibili
quindi

* zero o piů corrispondenze mentre *? č la prima occorrenza che


consuma il minor numero di ripetizioni possibili
sono 2 cose diverse

p.s.
grazie Balena per avermelo insegnato
se no col cavolo che ci capivo qualcosa :-)

********************************

Eh adesso me lo dici eh?! :-\

emmenomalechecčanchemauro... eh eh :-)


Mauro Gamberini

unread,
Apr 15, 2010, 9:32:00 AM4/15/10
to
> p.s.
> grazie Balena per avermelo insegnato
> se no col cavolo che ci capivo qualcosa :-)
>

LOL!

__________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 5030 (20100415) __________

Il messaggio è stato controllato da ESET NOD32 Antivirus.

www.nod32.it

Mauro Gamberini

unread,
Apr 15, 2010, 9:45:01 AM4/15/10
to
> emmenomalechecèanchemauro... eh eh :-)
>

Se lo trasformi in emmenomalechemaurocè e lo
metti in musica, mi presento alle prossime elezioni... 8-)

plinius

unread,
Apr 15, 2010, 9:51:05 AM4/15/10
to

"Mauro Gamberini" <maurogsc...@RIMUOVEREaliceposta.it> ha scritto nel
messaggio news:hq759a$70o$1...@news.eternal-september.org...
>> emmenomalechecčanchemauro... eh eh :-)
>>
>
> Se lo trasformi in emmenomalechemaurocč e lo

> metti in musica, mi presento alle prossime elezioni... 8-)
>
>


Anche tu a far danni??? :-\
Meglio di no, dŕi... resta tra le persone utili! :-))


r

unread,
Apr 15, 2010, 5:09:35 PM4/15/10
to
> > Uff... torno a studiare...
>
> dai dai ... studiando si ... impara :-)
> già che ci sei ti do' un po' di materiale didattico :-)

p.s.
mi sono accorto rileggendo che il tono potrebbe sembrare
supponente ... ero di fretta e voleva solo essere solo un sincero
incitamento ...
preferisco le bastonate alle lusinghe ... da quelle si impara di
più ...
così dai ... studia e bastona che sai farlo a perfezione ... ecco
questo era il senso
Saluti
r

plinius

unread,
Apr 15, 2010, 5:57:52 PM4/15/10
to

"r" <robb...@gmail.com> ha scritto nel messaggio
news:c8b4e3df-a7c7-42d1...@b23g2000yqn.googlegroups.com...

> > Uff... torno a studiare...
>
> dai dai ... studiando si ... impara :-)
> gi� che ci sei ti do' un po' di materiale didattico :-)

p.s.
mi sono accorto rileggendo che il tono potrebbe sembrare
supponente ... ero di fretta e voleva solo essere solo un sincero
incitamento ...
preferisco le bastonate alle lusinghe ... da quelle si impara di

pi� ...
cos� dai ... studia e bastona che sai farlo a perfezione ... ecco


questo era il senso
Saluti
r

*****************

Capito perfettamente roby, non preoccuparti! :-)
So bene quanto non so, e imparare mi piace. Da chi � in grado di darmi
lezioni, ben vengano gli sproni... e anche le bastonature!
Ciao,
E.


Mauro Gamberini

unread,
Apr 16, 2010, 3:25:38 AM4/16/10
to
> So bene quanto non so
>

Un vero assurdo logico... ;-)
... tipo: io mento sempre... ;-)

Sto giocando, eh.

__________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 5032 (20100415) __________

Nur

unread,
Apr 16, 2010, 5:49:51 AM4/16/10
to
On 14 Apr, 14:44, r <robb....@gmail.com> wrote:

> intanto una versione con singolo pattern:
>

> Public Function Ipr(ByVal arg As String) As String 'variant?


> Dim re, v
> Set re = CreateObject("VbScript.Regexp")

> arg = arg


> With re
>     .Global = True

>     .Pattern = "0*?(\d{1,3})(\.|$)"
>     Ipr = .Replace(.Replace(arg, "00$1$2"), "$1$2")
> End With
> End Function
>

Intanto una versione con un singolo Replace:

Public Function IpNur(ByVal arg As String) As String
Dim re as Object


Set re = CreateObject("VbScript.Regexp")
With re
.Global = True

.Pattern = "(\d+)\.(\d+)\.(\d+)\.(\d+)"
On Error Resume Next
IpNur = Format(Evaluate( _
.Replace(arg, _
"$1E9+$2E6+$3E3+$4")), _
"000,000,000,000")
If Err Then IpNur = ""
End With
End Function

per r:
Lo so, ho usato On Error
Lo so, Evaluate è lento

Non mi 'bastonare' troppo :-)

per tutti:
era solo per partecipare a questo bel thread e salutarvi :-)

Ciao, Nur

Nur

unread,
Apr 16, 2010, 9:05:37 AM4/16/10
to
On 16 Apr, 11:49, Nur <news....@gmail.com> wrote:

> Public Function IpNur(ByVal arg As String) As String
> Dim re as Object
> Set re = CreateObject("VbScript.Regexp")
> With re
>     .Global = True
>     .Pattern = "(\d+)\.(\d+)\.(\d+)\.(\d+)"
>     On Error Resume Next
>     IpNur = Format(Evaluate( _
>            .Replace(arg, _
>            "$1E9+$2E6+$3E3+$4")), _
>            "000,000,000,000")
>     If Err Then IpNur = ""
> End With
> End Function
>

Mi correggo. Il Global a True qui non serve.
Mi è 'avanzato' da prove precedenti :-)

Ciao, Nur

0 new messages