Newsgroup: it.comp.appl.access
Titolo: Ricerca ed estrazione di una o più parti da una stringa.

Buongiorno a tutti,
da un file .csv importo in una tabella i dati in esso contenuti.
In un campo del .csv sono inseriti il cod. fiscale, la partita iva (non sempre) e delle note (eventuali). 
Per maggior chiarezza vi riporto i tre esempi di dati contenuti nel campo:
Es.1: CF:ZZLFNC70L30H501U - PI:02496230984 - NOTE:CHIAMARE PER 
Es.2: CF:04940860283 - PI:04940860283
Es.3: CF:SBEFNC47E60A852G - PI:01512250497
Es.3: CF:MSCPLA62H69D704U
 
Ora io devo estrarre e collocare nel giusto campo della tabella di destinazione solo il cf e la p.iva ed ho fatto così:
 
Do Until Tabella.EOF
    Tabella.Edit
    strCF = Tabella.Fields("Indirizzo di spedizione: Informazioni aggiuntive")
    If strCF <> "" Then
        Tabella.Fields("CF") = Mid(strCF, InStr(strCF, "CF:") + 3, 16)
        Tabella.Fields("P_IVA") = Mid(strCF, InStr(strCF, "PI:") + 3, 11)
        Tabella.Update
    End If
    Tabella.MoveNext
Loop
Tabella.Close
 
alla fine del processo però mi ritrovo con questo:
 
CF:ZZLFNC70L30H501U - PI:02496230984 - NOTE:CHIAMARE PER 
CF:04940860283 - PI:04940860283
CF:MSCPLA62H69D704U
 
Campo CF		Campo P_IVA
ZZLFNC70L30H501U	02496230984
04940860283 - PI	04940860283
SBEFNC47E60A852G        01512250497
MSCPLA62H69D704U	:MSCPLA62H6
 
Come posso ovviare per avere sempre il codice fiscale e la partiva iva nel campo corretto e? Sempre se i dati sono presenti, in caso contrario il campo deve restare ovviamente vuoto.
 
Ringrazio anticipatamente chiunque possa essermi d'aiuto.
 
Grazie
 
Alfio
 


Ciao Alfio,
puoi fare così, tenendo conto che:
Tabella1 è la tabella dove c'è il campo Stringa a cui bisogna estrapolare i dati da confluire nei due campi CF e P_IVA
 
Dim rs As DAO.Recordset
Dim x As String
Dim xCF As String
Dim xP_IVA As String
 
Set rs = CurrentDb.OpenRecordset("Select * From Tabella1 Order By ID")
    rs.MoveFirst
        Do Until rs.EOF
            If UBound(Split(rs!Stringa, "-")) = 0 Then
    rs.Edit
        rs.Fields("CF") = Mid(rs!Stringa, 4)
    rs.Update
            End If
        x = UBound(Split(rs!Stringa, "-"))
            If x >= 1 Then
        xCF = Split(rs!Stringa, " - ")(0)
        xP_IVA = Split(rs!Stringa, " - ")(1)
    rs.Edit
        rs.Fields("CF") = Mid(xCF, 4)
        rs.Fields("P_IVA") = Mid(xP_IVA, 4)
    rs.Update
            End If
    rs.MoveNext
Loop
 
rs.Close
Set rs = Nothing
 
Vladimiro
 

 > Es.5: - PI:01512250497
 
Come puoi vedere all'esempio 4 non c'è nessun "-" da trovare pertanto ricevo l'errore runtime 3625, nessun elemento trovato in questo insieme. 
 
Alfio


Ciao Alfio,
probabilmente nell'adattare la mia routine hai omesso la parte riguardante proprio l'eventualità in cui non esiste nessuna lineetta:
 If UBound(Split(rs!Stringa, "-")) = 0 Then 
    rs.Edit 
        rs.Fields("CF") = Mid(rs!Stringa, 4) 
    rs.Update 
            End If 
 
