Passando file csv tra regioni

0

Ho un'app desktop che genera numerosi file CSV. L'applicazione always viene eseguita su PC che sono stati configurati per English (United Kingdom) region / format, ma è fattibile che i file possano essere inviati a persone che usano PC con impostazioni regionali non britanniche.

Sono quindi curioso di sapere cosa succederebbe se qualcuno in (diciamo) in Francia - dove le virgole fossero usate come punti decimali - fosse per provare ad aprire il seguente file csv in Excel:

1.123,2.456,"string1","string2",24-May-2018,17:35:59

Fallirà miseramente? Se sì, quali sono le alternative? Non voglio usare un delimitatore diverso (dato che non è più comma -delimitato!), E preferirei non dover iniziare a generare file xls.

    
posta Andrew Stephens 06.07.2018 - 17:02
fonte

2 risposte

1

Ok, quindi, dopo aver cambiato l'impostazione "Formato" del mio PC in "Francese (Francia)" tramite il pannello di controllo, ho aperto un csv in Excel contenente la riga di testo sopra. Excel ha posizionato la intera riga in una singola cella. Non è quello che mi aspettavo, ma suppongo che se Excel non può separare i valori (dato che le virgole sono ora D.P.s), allora non può analizzare la linea e trattarla come una singola stringa.

Rinominando il file in .txt e aprendolo in Excel, scegliendo un delimitatore di virgola nella finestra di dialogo "importazione testo", i valori venivano posizionati in celle separate. Solo la colonna del tempo è stata data un formato "personalizzato", mentre gli altri erano "generali", il che suggerisce che non è stato in grado di analizzare la data, il che mi sorprende.

L'apertura di .txt in Excel quando si utilizzava "English (United Kingdom)" forniva alle colonne numeriche un formato "generale", e sia i formati "personalizzati" delle colonne di data e ora.

    
risposta data 11.07.2018 - 09:58
fonte
0

CSV non ha una specifica ufficiale, ma la regola normale è che se un valore contiene una virgola deve essere racchiuso tra virgolette.

Se si esegue il codice su un computer francese, (ad esempio un minitel), mi aspetto che i valori siano correttamente separati in quanto non sono inclusi.

Tuttavia, i numeri potrebbero non essere analizzati correttamente in tipi numerici. Potrebbe essere necessario specificare dire ad esempio in c #

double.TryParse(doubleString, NumberStyles.Any, CultureInfo.InvariantCulture, out invariantCultureResult);

invece di

double.TryParse(doubleString);
    
risposta data 06.07.2018 - 17:29
fonte

Leggi altre domande sui tag