Newsgroup: it.comp.appl.access
Titolo: Ricerca stringa

Mi sto incartando su una ricerca di stringa all'interno di un testo, che non 
sia sottostringa. Parlo di confronto di variabili VBA, non SQL, e 
tralasciando il confronto binario (non mi interessano maiuscole/minuscole).
Supponendo di dover cercare "Eni" e voler evitare "penitenziario", 
"renitente", ecc. cercherň:
[spazio]eni[spazio]
eni[spazio]
[spazio]eni
Perň cosě non becco "l'Eni" (con l'articolo), nč " Eni." (fine testo).
Quindi tendenzialmente cercherei:
[qualunquecaratterenonalfabetico]eni[qualunquecaratterenonalfabetico]
eni[qualunquecaratterenonalfabetico]
[qualunquecaratterenonalfabetico]eni
Ma non so bene come fare evitando piů passaggi.
Si puň fare senza le regular expression?
Ciao.
 
L.
 
 

Luciano (DOC) ha scritto:

Con Instr() vedi se "Eni" č contenuto nel testo e in che posizione. Se lo
ha trovato (restituisce un valore >0) con Mid$() isoli i caratteri
precedente e successivo e poi li analizzi.
Ciao.
-Marco-
 
 
 
-- 
 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it
 
 
 

 precedente e successivo e poi li analizzi.
 
E' quello che volevo evitare di fare :-)
Mi sembra dispendioso controllare se l'ascii dei caratteri prima e dopo 
l'occorrenza siano >64 and <91 e >64 and <123. Inoltre, dovendo trattare 
anche testi in lingue diverse dall'italiano, il sistema che ho appena 
ipotizzato non funzionerebbe.
Grazie cmq.
Ciao.
 
L.
 
 

 L.
 
Non credo che ci siano alternative. Non essendo una funzione nativa in
Access, se proprio ti serve te la dovrai scrivere in un modulo. Per la
questione della velocità bisogna vedere su che PC gira e su quanti record
la devi applicare, comunque operazioni di questo tipo su stringhe sono
piuttosto semplici, non dovrebbero portar via troppo tempo.
I moderni PC in termini di CPU e RAM sicuramente non hanno problemi a fare
quanche milione di confronti di questo tipo in pochi secondi.
Per una stima realistica non ti resta che provare...


 Access, se proprio ti serve te la dovrai scrivere in un modulo.
 
Ahimè sì! Eccola, la posto in caso interessi qualcun'altro.
Sono due funzioni, la prima prende i due caratteri prima e dopo la stringa 
da cercare, la seconda verifica che i caratteri siano o meno alfabetici. La 
prima funziona accetta anche il parametro tipoConfronto che se impostato a 
True verifica anche maiuscole/minuscole.
Ovviamente non funziona con gli ascii estesi di lingue diverse 
dall'italiano.
Sperando di fare cosa gradita,
ciao.
 
L.
 
Function advInstr(str1 As String, str2 As String, tipoConfronto As Boolean) 
As Boolean
'ricerca stringa non sottostringa in testo
Dim carPrima As String
Dim carDopo As String
Dim myPos As Long
    If tipoConfronto Then
        myPos = InStr(1, str1, str2, vbBinaryCompare)
    Else
        myPos = InStr(1, str1, str2)
    End If
   Do While myPos > 0
        If myPos = 1 Then
           carPrima = "."
        Else
           carPrima = Mid(str1, myPos - 1, 1)
        End If
        carDopo = Mid(str1, myPos + Len(str2), 1)
        If Not isAlfabetico(carPrima) And Not isAlfabetico(carDopo) Then
           advInstr = True
           Exit Function
        End If
        If tipoConfronto Then
            myPos = InStr(myPos + 1, str1, str2, vbBinaryCompare)
        Else
            myPos = InStr(myPos + 1, str1, str2)
        End If
    Loop
End Function
 
Function isAlfabetico(carattere As String) As Boolean
'controlla se un carattere è alfabetico o no
Dim numAppo As Integer
    If carattere = "" Then
        isAlfabetico = False
        Exit Function
    End If
    numAppo = Asc(carattere)
    If (numAppo > 64 And numAppo < 91) Or (numAppo > 96 And numAppo < 123) 
Then
        isAlfabetico = True
    Else
        isAlfabetico = False
    End If
End Function 
 

 L.
 
A prescindere che se cerchi [spazio] & "Eni" all'internod i
"vkladfhkalhv Eni." lo trovi... ;-)
direi che le casistiche di ricerca si riducono a pochissimi casi che
forse rendono più conveniente testarli uno alla volta...!
 
Prova questo:
 
?"P eni. tenziario" Like "*[ ']eni[ .!?]*"
---> VERO
?"Peni. tenziario" Like "*[ ']eni[ .!?]*"
---> FALSO
?"P enitenziario" Like "*[ ']eni[ .!?]*"
---> FALSO
 
 
Come sai le parentesi quadre consentono di inserire un SET di
caratteri di confronto...
Quindi se ipotizzi prima SPAZIO o APOSTROFO, e poi
SPAZIO,PUNTO,ESCLAMATIVO quello che vuoi...!
 
Mi pare che possa essere meglio di tutto quel CODICIONE che hai
sbrodolato...
 
;-)
 
 
Se ti sente Biso che parli di "eni".... ci pensa lui a toglierti gli
spazzi...
 
P.S. siamo a 2 CAFFE'...?
;-)
 
@Alex

Giusto per dare rilievo Tecnico alla cosa...
 
http://msdn.microsoft.com/en-us/library/aa188509%28v=office.10%29.aspx
 
 
@Alex
 

 sbrodolato...
 
Mi piace "tutto quel CODICIONE che hai sbrodolato... ", rende bene 
l'idea.
Oltre tutto accompagnato in premessa da un rarissimo "qualcun'altro".
 
Scusa Luciano (DOC), @Alex e io siamo un po' cattivelli oggi: abbiamo 
ordinato del Barolo e ci han portato del vinello!
 
Buona Pasqua comunque e tante uova d'oro.
 
Bruno
 
 

 ;-)
 
Veramente io avevo già rilanciato con una birra e tu hai bellamente 
ignorato! :-)
Ciao.
 
L.
 
 

 L.
 
Ciao a tutti buona PASQUA.
 
@Alex


L'agnello è già morto e, l'ho messo a mollo nel vinello...
Poi dell'ottimo Sagrantino di Montefalco, se qualcuno mi legge avrà il
coraggio di USCIRE ALLO SCOPERTO...., per accompagnare l'esperienza.
 
Buona Pasqua anche a te.
 
@Alex

 Quando si mangia...?
 
Passa a Roma e ti faccio la matriciana che Biso a 15 anni di distanza ancora 
si ricorda!
Buona pasqua a te e a tutti.
 
L.
 
 

 coraggio di USCIRE ALLO SCOPERTO...., per accompagnare l'esperienza.
 
Ecco, qui andiamo meglio...:-)
 
L.
 
 

 Bruno
 
L'agnello è già morto e, l'ho messo a mollo nel vinello...
 
O R R O R E !!
 
Poi dell'ottimo Sagrantino di Montefalco, se qualcuno mi legge avrà il
coraggio di USCIRE ALLO SCOPERTO...., per accompagnare l'esperienza.
 
col Sagrantino, che non conosco, magari...:D
 
Buona Pasqua anche a te.
 
Auguri anche a te
 
Daniele