Dividere CSV in più file



  • Dividere CSV in più file
    di Andrea (utente non iscritto) data: 11/09/2017 11:05:05

    Salve a tutti, ho dei file CSV che solitamente sono molto grandi, sopra i 100 MB e avrei bisogno ogni volta di dividerli per numero di righe e/o per peso in MB.
    In alcuni casi dovrei dividere il file ogni 1000 righe, in altri casi non devo superare dei file del peso di 2MB.

    C'è un sistema per fare queste due cose? Per dividere i file in base al peso, ho trovato un piccolo software ma quando mi divide il file ovviamente nei nuovi file non c'è l'intestazione iniziale e comunque i file di prova che ho fatto risultano fuori dalle righe.

    Voi avete qualche soluzione?



  • di patel data: 12/09/2017 15:05:46

    al massimo quante righe sono ? riesci a caricarlo tutto su excel ? allega un file di esempio con 100 righe.





  • di Andrea (utente non iscritto) data: 12/09/2017 15:13:46

    In che senso quante righe sono? Il massimo di righe che posso avere in un file intendi? se è quello, potrei avere anche 100.000 righe.

    ho allegato un file, anche se in alcuni casi, il numero di colonne è maggiore.



  • di patel data: 12/09/2017 19:03:57

    prova questa macro, al momento non salva ma divide il testo in tanti fogli da salvare successivamente.
     
    Sub TestoLungo()
    'Application.ScreenUpdating = False
    With ThisWorkbook
      Set sh1 = .Worksheets("Foglio1")
    End With
    With Application.FileDialog(msoFileDialogFilePicker)
      .AllowMultiSelect = False
      .Filters.Clear
      .Filters.Add "All files", "*.*"
      .Filters.Add "csv", "*.csv", 1
      .Show
      If .SelectedItems.Count = 0 Then
        MsgBox ("Nessuna voce selezionata, procedura annullata")
        Exit Sub
      End If
      fullnome = .SelectedItems(1)
    End With
    Workbooks.OpenText Filename:=fullnome, Local:=True
    Set sh = Sheets(1)
    nrighe = 100 '<<<<<<<<<<<<<<
    With sh
          Set intestazione = .Range("A1:I1")
          LR = .Cells(.Rows.Count, "A").End(xlUp).Row
          nFogli = Int(LR / nrighe) + 1
          r1 = 2: r2 = r1 + nrighe
          For n = 1 To nFogli
            ActiveWorkbook.Sheets.Add after:=ActiveWorkbook.Sheets(Sheets.Count)
            ActiveSheet.Name = n
            intestazione.Copy Range("A1")
            .Range("A" & r1 & ":I" & r2).Copy Range("A2")
             r1 = r1 + nrighe + 1: r2 = r1 + nrighe
          Next
    End With
    End Sub






  • di Andrea (utente non iscritto) data: 14/09/2017 10:30:30

    Ciao Patel, scusa il ritardo nella risposta, la macro sembra funzionare benissimo! Al massimo i file li salverò a mano da solo.

    C'è invece qualcosa per dividere i file in base al peso in MB? Cioè dividere ad esempio un file da 20MB in 10 file da 2MB?



  • di patel data: 14/09/2017 11:50:56

    questa salva anche i file.
    Non so come fare per dividere i file in base al peso.
     
    Sub TestoLungo()
    Application.ScreenUpdating = False
    With ThisWorkbook
      Set sh1 = .Worksheets("Foglio1")
    End With
    With Application.FileDialog(msoFileDialogFilePicker)
      .AllowMultiSelect = False
      .Filters.Clear
      .Filters.Add "All files", "*.*"
      .Filters.Add "csv", "*.csv", 1
      .Show
      If .SelectedItems.Count = 0 Then
        MsgBox ("Nessuna voce selezionata, procedura annullata")
        Exit Sub
      End If
      fullnome = .SelectedItems(1)
    End With
    Workbooks.OpenText Filename:=fullnome, local:=True
    '=========================================
    Set sh = Sheets(1)
    nrighe = 100
    With sh
          Set intestazione = .Range("A1:I1")
          LR = .Cells(.Rows.Count, "A").End(xlUp).Row
          nFogli = Int(LR / nrighe) + 1
          r1 = 2: r2 = r1 + nrighe
          For n = 1 To nFogli
            ActiveWorkbook.Sheets.Add after:=ActiveWorkbook.Sheets(Sheets.Count)
            ActiveSheet.Name = n
            intestazione.Copy Range("A1")
            .Range("A" & r1 & ":I" & r2).Copy Range("A2")
             r1 = r1 + nrighe + 1: r2 = r1 + nrighe
             Call salva
          Next
    End With
    ActiveWorkbook.Close False
    End Sub
    
    Sub salva()
    ActiveSheet.Copy
    cartella = "F:Download" '<<<< cartalla di salvataggio
    ActiveWorkbook.SaveAs Filename:=cartella & ActiveSheet.Name & ".csv", FileFormat:=xlCSV, CreateBackup:=False, local:=True
    ActiveWorkbook.Close False
    End Sub
    
    






  • di Andrea (utente non iscritto) data: 14/09/2017 11:55:21

    Che tu sappia esiste qualche software che faccia una cosa simile? Ne ho provato uno ma non funzionava molto bene.

    Non riesco a far funzionare la nuova macro..apro un nuovo foglio, uso la macro e mi salva un foglio nuovo ma completamente bianco.



  • di Andrea (utente non iscritto) data: 14/09/2017 12:18:53

    Scusami, la macro funziona bene ora!

    Resto in attesa di qualcuno che possa sapere se esiste un software o altro per dividere i file in base al peso.

    Intanto patel ti ringrazio di cuore per l'aiuto!



  • di patel data: 14/09/2017 13:06:27

    non troverai soluzione per il peso, tramite prove devi fare una correlazione tra righe e peso, una macro che dividesse in base al peso troncherebbe le righe in punti non controllabili




  • Dividere CSV in più file
    di Andrea (utente non iscritto) data: 16/10/2017 11:26:31

    Scusami Patel, tiro su questa discussione perchè ho problemi con la macro. Quando provo ad utilizzarla ed avviarla, mi apre un box dove mi chiede di cercare un file. Ho allegato uno screenshot in cima alla discussione...sai aiutarmi?



  • di Zer0Kelvin data: 16/10/2017 12:35:01

    Salve a tutti.
    Calcolare a priori la dimensione di un file CSV dovrebbe essere possibile.
    Si tratta di un semplice file di testo, quindi ogni carattere occuperebbe 1 byte.
    Bisognerebbe quindi contare il n° di caratteri, compreso eventuali separatori e ritorni a capo.
    Spero sia utile...

    PS: scusate, pensavo che l'ultima replica di Patel fosse recente.



  • di patel data: 16/10/2017 12:45:48

    Andrea, serve per poter selezionare il file che ti interessa





  • di Andrea (utente non iscritto) data: 16/10/2017 12:53:44

    Devo quindi aprire un file nuovo vuoto per applicare la macro?

    Le ultime volte che la utilizzavo aprivo direttamente il file sul quale dovevo usarla..



  • di patel data: 16/10/2017 15:35:35

    non capisco, avevi detto che funzionava tutto, poi ha smesso ? allega il file xlsm che stai utilizzando





  • di Andrea (utente non iscritto) data: 16/10/2017 15:43:55

    Dovrei aver risolto, la prima volta mi aveva dato problemi che avevo risolto a suo tempo, poi da li in poi non l'ho più utilizzata quindi probabilmente sbagliavo nel suo utilizzo.