CSV to EXCEL formattato



  • CSV to EXCEL formattato
    di maxhrc data: 02/06/2016 01:09:55

    Ciao a tutti ho richiesta. Dovrei formattare i dati da un CSV continuo incolonnando i dati con i rispettivi valori ma non so come fare. Il tutto è delimitato da virgole però avrei bisogno di incolonnare i rispettivi valori.

    ecco una parte del CSV

    "strike":"800","type":"Call","open":"-","high":"-","low":"-","last":"-","change":"+7.50","settle":"1297.25","volume":"0","openInterest":"0"},{"strike":"825","type":"Call","open":"-","high":"-","low":"-","last":"-","change":"+7.50","settle":"1272.25","volume":"0","openInterest":"0"},{"strike":"850","type":"Call","open":"-","high":"-","low":"-","last":"-","change":"+7.50","settle":"1247.25","volume":"0","openInterest":"0"},{"strike":"875","type":"Call","open":"-","high":"-","low":"-","last":"-","change":"+7.50","settle":"1222.25","volume":"0","openInterest":"0"},{"strike":"900","type":"Call","open":"-","high":"-","low":"-","last":"-","change":"+7.50","settle":"1197.25","volume":"0","openInterest":"0"},{"strike":"925","type":"Call","open":"-","high":"-","low":"-","last":"-","change":"+7.50","settle":"1172.25","volume":"0","openInterest":"0"} ....

    Dovrebbe diventare intabellato come le intestazioni e sotto i relativi valori

    STRIKE TYPE OPEN HIGH LOW LAST CHANGE SETTLE VOLUME OPEN INTEREST

    800 Call - - - - +7.50 1297.25 0 0

    e via via per tutto il foglio...

    c'è un VBA che fa questo?

    Grazie



  • di patel data: 02/06/2016 08:19:59

    allega il file csv ed un xls col risultato desiderato delle prime 2 righe





  • di maxhrc data: 02/06/2016 14:18:46

    Ho caricato il file csv...



  • di patel data: 02/06/2016 17:23:35

    a parte che non è un csv dove è il risultato desiderato (qualche riga) ?





  • di maxhrc data: 02/06/2016 18:35:27

    A me lo dava come CSV... comunque mi pare chiaro, l'ho scritto sopra le colonne sono le scritte in stampatello che ho messo, STRIKE col valore 800, TYPE col valore Call OPEN col valore - eccetera fino a OPEN INTEREST con valore 0. Poi a capo si ricomincia con i valori da strike... nell'esempio si ripetono fino in fondo al foglio se osservi le parentesi graffe si capisce al volo.






  • di patel data: 02/06/2016 18:38:18

    nel file in testa ed in coda ci sono dei dati estranei alla tabella che si dovrebbe importare, li togli tu o lo deve fare la macro ? sono sempre uguali ? come si possono riconoscere ?
    intanto prova questa macro  
     
    Sub LeggiFilesenzaCR()
    folderPath = "F:Download" ' <<<<<< da cambiare
    campi = Array("strike", "type", "open", "high", "low", "last", "change", "settle", "volume", "openInterest")
    Filename = "OOF.txt"
    s = CreateObject("scripting.filesystemobject").opentextfile(folderPath & Filename).readall
    p = InStr(s, "[")
    s = Right(s, Len(s) - p)
    p = InStr(s, "]")
    If p > 3 Then s = Left(s, p - 1)
    s = Replace(s, "},{", "|")
    s = Replace(s, "{", "")
    s = Replace(s, "}", "")
    s = Replace(s, """", "")
    s = Replace(s, ":", "")
    For i = UBound(campi) To 0 Step -1
      s = Replace(s, campi(i), "")
    Next
    sn = Split(s, "|")
    Cells(1, 1).Resize(, UBound(campi) + 1) = campi
    For j = 0 To UBound(sn)
       sp = Split(sn(j), ",")
       u = UBound(sp)
       If u <= 0 Then u = 0
       Cells(j + 2, 1).Resize(, u + 1) = sp
    Next
    End Sub






  • di maxhrc data: 02/06/2016 20:53:23

    Grazie Patcel, mi da un errore di runtime alla linea 4 errore 71.

    Hai ragione la prima parte ({"settlements":[) deve essere eliminata. L'ultima parte invece se possibile andrebbe riportata in fondo alla tabella, la voce è sempre univoca ed evidenzia data e totali della tabella,

    ({"strike":"Total","type":"","open":"","high":"","low":"","last":"","change":"","settle":"","volume":"74,714","openInterest":"1,513,004"}],"updateTime":"Thursday, 26 May 2016 06:00 PM","dsHeader":"E-mini S&P 500 American Options","reportType":"Final","tradeDate":"05/26/2016","empty":false})

    Se può essere utile per capire la formattazione ti rimando a questo link cmegroup.com/trading/equity-index/us-index/e-mini-sandp500_quotes_settlements_options.html?optid=138

    Grazie 1000 x la mano che mi stai dando davvero preziosa



  • di patel data: 02/06/2016 22:00:15

    se ti da errore in quella line hai messo un percorso sbagliato, allega il file con la macro





  • di maxhrc data: 02/06/2016 22:54:51

    Ora va...sembra quasi ok. Solo l'ultima voce non viene incolonnata correttamente.

    Riesci a inserirmi anche i dati finali con lavata per cortesia?

    Allego l'excel.



  • di patel data: 03/06/2016 08:14:38

    per i dati finali togli le righe
     
    p = InStr(s, "]")
    If p > 3 Then s = Left(s, p - 1)






  • di maxhrc data: 03/06/2016 10:37:30

    Grazie mille Pat, solo una cosa l'ultimo valore open interest lo slitta in 2 caselle come posso evitarlo?



  • di patel data: 03/06/2016 11:32:08

    non capisco, non c'è solo l'ultimo, ce ne sono altri intermedi, allega il file excel come lo vorresti evidenziando in giallo le modifiche





  • di maxhrc data: 03/06/2016 13:51:24

    Ho caricato un altro xls formattato a mano di come deve essere il risultato.




  • di patel data: 03/06/2016 14:33:17

    il file di testo è lo stesso ? non mi sembra, temo che non siano tutti con la stessa struttura





  • di maxhrc data: 03/06/2016 14:35:38

    Il file non è lo stesso, te l'ho messo x farti capire come va formattato.

    Ogni giorno devo scaricare questi dati sono sempre uguali i campi, cambiano solo i valori dentro, e la data ovviamente...

    la tua sub funziona perfettamente solo l'ultimo dato lo tronca in 2 caselle...




  • di patel data: 03/06/2016 15:52:45

    allega il file di testo corrispondente al xls ultimo





  • di maxhrc data: 03/06/2016 16:51:36

    Ecco Pat ho caricato i dati del 2 giugno ovvero ieri. sia excel che csv, unica cosa il csv in più dell'excel ha la data "trade date" che avrei bisogno di averla riportata al fondo.




  • di patel data: 03/06/2016 17:16:11

    a me sembra che abbiano dati diversi, il csv non corrisponde al xls





  • di maxhrc data: 03/06/2016 17:23:53

    XLS è preso dal sito mentre CSV viene chiamato via web al loro server.

    In realtà c'è un javascript che prende i dati CSV e li infila nella tabella web per quello si differenziano un po' ma in realtà sono uguali.

    La tua sub funziona a me servirebbe solo che la voce open interest sia su un'unica cella e se possibile riportare la voce trade date in fondo. l'xls è solo esemplificativo per vedere gli incolonnamenti ma i dati sono uguali ho verificato .




  • di patel data: 03/06/2016 18:06:12

    l'ultimo csv che mi hai allegato non riesco nemmeno ad editarlo con notepad, ci sono caratteri strani.
    se i file di input non sono tutti con la stessa struttura perdiamo tempo.





  • di maxhrc data: 03/06/2016 18:20:04

    Ho risalvato il file. Ora dovrebbe andare bene. L'ho aperto con notepad...



  • di patel data: 03/06/2016 20:02:37

    l'ultimo dato viene troncato in 2 perché ha le migliaia con la virgola e la virgola fa anche da separatore
    prova questa
     
    Sub LeggiFilesenzaCR()
    folderPath = "F:Download"
    campi = Array("strike", "type", "open", "high", "low", "last", "change", "settle", "volume", "openInterest")
    Filename = "OOF.csv"
    s = CreateObject("scripting.filesystemobject").opentextfile(folderPath & Filename).readall
    p = InStr(s, "[")
    s = Right(s, Len(s) - p)
    'p = InStr(s, "]")
    'If p > 3 Then s = Left(s, p - 1)
    s = Replace(s, "},{", "|")
    s = Replace(s, "{", "")
    s = Replace(s, "}", "")
    s = Replace(s, """", "")
    s = Replace(s, ":", "")
    For i = UBound(campi) To 0 Step -1
      s = Replace(s, campi(i), "")
    Next
    sn = Split(s, "|")
    Cells(1, 1).Resize(, UBound(campi) + 1) = campi
    For j = 0 To UBound(sn)
        sp = Split(sn(j), ",")
        u = UBound(sp)
        If u = 10 Then sp(9) = sp(9) & sp(10): sp(10) = ""
        If u = 11 Then sp(8) = sp(8) & sp(9): sp(9) = sp(10) & sp(11): sp(10) = "": sp(11) = ""
        Cells(j + 2, 1).Resize(, u + 1) = sp
    Next
    End Sub






  • di maxhrc data: 03/06/2016 22:01:20

    Grande Pat solo i total in fondo rimangono non incolonnati, riesci ancora a farmi questa cortesia e le date e gli orari sotto?

    Mi inchino



  • di patel data: 04/06/2016 08:28:06

    sarà l'ultima ?
     
    Sub LeggiFilesenzaCR()
    folderPath = "F:Download"
    campi = Array("strike", "type", "open", "high", "low", "last", "change", "settle", "volume", "openInterest")
    Filename = "OOF.csv"
    s = CreateObject("scripting.filesystemobject").opentextfile(folderPath & Filename).readall
    p = InStr(s, "[")
    s = Right(s, Len(s) - p)
    s = Replace(s, "},{", "|")
    s = Replace(s, "{", "")
    s = Replace(s, "}", "")
    s = Replace(s, """", "")
    s = Replace(s, ":", "")
    s = Replace(s, "]", "|")
    For i = UBound(campi) To 0 Step -1
      s = Replace(s, campi(i), "")
    Next
    sn = Split(s, "|")
    Cells(1, 1).Resize(, UBound(campi) + 1) = campi
    For j = 0 To UBound(sn)
        sp = Split(sn(j), ",")
        u = UBound(sp)
        If u = 10 Then sp(9) = sp(9) & sp(10): sp(10) = ""
        If u = 11 Then sp(8) = sp(8) & sp(9): sp(9) = sp(10) & sp(11): sp(10) = "": sp(11) = ""
        If u = 12 Then sp(8) = sp(8) & sp(9): sp(9) = sp(11) & sp(12): sp(10) = "": sp(11) = "": sp(12) = ""
        Cells(j + 2, 1).Resize(, u + 1) = sp
    Next
    End Sub
    
    






  • di maxhrc data: 04/06/2016 10:50:43

    I total sono sempre uguali, va beh no fa niente hai già fatto tanto grazie grazie grazie!




  • di patel data: 04/06/2016 11:17:10

    spiega meglio, ormai cerchiamo di finire, a me il 2 giugno viene così       
     
    3125_Put____________________-5.75_1021.25_____0______0
    3150_Put____________________-5.75_1046.25_____0______0
    Total_____________________________________97341_571094
    	updateTimeThursday	 02 Jun 2016 0600 PM	dsHeaderE-mini S&P 500  American Options	reportTypeFinal	tradeDate06/02/2016	emptyfalse			
    






  • di maxhrc data: 04/06/2016 11:45:27

    3100 Put - - - - -5.75 996.25 0 0
    3125 Put - - - - -5.75 1021.25 0 0
    3150 Put - - - - -5.75 1046.25 0 0
    Total 97 341 1 571 094] updateTimeThursday 02 Jun 2016 0600 PM dsHeaderE-mini S&P 500 American Options reportTypeFinal tradeDate06/02/2016 empty false

    A me lo da cosi....



  • di patel data: 04/06/2016 11:53:15

    l'hai copiata tutta la macro ? penso di no, forse hai saltao la riga
    s = Replace(s, "]", "|")





  • di maxhrc data: 04/06/2016 13:47:42

    Devo avere sbagliato a copiare, ora va alla grande.

    Grazie infinite !



  • di maxhrc data: 04/06/2016 15:59:19

    solo un piccolo bug, Patcel, l'ultima voce in "J" mi tronca il totale che deve essere 1571094 invece da 571094....

    Non mi odiare



  • di patel data: 04/06/2016 16:13:51

    non ti odio, il problema è che è tutto un rattoppo, non so se sarà valido per tutti i file
     
    For j = 0 To UBound(sn)
        sp = Split(sn(j), ",")
        u = UBound(sp)
        If u = 10 Then sp(9) = sp(9) & sp(10): sp(10) = ""
        If u = 11 Then sp(8) = sp(8) & sp(9): sp(9) = sp(10) & sp(11): sp(10) = "": sp(11) = ""
        If u = 12 Then sp(8) = sp(8) & sp(9): sp(9) = sp(10) & sp(11) & sp(12): sp(10) = "": sp(11) = "": sp(12) = ""
        Cells(j + 2, 1).Resize(, u + 1) = sp
    Next
    End Sub
    






  • di maxhrc data: 04/06/2016 22:29:47

    Ora sembra andare farò un po' di debug ma grazie infinite!