+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

[Access] estrazione dati da stringa

  1. #1
    brian non è in linea Novello
    Buonasera, capisco poco di vba devo importare da un file di testo composto da un numero variabili di pagine ogni pagina rappresenta un cliente, devo importare i clienti nel database di access, la parte anagrafica nella tabella clienti e la parte contabile nella tabella fatture relazionata con la tabella clienti 1 a n ho scritto un array che in minima parte funziona, prima importo il file in una textbox chiamata ricevi e funziona, poi con una pulsante di comando sono riuscito a ciclare sul campo ricevi e inserisco nella tabella clienti nel campo note la singola pagina che rappresenta il cliente poi con la funzione split importo la riga che contiene il nominativo l’indirizzo il numero civico il cap comune e provincia, da qui inizia il mio problema in quanto non riesco a dividere la riga potendo inserire nei rispettivi campi cioè clienti indirizzo cap citta e provincia i dati la riga si presenta cosi
    CLIENTE ROSSI MARIO VIA VERDI 2/A 21050 CUASSO AL MONTE VA

    La parola cliente riesco ad eliminarla con la funzione split, avevo prima pensato che per dividerlo potevo usare lo spazio in quanto tra nominativo ed indirizzo ci sono più di uno spazio, ma non sono riuscito a poter scrivere il codice ho provato a scrivere =>space(1), ma di da l’errore ed anche =>” “ e anche qui evidenzia l’errore ho abbandonato questa soluzione anche perché quando il nominativo è troppo lungo tra il nome e l’indirizzo potrebbe esserci solo uno spazio ho trovato sul sito comune l’esempio dividi indirizzo che in parte funziona per dividere nominativo e indirizzo da campo citta e provincia, questi ultimi tre sono riuscito a dividerli con la funzione replace per il cap e len per la provincia ma tra nominativo ed indirizzo resta il mistero a mio parere la soluzione è nella parola VIA che precede l’indirizzo questa però cambia in funzione se è una VIA, PIAZZA, CORSO, VIALE, C.SO, V.LE, ecc ho provato con la funzione or ed anche and, ma evidentemente sbaglio
    Anche se sono stato lungo nello scrivere spero però che sia chiaro grazie

  2. #2
    L'avatar di dodo47
    dodo47 non è in linea Topo di biblioteca
    ciao

    non che voglia "peggiorare" le cose che mi sembrano già molto complesse.... ma penso che ci siano altre difficoltà di cui dovresti tener conto (doppi cognomi e nomi: de rossi maria stella - cognomi quali "corso" e "via" che a roma sono molti ecc.)

    forse il problema nasce a monte, e cioè sul file di testo. E' un word, un txt normale ???
    La riga da te riportata CLIENTE ROSSI MARIO VIA VERDI 2/A 21050 CUASSO AL MONTE VA è effittivamente così o nel file di testo è scritta come un indirizzo normale (anagrafica -a capo / via -a capo ecc) oppure ci sono separatori (tab ecc) che ti permetto di individuare esattamente dove cominciano i vari "campi" ???

    Infine se la casistica da te riportata (via viale ecc) è sicuramente rintracciabile, potresti fare una sostituzione di massa nel file di testo (per esempio sostituisci via con €via) e poi in fase di split ti vai a cercare €.

    però se ci sono cognomi quali "via" e "corso" avresti problemi

    Spero che qualche ns guru possa aiutarti

    ciao

  3. #3
    brian non è in linea Novello
    forse sono stato troppo articolato nel porre il mio problema, a me serve capire solo come come costruire un array dove per la funzione split il delimitatore può cambiare, nel mio caso con via, corso c.so viale piazza p.za vicolo v.lo, posso costruire una stringa dove questa può dare come risultato una di queste voci
    grazie

  4. #4
    L'avatar di dragone bianco
    dragone bianco non è in linea Certosino
    Ciao

    lo split accette delimitatori di tipo stringa
    Quindi puoi usare una variabile

    ES

    Dim Parole
    Dim Delimitatore as string
    Delimitatore=","
    Parole=split("testo,jdsjassjdlk asfjn",Delimitatore)
    
    o può essere un array

    Dim Parole
    Dim Delimitatore(1 to 2) as string
    Delimitatore(1)=","
    Delimitatore(2)=" "
    Parole=split("testo,jdsjassjdlk asfjn",Delimitatore(1))
    Parole=split("testo,jdsjassjdlk asfjn",Delimitatore(2))
    
    potresti anche usare instr per cercare se tale parola esiste
    potresti anche usare Replace per cercare se tale parola esiste e sostituirla con unao spazio
    (Tutte e 2 danno la possibilità di dire dove iniziare la ricerca, non sei obbligato a partire dal primo carattere ma puoi partire dal 5 carattere)

    un'altro metodo potrebbe fare lo split con delimitatore lo spazio
    e poi per ogni parole verificare se è da eliminare
    1° prima potrebbe risiedere cliente (verifichi e se lo è la cancelli)
    2° potrebbe essere Cognome (non verifichi nulla)
    3° potrebbe essere Nome (non verifichi nulla)
    4° potrebbe essere secondo nome o la parola via ecc (verifichi e selo è la cancelli)
    ecc..

    però bisogna vedere quante casistiche hai

    Ciao
    ℹ️ Leggi di più su dragone bianco ...

  5. #5
    brian non è in linea Novello
    Quote Originariamente inviato da dragone bianco Visualizza il messaggio
    Ciao

    lo split accette delimitatori di tipo stringa
    Quindi puoi usare una variabile

    ES

    Dim Parole
    Dim Delimitatore as string
    Delimitatore=","
    Parole=split("testo,jdsjassjdlk asfjn",Delimitatore)[/CODE]

    o può essere un array

    Dim Parole
    Dim Delimitatore(1 to 2) as string
    Delimitatore(1)=","
    Delimitatore(2)=" "
    Parole=split("testo,jdsjassjdlk asfjn",Delimitatore(1))
    Parole=split("testo,jdsjassjdlk asfjn",Delimitatore(2))
    
    potresti anche usare instr per cercare se tale parola esiste
    potresti anche usare Replace per cercare se tale parola esiste e sostituirla con unao spazio
    (Tutte e 2 danno la possibilità di dire dove iniziare la ricerca, non sei obbligato a partire dal primo carattere ma puoi partire dal 5 carattere)

    un'altro metodo potrebbe fare lo split con delimitatore lo spazio
    e poi per ogni parole verificare se è da eliminare
    1° prima potrebbe risiedere cliente (verifichi e se lo è la cancelli)
    2° potrebbe essere Cognome (non verifichi nulla)
    3° potrebbe essere Nome (non verifichi nulla)
    4° potrebbe essere secondo nome o la parola via ecc (verifichi e selo è la cancelli)
    ecc..

    però bisogna vedere quante casistiche hai

    Ciao
    Ciao dragone e grazie per il tuo interesse le casistiche sono limitate cioè sono VIA P.LE PIAZZA C.SO V.LE E V.LO, PER CHIAREZZA TI RIPORTO QUELLO CHE HO SCRITTO MA NON RIESCO A CREARE UNA STRINGA CHE POSSA RAPPRESENTARE UNA DI QUESTE CASISTICHE
    Dim RD As DAO.Recordset
    Dim Y As Long
    Dim ADR As Variant
    Dim ADR1 As Variant
    Dim DESCRI As String
    Dim RIGHE() As Variant
    Dim CAMPI As Variant
    Dim F As Integer
    Dim R As Integer
    Dim z As String
    z = "via" "p.le" "c.so" "piazza" "v.le"‘ questa stringa dovrebbe rappresentare una delle casistiche ho provato anche con la funzione or penso che si dovrebbe usare InStr ma non riesco a collocarlo nel modo corretto
    ADR = Split(Ricevi, "Milano, li")
    For Y = 1 To UBound(ADR)
    Set RD = CurrentDb.OpenRecordset("clienti")
    RD.AddNew
    RD!notedeb = ADR(Y)
    DESCRI = prendilariga(RD!notedeb, "cliente") ' qui prelievo la riga che inizia con cliente dove contiene nominativo indirizzo cap citta e provincia dal cap in poi sono riuscito a dividerla
    ADR1 = Replace(DESCRI, z, "[")
    RD!SOCIETA = ADR1
    RD.Update
    Next Y
    Set RD = Nothing
    Exit Sub
    spero di essere stato chiaro
    Ultima modifica di brian; 06-12-2008 12:25  Motivo: colore errato

  6. #6
    L'avatar di dragone bianco
    dragone bianco non è in linea Certosino
    Ciao per questo passaggio usa un Replace

    ADR = Split(Ricevi, "Milano, li")
    
    con replace diventa
    ADR = replace(Ricevi, "Milano, li","")
    
    ora Adr contiene la stringa senza "milano, il"

    poi userei un replace in un loop di array
    Dim Casistiche(1 To 3) As String
    Dim Caso
    Casistiche(1) = "VIA"
    Casistiche(2) = "Piazza"
    Casistiche(3) = "P.le"
    
    For Each Caso In Casistiche
        Adr = Replace(Adr, Caso, "", , , vbTextCompare)
    Next Caso
    
    ho usato for each legge la matrice di qualunque lunghezza
    se tu vuoi aggiungere casistiche basta modificare l'array e sei a posto

    nel secondo caso puoi mettergli un carattere a piacere da usare eventualmente nello split
    ora come ora L'Adr è una stringa unica senza le parole da te scelte
    se sostituisci p.le sai che prima è il nome e dopo l'indirizzo se metti un carattere tipo - puoi inseguito fare lo split

    Ciao
    ℹ️ Leggi di più su dragone bianco ...

  7. #7
    Gtn
    Gtn non è in linea Scolaretto
    Quote Originariamente inviato da dragone bianco Visualizza il messaggio
    Ciao per questo passaggio usa un Replace

    ADR = Split(Ricevi, "Milano, li")
    
    con replace diventa
    ADR = replace(Ricevi, "Milano, li","")
    
    ora Adr contiene la stringa senza "milano, il"

    poi userei un replace in un loop di array
    Dim Casistiche(1 To 3) As String
    Dim Caso
    Casistiche(1) = "VIA"
    Casistiche(2) = "Piazza"
    Casistiche(3) = "P.le"
    
    For Each Caso In Casistiche
        Adr = Replace(Adr, Caso, "", , , vbTextCompare)
    Next Caso
    
    ho usato for each legge la matrice di qualunque lunghezza
    se tu vuoi aggiungere casistiche basta modificare l'array e sei a posto

    nel secondo caso puoi mettergli un carattere a piacere da usare eventualmente nello split
    ora come ora L'Adr è una stringa unica senza le parole da te scelte
    se sostituisci p.le sai che prima è il nome e dopo l'indirizzo se metti un carattere tipo - puoi inseguito fare lo split

    Ciao
    ciao Dragone, scusami se non ti ho risposto prima ma ho dovuto lavorare ho finito oggi non ho ancora avuto modo di provarlo mi metto subito all'opera e ti faccio sapere
    grazie

  8. #8
    L'avatar di yronium
    yronium non è in linea Scribacchino
    Mi chiedo:
    - cosa c'entra la "funzione Or" del titolo con l'argomento della discussione?
    - cosa c'entra l'operatore OR con la definizione "funzione"?
    - cosa c'entra l'utente Gtn, che non ha avuto il tempo di rispondere a dragone bianco, con l'utente brian che ha avviato e continuato la discussione? Mi interesserebbe proprio saperlo...
    Questo thread mi convince molto poco.

  9. #9
    Gtn
    Gtn non è in linea Scolaretto
    sono brian stò scrivendo da casa di mio figlio lui è registrato come gtn è stato lui a consigliarmi questo forum, per quanto riguarda la precisazione di yronium, evidentemente non ha letto la mia premessa di essere un principiante, questo giustifica la confusiuone sul titolo e sulla funzione grazie

  10. #10
    L'avatar di dragone bianco
    dragone bianco non è in linea Certosino
    Quote Originariamente inviato da yronium Visualizza il messaggio
    Mi chiedo:
    - cosa c'entra la "funzione Or" del titolo con l'argomento della discussione?
    - cosa c'entra l'operatore OR con la definizione "funzione"?
    - cosa c'entra l'utente Gtn, che non ha avuto il tempo di rispondere a dragone bianco, con l'utente brian che ha avviato e continuato la discussione? Mi interesserebbe proprio saperlo...
    Questo thread mi convince molto poco.
    Quote Originariamente inviato da Gtn Visualizza il messaggio
    sono brian stò scrivendo da casa di mio figlio lui è registrato come gtn è stato lui a consigliarmi questo forum, per quanto riguarda la precisazione di yronium, evidentemente non ha letto la mia premessa di essere un principiante, questo giustifica la confusiuone sul titolo e sulla funzione grazie
    Grazie yronium con queste tue domande abbiamo chiarito alcune cose
    Per GTN e BRIAN il forum ha un pulsante esci in alto a sinistra serve per fare logOUT (Chiudere l'account e dare la posiibilità di riconneterti con un altro account)
    Molto probabilmente tuo figlio, come molti di noi, a lasciato il fleg su "ricordami la password" al momento dell'inserimento username Password
    Ti invito ad usarlo Almeno così GTN non risponde per BRian

    per quanto riguarda il titolo lo cambio in
    "[Access] estrazione dati da stringa" da quello che ho letto dovrebbe essere access il programma in questione
    Se avete idee migliori per il titolo ditemelo e lo modifico
    ℹ️ Leggi di più su dragone bianco ...

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Ricerca ed estrazione di stringa
    Da iemmgi nel forum Microsoft Excel
    Risposte: 16
    Ultimo Post: 13-02-2013, 12:02
  2. [access] estrazione dati da sito web
    Da avalon nel forum Microsoft Access
    Risposte: 4
    Ultimo Post: 21-01-2010, 15:56
  3. estrazione di una stringa da un nomefile
    Da Newton nel forum Visual Basic 6
    Risposte: 7
    Ultimo Post: 25-11-2009, 15:42
  4. problemi con estrazione stringa
    Da dani83 nel forum Microsoft Word
    Risposte: 7
    Ultimo Post: 09-08-2007, 12:12
  5. [Access]Estrazione dati in formato txt con tabulazione
    Da xp68 nel forum Microsoft Access
    Risposte: 7
    Ultimo Post: 03-02-2006, 15:53