Come concatenare più file txt usando Access VBA

di il
8 risposte

Come concatenare più file txt usando Access VBA

Ho un problema con una funzione del mio programma Access.
Questa funzione crea un file txt che deve essere importato in un sistema diverso
Il mio codice VBA utilizza 3 diverse tabelle di accesso con struttura diversa.
Uno per l'intestazione, uno per le righe e uno per il piè di pagina.
queste 3 diverse tabelle vengono quindi esportate su 3 file txt.
Nessun problema fino a questo, ma quando provo ad aggregare questi 3 file ho un problema.
Uso un file batch che copia i 3 file in uno, ma alla fine del file creato c'è uno strano carattere inserito alla fine del file che crea un errore quando eseguo il programma di importazione che carica il file creato.
Conoscete un altro modo per aggregare più file txt in uno magari usando VBA?

8 Risposte

  • Re: Come concatenare più file txt usando Access VBA

    Di quale carattere "strano" parli? Hai controllato?
    Cosa c'è scritto nel batch?
  • Re: Come concatenare più file txt usando Access VBA

    Non dici nulla della modalità, sul batch, con cui effettui la concatenazione dei 3 file di testo (con comandi del sistema operativo, direttamente con VBA, ecc.) inoltre verifica il carattere spurio con un editor esadecimale, in modo da controllare da quale origine dati proviene.
  • Re: Come concatenare più file txt usando Access VBA

    Anche perché se il carattere non è generato dal codice che unisce i tre file ma sta già in uno dei 3 file dopo l'esportazione, non ha senso cambiare il metodo della concatenazione. Quindi controlla il contenuto dei singoli 3 file.
  • Re: Come concatenare più file txt usando Access VBA

    Questo è il batch
    cd\venistar\v9_std_imp\pre-txt-in
    copy *.txt c:\venistar\v9_std_imp\txt-in\po.txt

    praticamente copia tutto il contenuto della cartella pre-txt-in nel file po.txt
    è lanciato da VBA con comando shell

    e questo è il risultato dopo il lancio del batch
    H;14;002680pre;002680;001;001;0;001;;11112019;;;14
    I;14;8719852222981;1; 10.8;;
    I;14;8719852222929;2; 10.8;;
    I;14;8719852222752;2; 10.8;;
    I;14;8719852222394;1; 10.8;;
    S;14;pre nov-dic + coll feb-mar;10%;Ri.Ba. 60/90/120 gg f.m. dec;;;



    il carattere strano è il quadrato che dovrebbe essere un a capo
    Ho controllato tutti e 3 i files txt ma nessuno ha questo carattere in fondo.
    E' sicuramente un carattere inserito quando lancio il batch di accorpamento

    P.S.: mi sono reso conto che una volta inviato il post il simbolo "" sparisce quindi si tratta di un a capo
  • Re: Come concatenare più file txt usando Access VBA

    Nella sintassi del comando COPY, impiega l'opzione /B per effettuare la copia del file sotto forma binaria:
    https://ss64.com/nt/copy.htm

    Come annotazioni, è da dire che:
    - il carattere finale non si tratta di un ritorno a capo (basta visualizzare con un editor esadecimale);
    - nel passato non avresti potuto impiegare il comando COPY per effettuare la concatenazione del contenuto di più file, su di uno solo (avresti dovuto impiegare il comando TYPE con re-indirizzamento del flusso sul file:
    
    TYPE *.TXT > TUOFILE.TXT
    
  • Re: Come concatenare più file txt usando Access VBA

    Grazie Willy

    ho seguito il tuo suggerimento ed ho cambiato il comando da copy a type e funziona perfettamente
    Grazie ancora per l'aiuto
  • Re: Come concatenare più file txt usando Access VBA

    Probabilmente avresti risolto indicando la copia binaria

    copy /b *.txt c:\venistar\v9_std_imp\txt-in\po.txt
  • Re: Come concatenare più file txt usando Access VBA

    Giusto per informazione, il carattere spurio posto al termine della concatenazione dei file testuali è il codice ASCII con valore decimale uguale a 26.
    In base alla tabella di riferimento (US ASCII, ANSI X3.4-1986 - ISO 646 International Reference Version) il carattere con codice ASCII pari a:
    valore decimale = 26
    Esadecimale = 1A
    Binario = 00011010
    HTML = 
    Abbreviazione = SUB
    Descrizione = Substitute
    risulta essere un codice di controllo, quindi (dato il suo uso) non direttamente stampabile (viene anche rappresentato con i codici impiegabili da tastiera come: Control-Z, ^Z o [CTRL]+Z o Ctrl+Z) ove, nei sistemi, Windows assume la valenza di termine del file EOF (End Of File).
    Da considerare che nei sistemi Unix-Like abbiamo, invece, per EOF il carattere Ctrl+D.
    https://en.wikipedia.org/wiki/End-of-fil
    https://it.wikipedia.org/wiki/ASCI

    Quindi, nella operazione di concatenazione dei file (se non indicato diversamente) viene posto il carattere EOF al termine del processo.
    Inoltre è da considerare che la sua visualizzazione/stampa se 'applicativo non prevede la sua presentazione non viene gestito nella mappa dei caratteri rappresentabili e viene convertito con un simbolo di default (come quello di valore ASCII esteso = 255 generalmente rappresentato con un quadratino).
    E' per questo che si impiegano editor esadecimali i quali offrono l'opportunità di visionare il contenuto del file in tutti i suoi caratteri.
Devi accedere o registrarti per scrivere nel forum
8 risposte