Cancellare una parte nel mezzo di una stringa

di il
9 risposte

Cancellare una parte nel mezzo di una stringa

Ciao a tutti.

Sto cercando di …… normalizzare (nel senso di rendere normale….per esseri umani….) una tabella che ricavo da un file excel fatt, a mio giudizio, con i piedi.

uno dei campi che mi crea più problemi è quello relativo agli indirizzi associati a nominativi e pec (parte dei dati che devo importare)

Se per il problema del campo Nome (contenente sia nome che cognome) e di quello Cognome sono riuscito a risolvere, mi trovo incasinato con gli indirizzi.

nel file excel esiste un campo indirizzi….o meglio più di uno e sono strutturati come segue

campo: Denominazione

campo: Indirizzo

Sto riscontrando (almeno fino ad ora e sono 2 giorni che ci lavoro sulla procedura di importazione) 2 tipologie di dati in questi campi:

Denominazione                                                                                  Indirizzo

1) Sede - Vattelapesca                                                                       via principale 1 - 12345 Vattelapesca (MI)

2) Magazzino - Vattelapesca - Principale                                          via secondaria 2 - 12345 Vattelapesca (MI)

(tra l'altro, a volte c'è il trattino che separa a volte no, a seconda di come si sveglia chi di turno ha generato il file excel…)

Nel mio DB dove importo il file excel ho tutto diviso in campi separati (nome, cognome, via, cap, citta, prov, etc etc).

Nel caso della riga 1, con qualche magheggio riesco a separare il tutto e importarlo nei campi che mi servono e ottengo in tabella i seguenti campi separati:

Sede            via principale 1             12345              Vattelapesca             MI

Ma quando mi capita il caso 2 avrei bisogno di ottenere questo:

Magazzino - Principale            via secondaria 1                   12345                Vattelapesca               MI

cioè in pratica dovrei eliminare dal campo solo il nome della città e mantenere il secondo attributo

Nel caso 1 me la sono cavata con un semplice Left impostando la lunghezza in modo adeguato

Ma nel caso 2 non so come (o se) sia possibile eliminare solo parte superflua centrale.

Andrea

