Condividi:        

Split csv

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Split csv

Postdi replymonster » 24/01/19 11:54

Buonasera a tutti,
ho provato in tutti i modi, per cui non mi resta che chiedere alla community.
Ho un file con oltre 5 milioni di rows, che neanche riesco ad aprire, e vorrei slittarlo in file da 300k di rows.

Ho provato con mille programmi per slittare i csv, ma utilizzandoli crea dei file in cui mi scalza tutte le righe.
Ho provato a utilizzare programmi tipo R ma non mi riesce ad esportare poi i file.
Non so più che fare, voi avete consigli?

Ecco il file:
https://ufile.io/y2gyw
replymonster
Utente Junior
 
Post: 30
Iscritto il: 06/11/17 11:45

Sponsor
 

Re: Split csv

Postdi klingklang » 24/01/19 12:37

Ciao, non posso crederci che non l'hai neppure zippato.... 3,5Gb di download?!? :eeh: Ci sentiamo più tardi :lol:
Enrico
Windows 7 + Office 2016 64bit / Windows 10 + Office 365 32/64bit
Avatar utente
klingklang
Utente Junior
 
Post: 97
Iscritto il: 23/11/18 15:01
Località: San Giovanni in Persiceto

Re: Split csv

Postdi replymonster » 24/01/19 14:18

Mea culpa

EDIT FILE ZIPPATO:
https://ufile.io/ete30
replymonster
Utente Junior
 
Post: 30
Iscritto il: 06/11/17 11:45

Re: Split csv

Postdi klingklang » 24/01/19 14:59

Ciao, questo è quello che si può fare (correggo: quello che SO fare) con VBA: se poi non ottiene il risultato voluto... non so come altro aiutarti :lol:

P.S: preparati a una LUNGA attesa :mmmh:

Codice: Seleziona tutto
Sub DividiCSV()
    Dim fName As String
    Dim f As Long
    Dim DataLine As String
    Dim tmpstr As String
    Dim contarighe As Long
    Dim contafile As Long
   
   
    f = FreeFile
    fName = "F:\Temp\yelp_review.csv" '<===== Modificare il percorso del file da 5milioni di righe
   
    Open fName For Input As #f
        Do
            Line Input #f, DataLine
            contarighe = contarighe + 1
            tmpstr = tmpstr & DataLine & vbNewLine
                               
            If contarighe = 300000 Then
                Open "F:\Temp\yelp_review_" & Format(contafile, "0000") & ".csv" For Output As #f + 1 '<===== Modificare il percorso dei file splittati
                Print #f + 1, tmpstr
                Close #f + 1
                contafile = contafile + 1
                contarighe = 0
                tmpstr = ""
            End If
            DoEvents
        Loop Until EOF(f)
    Close #f
   
End Sub
Enrico
Windows 7 + Office 2016 64bit / Windows 10 + Office 365 32/64bit
Avatar utente
klingklang
Utente Junior
 
Post: 97
Iscritto il: 23/11/18 15:01
Località: San Giovanni in Persiceto

Re: Split csv

Postdi replymonster » 24/01/19 15:44

Ti ringrazio subito per il tempo dedicato.
Purtroppo, probabilmente cause mia inesperienza, ho sostituito in entrambe le righe il percorso del file, ma una volta fatta partire non funziona. Di preciso, sembra come se iniziasse e finisse istantaneamente, forse ho sbagliato a fare quella modifica?

