Newsgroup: it.comp.appl.access
Titolo: Estrazione campi da testo

Ciao a tutti,
Premesso che ho cercato fra le vecchie discussioni e ho fatto le prove di rito utilizzando quanto trovato non sono riuscito a venirne a capo e sonoqui a chiedervi aiuto per l'estrazione di due campi da una stringa testo:
 
"Da DDT 144 del 21/12/2010"
 
Dovrei mettere in campo il numero del DDT (ovviamente non posso usare il classico left perche' i numeri di ddt possono arrivare anche a 10.000 per esempio) e in altro campo la data.
 
Per quanto riguarda la data ho risolto con un banale:
Data: Right([descrizione];10) 
 
Per quanto riguarda il numero, considerando che "Da DDT " e' sempre presente riesco a ottenere "144 del 21/12/2010" utilizzando:
 
Numero: Mid([descrizione];InStr([descrizione];" ")+4)
 
Il che e' ovviamente sbagliato.
Grazie per l'eventuale aiuto.
Ciao


per sbaglio ti ho risposto in pvt
 
cmq
 
descrizione=left(descrizione; len(descrizione) -10)
descrizione=replace(descrizione; " del";"")
descrizione=replace(descrizione; "Da ddt ";"")
 
ciao!

 "Da DDT 144 del 21/12/2010"
 
Ciao slumpolo. E CIAO A TUTTI! :)
 
Un modo:
 
Public Sub Test()
Const POS_N = 2
Const POS_D = 4
 
Dim t   As String
Dim n   As Long
Dim d   As Date
Dim s() As String
 
    t = "Da DDT 144 del 11/12/2010"
    s = Split(t)
    n = s(POS_N)
    d = s(POS_D)
 
    Debug.Print "Da DDT " & CStr(n) & " del " & Format$(d, "dd/mm/yyyy")
End Sub
-- 
Ciao!
Maurizio

Grazie per le risposte ma in entrambi i casi non riesco ad adattare il tutto alla query causa mia incapacita'.
Per la soluzione di BFS (che mi sembra piu' alla mia portata) creo l'espressione ma quando vado a richiamarla per il secondo passaggio mi va in errore (ho dedotto che devo fare tre passaggi).
Per la soluzione di Maurizio non so come fare, una volta creato il modulo, a richiamarlo dalla query :(
 
Grazie


 Per la soluzione di Maurizio non so come fare, una volta creato il modulo, a richiamarlo dalla query :(
 
Prova cosi`:
 
Option Compare Database
Option Explicit
 
Private Const POS_N = 2
Private Const POS_D = 4
 
Public Function GetNumDDT(ByVal Descrizione As String) As Long
    On Error Resume Next
    GetNumDDT = Split(Descrizione)(POS_N)
End Function
 
Public Function GetDataDDT(ByVal Descrizione As String) As Date
    On Error Resume Next
    GetDataDDT = Format$(Split(Descrizione)(POS_D), "yyyy-mm-dd")
End Function
 
QUERY:
SELECT t.slumpolo, getnumddt([t].[slumpolo]) AS n, getdataddt([t].[slumpolo]) AS d
FROM xslumpolo AS t;
-- 
Ciao!
Maurizio

Funziona! Grandissimo!
Grazie :)


 Grazie :)
 
Grazie a te del riscontro. :)
-- 
Ciao!
Maurizio

Giusto una curiosita' se posso...
 
Qui estrai la data e il campo in questione e' appunto una data:
Public Function GetDataDDT(ByVal Descrizione As String) As Date 
 
Qui formatti il campo data"
GetDataDDT = Format$(Split(Descrizione)(POS_D), "yyyy-mm-dd") 
 
Ma perche' se imposti la data in formato "yyyy-mm-dd" esce fuori la data in formato 31/12/2010? Ovviamente il formato che esce e' corretto volevo solo capire il perche' :)
 
Grazie Andrea


 Ma perche' se imposti la data in formato "yyyy-mm-dd" esce fuori la data in formato 31/12/2010? Ovviamente il formato che esce e' corretto volevo solo capire il perche' :)
 
Ciao Andrea.
Triste ammetterlo in periodo natalizio ma... Nel mondo Access/Visual Basic le date sono come Babbo Natale: non esistono, ma e` bello crederci. :-)
Puo` essere gestito come data un numero compreso fra -657.434 (1 gennaio 100 00:00:00) e 2.958.465,99998843 (31/12/9999 23:59:59). Esistono un bel po' di funzioni che permettono di manipolare questi numeri come fossero date.
Nel caso specifico la funzione riceve in input una stringa che rappresenta una data in formato locale, nel nostro caso italiano: gg/mm/aaaa, es.: 11/12/2012 cioe` 11 dicembre 2012. (Bada bene, io ho usato apposta una data un po' equivoca, una di quelle che potrebbero essere lette all'americana come mm/gg/aaaa, 12 novembre 2012).
Questa stringa, data in pasto alla funzione Format$, viene *convertita* in un numero-data (perche` le date non esistono) che viene quindi nuovamente convertito in stringa formattata come data "yyyy-mm-dd", pero` in un formato non equivoco, internazionale appunto; per essere certi che l'assegnazione al valore di un campo avvenga come desideriamo noi. Perche` Access parla italiano ma SQL no e a volte, persino per colpa nostra :), non si capiscono.

Ben risentito... qual buon vento...?
 
Scusandomi per l'OT... ma siccome manco anch'io molto, non potevo non
salutarti.
 
Ciao Maurizio.
 
@Alex

 salutarti.
 
Ciao @Alex! Grazie, fa tanto piacere anche a me.
-- 
Ciao!
Maurizio

Grazie per l'ottima spiegazione :)
