Consiglio import csv ordini

di il
6 risposte

Consiglio import csv ordini

Buongiorno a tutti,
rieccomi qui a rompervi le scatole...

ho un file csv con campi a larghezza fissa costruito nel seguente modo, dove i record testa non sono allineati con i record corpo (ho usato il pipe giusto per suddividere i campi):

TESTA | ORDINE | DATA | CLIENTE | ecc
CORPO | CODICE | PREZZO | QTA | ecc
CORPO | CODICE | PREZZO | QTA | ecc
CORPO | CODICE | PREZZO | QTA | ecc
TESTA | ORDINE | DATA | CLIENTE | ecc
CORPO | CODICE | PREZZO | QTA | ecc
CORPO | CODICE | PREZZO | QTA | ecc
CORPO | CODICE | PREZZO | QTA | ecc
CORPO | CODICE | PREZZO | QTA | ecc
CORPO | CODICE | PREZZO | QTA | ecc

TESTA e CORPO sono i valori iniziali che il file csv usa per identificare appunto testata e corpo
ho collegato e suddiviso in modo da avere le testate in una query e il corpo in un'altra ma mi son reso conto subito dopo che in queso modo nel corpo non ho i riferimenti delle testate (ordine, data e cliente) per poterli associare e non ne sto venendo a capo.
avevo pensato di fare prima un import del tracciato intero aggiungendoci un campo contatore e di seguito regolarmi con gli indici ottenuti... ma mi sembra una soluzione non ottimale...

consigli su come muovermi?

6 Risposte

  • Re: Consiglio import csv ordini

    Per i dati tecnici che hai fornito... potrei risponderti con una domanda... a cosa ti serve il campo contatore...?
  • Re: Consiglio import csv ordini

    nickbi78 ha scritto:


    ho un file csv con campi a larghezza fissa costruito nel seguente modo
    TESTA e CORPO sono i valori iniziali che il file csv usa per identificare appunto testata e corpo
    Una domanda da eccesso di scrupolo, prima di suggerire vie da percorrere: un file può contenere più testate, quindi più ordini (con i relativi dettagli/corpo)?
    In caso di risposta affermativa, all'interno del file non hai alcun elemento che colleghi la testata con il corpo se non il fatto che le righe di tipo corpo seguono sempre la riga testata a cui si riferiscono fino alla testata successiva?
    Dallo schema di struttura del file che hai riportato si direbbe che è così però, come ho detto prima, la mia domanda è un eccesso di scrupolo, per non suggerire una cosa più complicata di quanto invece può essere.
  • Re: Consiglio import csv ordini

    un file può contenere più testate, quindi più ordini (con i relativi dettagli/corpo)?
    la risposta è si, il file è unico e contiene la raccolta di tutti gli ordini effettuati...
    In caso di risposta affermativa, all'interno del file non hai alcun elemento che colleghi la testata con il corpo se non il fatto che le righe di tipo corpo seguono sempre la riga testata a cui si riferiscono fino alla testata successiva?
    esatto, la testata viene sempre seguita dalle righe del corpo che si interrompono con l'inizio di una nuova testata

    pensavo che ci fosse qualche campo legato tra le testa e corpo ma così non è
  • Re: Consiglio import csv ordini

    @Alex ha scritto:


    Per i dati tecnici che hai fornito... potrei risponderti con una domanda... a cosa ti serve il campo contatore...?
    era una semplice idea buttata li che non ho messo in pratica proprio perchè pensavo non fosse ottimale da utilizzare
  • Re: Consiglio import csv ordini

    Allora, ci ho sbattuto un pò la testa e sono arrivato ad una soluzione funzionale.
    Ho creato uno script in vb.net che legge tutto il file e ne crea una copia anteponendo al tracciato originale una sorta di ID a 5 cifre che lega TESTA a CORPO, ottenendo il risultato come di seguito:

    00001TESTA | ORDINE | DATA | CLIENTE | ecc
    00001CORPO | CODICE | PREZZO | QTA | ecc
    00001CORPO | CODICE | PREZZO | QTA | ecc
    00001CORPO | CODICE | PREZZO | QTA | ecc
    00002TESTA | ORDINE | DATA | CLIENTE | ecc
    00002CORPO | CODICE | PREZZO | QTA | ecc
    00002CORPO | CODICE | PREZZO | QTA | ecc
    00002CORPO | CODICE | PREZZO | QTA | ecc
    00002CORPO | CODICE | PREZZO | QTA | ecc
    00002CORPO | CODICE | PREZZO | QTA | ecc

    ho dovuto ricollegare le nuove tabelle ma il risultato che volevo è arrivato!

    il codice, se può servire in futuro a qualcuno, è il seguente:
    
            Dim i As Integer
            Dim testo, testo2 As String
            Dim ioRead As System.IO.StreamReader
            ioRead = IO.File.OpenText("C:\miopercorso\fileorigine.txt")
            Dim iowrite As System.IO.TextWriter = New StreamWriter("c:\miopercorso\finedestinazione.txt")
             i = 0
            While ioRead.Peek <> -1
                testo = ioRead.ReadLine()
                If testo.Substring(0, 5) = "TESTA" Then
                    i = i + 1
                    testo2 = Format(i, "00000") & testo
                Else
                    testo2 = Format(i, "00000") & testo
               End If
                iowrite.WriteLine(testo2)
            End While
            ioRead.Close()
            iowrite.Close()
            close()
    
  • Re: Consiglio import csv ordini

    nickbi78 ha scritto:


    Allora, ci ho sbattuto un pò la testa e sono arrivato ad una soluzione funzionale.
    ...
    La stessa cosa puoi farla direttamente da vba, senza passare da vb.net: anche VBA ha apposite funzioni per gestire i file di testo.
    Puoi trovare tutto quello che ti serve in questa pagina
    https://docs.microsoft.com/en-us/office/vba/language/reference/statements
    partendo magari da alcuni suggerimenti presenti qui https://docs.microsoft.com/en-us/office/vba/language/concepts/getting-started/writing-data-to-files. Un motore di ricerca con i termini VBA - read - write - text file e ti si apre di tutto. Occhio che troverai con troppa facilità anche l'invito ad usare FileSystemObject attingendo a Scripting.Runtime ma per quello che devi fare non è necessario. Sicuramente si avvicina molto di più a quanto scritto con vb.net ma non per forza è la scelta migliore finché si sta usando vba.
    Un altro esempio, che considera parecchie situazioni, in italiano e semplice: forum.masterdrive.it/microsoft-office-access-vba-23/vba-lettura-scrittura-file-testo-14740/
    Detto questo, ti va bene il fatto di dover modificare il file di testo? Seguendo lo stesso principio, cioè lettura del file, riga per riga, puoi scrivere direttamente le informazioni nelle tabelle che poi ti interessano. Certo, se vuoi passare solo attraverso il collegamento al file di testo come "tabella collegata" devi per forza agire a monte, nel file di partenza. Vedi tu.
Devi accedere o registrarti per scrivere nel forum
6 risposte