9 Risposte

  • Re: Cancellare una parte nel mezzo di una stringa

    Prova questa strada:
    1) Innanzitutto fai una copia del tuo database, non si sa mai potrebbero saltare fuori risultati inaspettati e irreversibili.
    2) Nel campo Denominazione fai un Trova (Parte del campo)
    - * -
    Sostituisci
    -

  • Re: Cancellare una parte nel mezzo di una stringa

    Il problema di fondo è che ogni tanto (non so il perchè - e non lo voglio sapere)  questo file excel viene cambiato. I dati contenuti sono gli stessi, ma vengono (credo) generati in modo diverso da DB SQL vari.

    Quindi ogni volta è una sorpresa.

    Adesso mi sono ritrovato con questo inghippo (come detto alcuni li ho risolti/aggirati nella mia normalizzazione), ma non escludo che risolto questo ne troverò altri

    Finchè i dati da aggiornare sono pochi (pochi record, tipo “tizio ha cambiato mail”) pazienza lo faccio a mano, ma quando devo fare un update bello corposo (cioè una volta l'anno)  cerco di normalizzare in automatico (ad esempio qui sono circa 9000 record….)

    L'ultimo cambiamento c'è stato circa 3 anni fa e anche allora persi qualche giorno a programmare la procedura.

    Adesso hanno stravolto tutto di nuovo (come spiegato sopra) e quindi devo in qualche modo metterci una pezza.

    Di base c'è che io per semplificarmi la vita mi sono creato un DB access che interagisce con word; tutti gli altri lavorano “a mano”: aprono word e ogni volta vanno a copia/incollare i dati del file excel filtrandoli al volo

  • Re: Cancellare una parte nel mezzo di una stringa

    11/03/2023 - OsvaldoLaviosa ha scritto:


    Prova questa strada:
    1) Innanzitutto fai una copia del tuo database, non si sa mai potrebbero saltare fuori risultati inaspettati e irreversibili.
    2) Nel campo Denominazione fai un Trova (Parte del campo)
    - * -
    Sostituisci
    -

    Scusa. ma così facendo otterrei di eliminare eventuale teso contenuto tra due trattini. E purtroppo a volte non l'unica situazione.

    Ad esempio in un caso ho trovato anche qualcosa tipo:

    Ufficio - Clienti - Quelpaese - Centro

    Ufficio - Clienti - Vattelapesca

    Succederebbe un macello…..

    Paradossalmente, se tutti e 9000 i record presentassero questo problema, facendo in questo modo dovrei ripetere l'operazione 9000 volte….

    Cerco di schemtaizzare la procedura di normalizzazione che sto facendo.

    - Importo da Excel i dati direttamente in una tabella Access strutturata con i campi separati a dovere.

    - Lavoro direttamente su questa tabella Access

    - ad esempio nel campo Indirizzo della mia tabella io devo inserire  solo via e numero, mentre all'inizio mi ritroverò l'indirizzo completo (via, cap, città, provincia)

    - estraggo in più passaggi i vari dati che mi interessano memorizzandoli in variabili (via, cap, citta, provincia), poi tramite SQL aggiorno il record in modo da riempire tutti i campi con i dati dovuti.

    Nella procedura di normalizzazione io parto dal campo indirizzo riesco ad estrarre dalla stringa indirizzo la città (Vattelapesca); quindi gli dovrei dire “nella stringa denominazione elimina Vattelapesca” e quindi tramite l'SQL di prima salvare il campo editato come serve

  • Re: Cancellare una parte nel mezzo di una stringa

    Per me non hai scampo. Istruisci i tuoi colleghi di lavoro a inserire i dati in maniera normalizzata, fornendo istruzioni base sull'uso. Puoi partire tanto da Excel (con campi normalizzati) oppure (meglio) una tabella di appoggio dove digitare “il più possibile i dati in maniera normalizzata” per poi (eventualmente) “rimodellarli”, quindi fai un accodamento successivo sulla tua tabella normalizzata. La revisione dei dati puoi farla con filtri mirati volti per volta. Per esempio nel caso di testo in 4 parti e 3 trattini, puoi filtrare i dati *-*-*-* poi sostituisci i dati.

  • Re: Cancellare una parte nel mezzo di una stringa

    Propongo una idea un po' stramba e da vederne l'eventuale fattibilità.

    Se i dati principali ad esempio sono 5 (divisi, in nome, cognome, indirizzo, sede, ufficio) e sono sempre suddivisi con un trattino -, potresti creare una procedura, dove conti i trattini ed in automatico ti va a modificare quelli con cinque trattini e che si presume siano nel formato standard.

    Se la procedura te ne conta un numero minore e maggiore, molto probabilmente sei di fronte ad una anomalia.

    In questi casi, la procedura dovrebbe saltare l'aggiornamento e segnalarti i record che hanno bisogno dell'intervento manuale.

    Tra parentesi, invece che farlo fare alla procedura di aggiornamento, potresti fare una query che ti faccia vedere tutte le anomalie in modo preventivo, in modo che prima di far partire la normalizzazione automatica, hai già modificato manualmente tutte le anomalie. Che spero su 9000 record siano limitate. Altrimenti ti rimane solo una opzione. inc… i colleghi.

  • Re: Cancellare una parte nel mezzo di una stringa

    Ciao, forse non ho capito bene io ma se tu hai già ,come hai detto, estratto i vari valori per eliminare uno di questi dalla stinga ti basta utilizzare REPLACE()

    - estraggo in più passaggi i vari dati che mi interessano memorizzandoli in variabili (via, cap, citta, provincia), poi tramite SQL aggiorno il record in modo da riempire tutti i campi con i dati dovuti.

    Magazzino - Vattelapesca - Principale                                          via secondaria 2 - 12345 Vattelapesca (MI)

    Se tu hai “isolato”  Vattelapesca

    ti basta per toglierlo

    REPLACE( TuaStringainiziale, TestoDaEliminare, “”)

    https://support.microsoft.com/it-it/office/funzione-replace-6acf209b-01b7-4078-b4b8-e0a4ef67d181

    altra funzione utile 

    Funzione InStr - Supporto tecnico Microsoft

    Se invece ho compreso male sarebbe opportuno vedere l'excel e la tua tabella access

  • Re: Cancellare una parte nel mezzo di una stringa

    11/03/2023 - OsvaldoLaviosa ha scritto:


    Per me non hai scampo. Istruisci i tuoi colleghi di lavoro………

    Stiamo parlando del grande fratello…..e per di più  nel “pubblico” non nel “privato”

    E' come se tu dovessi fare una torta con 250 gr di farina e 120 di zucchero. Il grande fratello ti da un sacco con 1 kg di farina e 1 kg di zucchero, mischiati. poi c..zi tuoi “Io gli ingredienti te li ho dati e pure più di quelli che ti servono”

    12/03/2023 - MARMAURO ha scritto:


    Ciao, forse non ho capito bene io ma se tu hai già ,come hai detto, estratto i vari valori per eliminare uno di questi dalla stinga ti basta utilizzare REPLACE()

    Uhm…… Sai che forse forse è fattibile? ci devo provare… Magari è la soluzione più semplice (nel mio caso) e non ci avevo pensato….

    11/03/2023 - fratac ha scritto:


    Propongo una idea un po' stramba e da vederne l'eventuale fattibilità.

    In questi casi, la procedura dovrebbe saltare l'aggiornamento e segnalarti i record che hanno bisogno dell'intervento manuale.

    Infatti inizialmente avevo provato un sistema del genere…. il primo blocco ce l'ho avuto al record 3…….. risolto manualmente, si è bloccato al record 62……poi al 98……

    Come ho detto io non so come generano questo excel, di sicuro da qualche sorta di DB; di sicuro non si mettono a farlo a mano.

  • Re: Cancellare una parte nel mezzo di una stringa

    Penso che se vuoi tentare di automatizzare la normalizzazione devi necessariamente munirti di pazienza ed utilizzare VBA.

    Separi il campo di partenza tramite la funzione split con il carattere separatore (-)

    In funzione degli elementi dell'array che ottieni  ricostruisci la stringa come ti serve e/o li utilizzi (gli elementi dell'array) come campi per il tuo DB.

    Di fatto il tuo vero problema sarà dato dalla disposizione variabile dei ‘campi’ all'interno del tuo campo di partenza.

    Potranno tornarti utili le funzioni di manipolazione delle stringhe : LEFT, MID, RIGHT, INSTR, PAD, REPLACE e così via.

  • Re: Cancellare una parte nel mezzo di una stringa

    Grazie mille del suggerimento

    infatti sto “pazientemente” smanettando di VBA per riuscirci.

    Tra tutte quelle che hai elencato , la SPLIT non l'ho mai usata, ma può darsi che effettivamente risolverebbe tanti problemi (anche futuri)

Devi accedere o registrarti per scrivere nel forum
9 risposte