Che cosa succederebbe se si definisse il delimitatore CSV del sistema come virgolette?

4

Il titolo dice tutto. Se il delimitatore di sistema del CSV era " (al contrario di una virgola o una pipe o altre alternative comuni), come si comporterebbe in qualche modo?

Il nocciolo della questione è naturalmente che, per definizione, CSV circonda tutti i valori contenenti il delimitatore con le virgolette e converte tutte le virgolette in virgolette doppie.

Il risultato potrebbe essere analizzabile?

(Ispirato da una risposta in più comune "Y2K- stile "bug oggi? )

    
posta Alain 30.03.2011 - 16:58
fonte

5 risposte

4

Risposta: Interrompe il sistema

Ho modificato le mie impostazioni di sistema per testare questo problema:

HoscopertocheMicrosoftnonsacomegestirlo.

Imieidatioriginalierano:

Dopo aver salvato i dati, ha prodotto il seguente file di dati ambigui:

This "This"122,342.23""Test""quote"
Is"Is"231,123.42""""quote""test"
A"A"234,234.23""""something"
Test"Test"234.34""something"""

Certamente, quando ho provato ad aprire il file, l'ho risolto:

Questo dimostra che lo standard CSV fallisce nel caso in cui il delimitatore scelto sia un virgolette e i dati effettivi contengano virgolette. Ciò significa che il sistema operativo Windows dovrebbe probabilmente disabilitare l'utente dalla selezione di questo come virgolette, o modificare lo standard CSV in modo che nel solo caso in cui le virgolette vengano scelte come delimitatore, esso sostituisce il carattere di escape (normalmente una citazione segnare) con qualche altro carattere.

    
risposta data 30.03.2011 - 21:59
fonte
1

Devi considerare l'effettiva implementazione del sistema. CSV è solo uno standard di base. Se esce da Excel, un sistema personalizzato o un editor di Linux, il chilometraggio effettivo può variare.

Detto questo, dato che sei un programmatore, presumo che il sistema sia qualcosa per cui hai il codice sorgente.

"3\"4\""

Il problema è ovvio. Il codice è difficile da leggere per un essere umano. CSV standard

"3,4"

è molto più semplice.

Quello che farei è cambiare il delimitatore. Se esiste un output esistente, scrivi uno script per trovare e sostituire \" con , (o un altro delimitatore accettabile che non influisce sui dati)

    
risposta data 30.03.2011 - 17:14
fonte
0

Perché no?

L'unico problema sarebbe se scrivessi un parser usando un'espressione regolare e non fuggissi correttamente il carattere di ricerca

    
risposta data 30.03.2011 - 17:01
fonte
0

L'unica cosa che devi veramente considerare è la frequenza con cui troverai il carattere che utilizzi come delimitatore nei tuoi campi dati. Mi preoccuperei un po 'di usare le virgolette, semplicemente perché le virgolette doppie sono spesso usate insieme al delimitatore regolare (ad esempio "A", "B", "C", "D", "ETC").

    
risposta data 30.03.2011 - 17:05
fonte
0

Non ci sarebbe differenza. Stai ancora utilizzando un carattere per delimitare ogni campo e quel carattere avrebbe bisogno di essere sfuggito quando si verifica nei dati. La scelta del carattere deve essere basata su quanto segue:

  • È improbabile che il personaggio si verifichi frequentemente nei dati (Riduci l'overhead)
  • Il personaggio dovrebbe essere facile da analizzare (rendere più semplice il lavoro della persona che scrive il parser. Se il personaggio ha altri usi ben definiti nel contesto delle librerie di manipolazione del testo, lascia spazio per errori.)
risposta data 30.03.2011 - 17:13
fonte

Leggi altre domande sui tag