Io ho modificato cosi le due righe (ovviamente al posto delle x c'è il percorso):
fName = "C:\xxx\xxx\xxx\xxx\xxx\yelp_review.csv"
Open "C:\xxx\xxx\xxx\xxx\xxx\yelp_review.csv_" & Format(contafile, "0000") & ".csv" For Output As #f + 1

Ho aperto un file Excel nuovo, ho inserito la macro e l'ho avviata, ma sembra che o lavori in background o che non succede proprio nulla, anche perche sul file nuovo posso agire tranquillamente come se non succedesse nulla, tranne che la sezione viluppo diventa tutta grigia.

Scusate l'ignoranza,
Grazie per il supporto
replymonster
Utente Junior
 
Post: 30
Iscritto il: 06/11/17 11:45

Re: Split csv

Postdi klingklang » 24/01/19 15:50

Dovrebbe funzionare anche come hai scritto tu, sebbene sia più elegante così:
Open "C:\xxx\xxx\xxx\xxx\xxx\yelp_review_" & Format(contafile, "0000") & ".csv" For Output As #f + 1

Preparati a dover attendere almeno alcuni minuti anche per la generazione di un solo file. Se vuoi verificare i risultati più rapidamente, cambia 300.000 con 10.000 e i primi file di output appariranno molto rapidamente. Quando poi intendi stoppare la macro, premi Esc o Ctrl+Pausa
Enrico
Windows 7 + Office 2016 64bit / Windows 10 + Office 365 32/64bit
Avatar utente
klingklang
Utente Junior
 
Post: 97
Iscritto il: 23/11/18 15:01
Località: San Giovanni in Persiceto

Re: Split csv

Postdi replymonster » 24/01/19 16:36

Se faccio partire la Macro e la interrompo mi evidenzia la riga:
DoEvents

Ripeto purtroppo sembra non funzionare dopo che sono stato mezz'ora fermo a vedere.
replymonster
Utente Junior
 
Post: 30
Iscritto il: 06/11/17 11:45

Re: Split csv

Postdi klingklang » 24/01/19 16:47

Te l'ho detto: la macro è MOLTO lenta. Se togli DoEvents si velocizzerà, ma diventerà praticamente impossibile interromperla. Quando la lanci, quindi, preparati a lasciare il PC inattivo (e incapace di rispondere) per qualche ora (dipende anche dalla potenza del pc stesso).
Se non ti è possibile fare ciò, attendi altre soluzioni più rapide

Ciao
Enrico
Windows 7 + Office 2016 64bit / Windows 10 + Office 365 32/64bit
Avatar utente
klingklang
Utente Junior
 
Post: 97
Iscritto il: 23/11/18 15:01
Località: San Giovanni in Persiceto

Re: Split csv

Postdi replymonster » 24/01/19 17:31

Lo lascio aperto in ufficio e domanimattina ti aggiorno.

Grazie ancora e scusa per i disagi !
replymonster
Utente Junior
 
Post: 30
Iscritto il: 06/11/17 11:45

Re: Split csv

Postdi Anthony47 » 25/01/19 03:01

Non so se hai risolto, comunque se il processo e' da ripetere di tanto in tanto allora prova questa variante del codice pubblicato da Enrico:
Codice: Seleziona tutto
Sub DividiCSV3()
Dim fName As String
Dim DataLine As String
Dim contarighe As Long
Dim FSuff As Long, CSuff As Long, myTim As Single
'Dim FSO As FileSystemObject, LIFile As TextStream, SOFile As TextStream
Dim FSO As Object, LIFile As Object, SOFile As Object

    fName = "D:\DDownloads\yelp_review.csv" '<===== Modificare il percorso del file da 5milioni di righe
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set LIFile = FSO.OpenTextFile(fName, 1, False, 0)
    Set SOFile = FSO.OpenTextFile("D:\DDownloads\yelp_review_" & Format(FSuff, "0000") & ".csv", 8, True, 0)
    myTim = Timer
        Do
            If CSuff <> FSuff Then
                Set SOFile = FSO.CreateTextFile("D:\DDownloads\yelp_review_" & Format(FSuff, "0000") & ".csv", True, False)
                CSuff = FSuff
            End If
            DataLine = ""
            DataLine = LIFile.ReadLine
'Debug.Print Len(DataLine)
            Do
                If Right(DataLine, 1) = Chr(34) Or Len(DataLine) > 10000 Then Exit Do
                If LIFile.AtEndOfStream Then Exit Do
                DataLine = DataLine & LIFile.ReadLine
                DoEvents
            Loop
            contarighe = contarighe + 1
            SOFile.WriteLine DataLine
            If contarighe >= 100000 Then
                SOFile.Close
                FSuff = FSuff + 1
                contarighe = 0
                Debug.Print Format(Timer - myTim, "0.00"), FSuff
                myTim = Timer
            End If
            DoEvents
        Loop Until LIFile.AtEndOfStream
        If contarighe > 0 Then SOFile.Close
        LIFile.Close
Set FSO = Nothing
MsgBox ("T.G. It's over...")
Beep
End Sub

Nota che il contarighe e' ora posizionato su 100mila; nel mio pc questo ha prodotto un file in circa 20 secondi, mentre per 300mila sono stati necessari circa 1 minuto.

Non so se queste conversioni producono un formato compatibile con chi deve poi elaborarli; una ragione in piu' per provare file con poche migliaia di record e verificarne il comportamento successivo.

Ciao a tutti
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Split csv

Postdi klingklang » 25/01/19 11:56

Prima o poi vincerò la mia diffidenza e imparerò anch'io a usare il FileSystemObject :lol:
Enrico
Windows 7 + Office 2016 64bit / Windows 10 + Office 365 32/64bit
Avatar utente
klingklang
Utente Junior
 
Post: 97
Iscritto il: 23/11/18 15:01
Località: San Giovanni in Persiceto


Torna a Applicazioni Office Windows


Topic correlati a "Split csv":


Chi c’è in linea

Visitano il forum: Nessuno e 39 ospiti