Vladimiro

 
 
Assolutamente no, eccolo qui:
 
Set rs = CurrentDb.OpenRecordset("Select * From eprice Order By ID")
    rs.MoveFirst
        Do Until rs.EOF
        Stringa = rs.Fields("Indirizzo di spedizione: Informazioni aggiuntive")
            If UBound(Split(rs!Stringa, "-")) = 0 Then
    rs.Edit
        rs.Fields("CF") = Mid(rs!Stringa, 4)
    rs.Update
            End If
        x = UBound(Split(rs!Stringa, "-"))
            If x >= 1 Then
        xCF = Split(rs!Stringa, " - ")(0)
        xP_IVA = Split(rs!Stringa, " - ")(1)
    rs.Edit
        rs.Fields("CF") = Mid(xCF, 4)
        rs.Fields("P_IVA") = Mid(xP_IVA, 4)
    rs.Update
            End If
    rs.MoveNext
Loop
rs.Close
Set rs = Nothing
 
La Stringa contiene "CF:BRVSNO66R67F205Y" e ricevo l'errore
 
Alfio


Ciao Alfio,
anche con CF:BRVSNO66R67F205Y la routine funziona perfettamente. 
 
Prova ad eliminare la seguente riga lasciando il resto come da te postato.
Stringa = rs.Fields("Indirizzo di spedizione: Informazioni aggiuntive")
 
Eventualmente dovesse ancora darti l'errore, l'unica cosa che ti posso consigliare è quella di mettere il db solo con il necessario su uno spazio pubblico tipo 
http://skydrive.live.com/
 in modo da poterci dare un'occhiata.
 
Vladimiro

 Vladimiro
 
Ciao,
ho individuato l'errore:
  "If UBound(Split(rs!Stringa, "-")) = 0 Then "
l'ho modificata in   "If UBound(Split(Stringa, "-")) = 0 Then" in quanto Stringa è il contenuto del campo "Indirizzo di spedizione: Informazioni aggiuntive". Sembra funzionare fino a quando "Stringa" non è uguale a "CF:ZZLFNC70L30H501U - NOTE:CHIAMARE PER CONCORDARE LA CONSEGNA, ALMENO UN ORA PRIMA, AL CELLULARE FORNITO NELLA REGISTRAZIONE"
In questo caso l'errore è che il dato da inserire in P_IVA è troppo grande, infatti vorrebbe inserire in P_IVA tutto a partire da NOTE: anziché tralasciare.
 
Alfio
 
 
 
 
 

 In questo caso l'errore è che il dato da inserire in P_IVA è troppo grande, infatti vorrebbe inserire in P_IVA tutto a partire da NOTE: anziché tralasciare.
 
Anche qui non ti seguo, io mi sono rifatto a quanto da te esposto:
 
In un campo del .csv sono inseriti il cod. fiscale, la partita iva (non sempre) e delle note (eventuali). 
Per maggior chiarezza vi riporto i tre esempi di dati contenuti nel campo: 
Es.1: CF:ZZLFNC70L30H501U - PI:02496230984 - NOTE:CHIAMARE PER 
Es.2: CF:04940860283 - PI:04940860283 
Es.3: CF:SBEFNC47E60A852G - PI:01512250497 
Es.3: CF:MSCPLA62H69D704U 
 
Se ci sono altre esigenze, non devi far altro che mostrarle altrimenti diventa complicato aiutarti.
 
Vladimiro

E' tutto ok Vladimiro, funziona alla perfezione, la funzione UBound non la conoscevo, ma adesso ho aggiunto un tassello in più grazie alla tua pazienza e disponibilità.
Per tornare alla "Stringa" essa assumeva il valore del campo [Indirizzo di spedizione: Informazioni aggiuntive] e per abbreviare il tutto, il contenuto di questo campo lo facevo assumere da "Stringa".
 
Grazie di tutto
 
Alfio


Grazie a te del feedback!
Vladimiro