Newsgroup: it.comp.appl.access
Titolo: Accorciare del testo lungo

Ciao sono Franco
Volevo chiedere cosa può sostituire la funzione di ricerca e sostituisci
testo?
Ho bisogno di accorciare o eliminare del testo all'interno di un campo, ho
provato a farlo manualmente (con sostituisci testo) ma sono circa 8000
record, inoltre volevo che lo facesse in modo automatico.
Ho provato allora con il codice di visual basic, inserendo un iif(testo=
"24pezzi", 24pz, testo) ma, ho il problema che la posizione del testo non è
sempre uguale, in oltre il testo che viene prima o dopo non riesco ad
inserirlo spiego
Testo originale
Prodotto pincopallino confezione da 24pezzi di colore giallo, blu, verde
rosa, ecc.
Testo dopo iif(testo= "24pezzi", 24pz, testo) se trova 24pezzi
24pz
naturalmente modifica come da parametri impostati ed elimina sia il testo
precedente che successivo
testo che vorrei vedere modificato
Pincopallino conf. 24pz colori vari
e purtroppo il testo non è sempre uguale, anzi ci sono centinaia di prodotti
diversi
Come posso fare?
Ringrazio chiunque riuscirà a darmi una mano.
Ciao


La vedo molto difficile, non impossibile, ma difficile. Considera che (per
esempio) "24pezzi" protrebbe essere scritto "24 pezzi" o "24pezzi" o "24
pezzi" etc.etc...
Scrivere una funzione che trova una stringa e la sostituisce non è un grosso
problema, il problema è cosa devi cercare; se sei sicuro che il testo da
cercare è sempre scritto in quel modo allora puoi provare con:
Function trovaEsostituisci(xTrova As String, xSostituisci As String, xDentro
As String)
Dim xLatoSx As String, xLatoDx As String, xPosizione As Integer
xPosizione = InStr(1, xDentro, xTrova)
xLatoSx = Left(xDentro, xPosizione - 1)
xLatoDx = Right(xDentro, (Len(xDentro) - (xPosizione - 1)) - Len(xTrova))
trovaEsostituisci = xLatoSx & xSostituisci & xLatoDx
End Function
Ciao.

 ha scritto nel messaggio
news:8h8945$don$1...@suite03.caspur.it...



Avevo dimenticato il controllo di xPosizione; la funzione è ora:
Function trovaEsostituisci(xTrova As String, xSostituisci As String, xDentro
As String)
Dim xLatoSx As String, xLatoDx As String, xPosizione As Integer, ritorno As
String
xPosizione = InStr(1, xDentro, xTrova)
If xPosizione > 0 Then
    xLatoSx = Left(xDentro, xPosizione - 1)
    xLatoDx = Right(xDentro, (Len(xDentro) - (xPosizione - 1)) -
Len(xTrova))
    ritorno = xLatoSx & xSostituisci & xLatoDx
Else
    ritorno = Null
End If
trovaEsostituisci = ritorno
End Function
Per inserire più criteri dovresti inviare alla funzione più parametri; come?
A te la scelta:
- passare più stringhe xTrova1,xTrova2, etc etc e xSostituisci1,
xSostituisci2 etc.etc.;
- passare una stringa unica xTrova= "aaa;bbb;ccc;" e
xSostituisci="111;222;333";
- passare un'array xTrova(10) e xSostituisci(10);
o in qualsiasi altro modo, ma dovresti modificare la funzione adattandola ai
"nuovi parametri".
Potresti anche lasciare così la funzione e creare un ciclo che la richiama
tante volte quanti sono i testi da modificare.
es.
Sub provacercaEsostituisci()
Dim xVoce As Integer, xTrova(3) As String, xSostituisci(3) As String,
stringaDaModificare As String
xTrova(1) = "24pezzi": xSostituisci(1) = "24pz"
xTrova(2) = "acqua": xSostituisci(2) = "pepsi"
xTrova(3) = "rabarbaro": xSostituisci(3) = "spaghetti"
stringaDaModificare = "ti avevo chiesto 24pezzi di bottiglie d'acqua, e mi
hai inviato 24pezzi di bottiglie di rabarbaro!"
For xVoce = 1 To 3
    stringaDaModificare = trovaEsostituisci(xTrova(xVoce),
xSostituisci(xVoce), stringaDaModificare)
Next
MsgBox stringaDaModificare
End Sub
Ciao.

Scusa la fretta...
Modifica l'istruzione:
ritorno = Null in ritorno = "", altrimenti se non trova nulla ti va in
errore...
Ciao.