elisa2014 ha scritto:
in una query vorrei estrarre una stringa che è compresa tra due caratteri, ad esempio:
stringa: P.ED.323/1
il valore che mi interessa estrarre è 323
quindi il valore che sta , leggendo la stringa da dx, dopo il punto e prima di /
Mid$([campostringa], InStrRev([campostringa], ".") + 1,
(InStrRev([campostringa], "/") - InStrRev([campostringa], ".")) - 1)
Ho usato Mid$ invece di Mid perché dici che vuoi estrarre "una stringa" e non un numero, quindi fin da subito considero tale il risultato.
Per capire come è stato costruito cerca il funzionamento di Mid (e Mid$) e InStrRev nella guida in linea.
Qui spiego un po':
Secondo parametro di Mid$
[InStrRev([campostringa], ".") + 1] = trova la posizione del carattere "punto", partendo dalla fine e aggiunge +1 (così parte con Mid$ dal carattere successivo, che nell'esempio è il primo 3 di 323)
Terzo parametro di Mid$
[(InStrRev([campostringa], "/") - InStrRev([campostringa], ".")) - 1)] = deve indicare quanti caratteri considerare, che calcola per differenza tra la posizione di ["/"] e ["."], togliendo poi 1, altrimenti prende anche il "/". Nell'esempio ((9 - 5) - 1)
(scritto in pura teoria, non l'ho provato, quindi potrebbe esserci qualcosa da aggiustare, ma la via è questa)
In generale, per operazioni di questo tipo: Left, Right, Mid, (con la relativa variante con $ finale), InStr e InStrRev. Combinate insieme nel modo giusto fai tutto.
Edit delle 16.44 = rileggendo tutto dopo un po' di tempo ho visto che avevo commesso un errore:
[... togliendo poi 1, altrimenti prende anche il "." ...]
In realtà se non si toglie 1 prende anche "/" (l'ultimo carattere dell'intervallo, non il primo)
Aggiungo una precisazione
scrivendo:
"[InStrRev([campostringa], ".") + 1] = trova la posizione del carattere "punto", partendo dalla fine e aggiunge +1"
si può credere che InStrRev restituisca la posizione (numerica) di un carattere
rispetto alla fine della stringa. InStrRev invece restituisce sempre la posizione all'interno della stringa riferita all'inizio (da sinistra), solo che inizia la ricerca dalla fine (ecco perché c'è Rev dopo InStr: un InStr rovesciato, che parte dalla fine).
Fine Edit delle 16.44