Qual è la vera differenza tra un CSV Excel e un CSV standard?
Ad esempio, quando si gestiscono colonne con interruzioni di riga all'interno di una cella, come la codificano in modo diverso?
Qual è la vera differenza tra un CSV Excel e un CSV standard?
Ad esempio, quando si gestiscono colonne con interruzioni di riga all'interno di una cella, come la codificano in modo diverso?
Risposte:
Dipende assolutamente da ciò che definisci CSV "standard". Per quanto mi riguarda, Excel segue le regole delineate in RFC 4180 , il "formato comune e il tipo MIME per i file CSV".
Considera una tabella in cui la prima cella nella prima riga ha due interruzioni di riga. In Excel, sarebbe simile al seguente:
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | col1, line1a | | |
| | col1, line1b | | |
| | col1, line1c | col2, row1 | col3, row1 |
| 2 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
Ora, come esporterebbe Excel? Vediamo - un editor di testo mostrerebbe questo:
"col1, line1a
col1, line1b
col1, line1c","col2, row1","col3, row1"
"col1, row2","col2, row2","col3, row2"
Non molto sofisticato. Inserisce un ritorno a capo (esadecimale 0D
) in cui l'interruzione di linea era nella nostra cella. Ogni cella è racchiusa tra virgolette doppie. Inoltre, le righe effettive sono separate da un ritorno a capo.
Per analizzarlo correttamente, dovrebbe essere necessario un parser CSV
Se non lo facesse, finiresti con qualcosa di confuso come questo - nota che ora ci sono quattro linee invece di due, perché non è riuscito a ignorare le interruzioni di linea.
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | "col1, line1a | | |
| 2 | col1, line1b | | |
| 3 | col1, line1c" | col2, row1 | col3, row1 |
| 4 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
Ma vediamo cosa dice la RFC, forse Excel ha fatto bene?
I campi che contengono interruzioni di riga (CRLF), virgolette doppie e virgole devono essere racchiusi tra virgolette doppie.
Bene, è esattamente quello che ha fatto Excel. Riassumendo, Excel sembra seguire le raccomandazioni di un file CSV "standard". Dato un parser CSV adeguato, dovrebbe essere in grado di leggere anche i file CSV di Excel.
La mia comprensione dall'implementazione originale di CSV era che tutti i campi di testo erano racchiusi tra virgolette e che i numeri non dovevano essere. Excel non lo fa e se provi a caricare i tuoi file csv generati da Excel su piattaforme non microsoft falliscono. Questo è un approccio Microsoft standard, ignora l'interoperabilità e si concentra sul seguire ciecamente le regole. Una cosa simile è accaduta con IE, hanno seguito correttamente le regole html / css per gli attributi di riempimento e margine e hanno ignorato il fatto che ogni pagina Web e browser Web esistente li ha trattati in modo diverso. Il risultato, quasi ogni pagina Web ha ora regole speciali per IE. Trovo inutili i file CSV prodotti da Excel e utilizzo una colonna di funzioni "concatenate" per crearli manualmente manualmente.