Jadi biasanya file CSV menggunakan koma dan karakter kembali sebagai pemisah bidang dan garis.
Ini mengalami masalah yang jelas dengan teks yang dapat berisi kedua karakter ini.
Jelas ada opsi di sana (melarikan diri) tetapi bagaimana orang menangani ini? Gunakan karakter yang berbeda - pipa atau tilda? Lari mereka? Tidak menggunakan file yang dibatasi, itu 2010 dan kami memiliki XML sekarang?
Mencari setidaknya usaha untuk peluang yang layak untuk tidak melihat masalah.
(Untuk lebih jelasnya, ini adalah pertanyaan karena rasa ingin tahu daripada sesuatu yang lebih solid - itu adalah sesuatu yang saya hadapi berulang kali dengan data, selalu mengelilinginya tetapi biasanya terasa sedikit, yah, kotor, dan bertanya-tanya apa pengalaman orang lain).
sumber
Jawaban:
Menurut Wikipedia :
Dan selanjutnya:
Saya tidak tahu siapa yang menemukan itu, tetapi secara efektif menunjukkan bahwa pada akhirnya Anda harus melarikan diri. Itu satu-satunya solusi yang solid. Segala sesuatu yang lain hanyalah lakban di atas lakban: mungkin berfungsi untuk saat ini, tetapi pada akhirnya Anda akan menemukan kasus di mana Anda memerlukan pengecualian untuk pengecualian, dan tidak butuh waktu lama sebelum bola-bola kendali Anda dari aturan adalah cara yang lebih kompleks daripada solusi karakter pelarian yang sederhana.
Tampaknya pencipta CSV pertama kali mencoba menghindari melarikan diri dari koma dengan membuat sintaks khusus yang dikutip ganda, yang memungkinkan penyelamatan koma, tetapi kemudian seseorang ingin menyimpan karakter tanda kutip ganda juga, jadi mereka harus melarikan diri pada saat itu - dengan senang menggunakan double-quote sebagai karakter pelarian. Seandainya mereka memutuskan untuk melarikan diri dengan benar sejak awal, sintaksinya akan lebih mudah sekarang.
sumber
Saya berasumsi Anda memiliki sesuatu seperti ini:
Jika string yang berisi pembatas tidak dikutip atau melarikan diri, Anda tidak nyata cara yang dapat diandalkan parsing file.
Namun, Anda dapat memeriksa data untuk menguraikan dan menarik kesimpulan seperti:
Anda memang harus menulis parser untuk menangani hal-hal seperti itu, tetapi itu tidak harus rumit.
Dalam pengalaman saya, mengimpor dump besar dari sesuatu seperti Excel selalu mengakibatkan harus kembali dan meninjau beberapa bola aneh. Tantangan Anda adalah untuk memberikan program anda hanya akal sehat cukup mengenai data sehingga tidak melakukan insert gila. Kemudian tinjau apa yang telah dicatat dan cuci / bilas / ulangi.
Saya pernah menangani FAQ internal untuk perusahaan kecil yang menggunakan semua workstation Ubuntu. Sebagian dari FAQ memberi 'pintasan shell', dan itu muncul di benak saya. Yah, jawabannya juga biasanya dibatasi pipa (yaitu grep foo | sesuatu) dan tidak dikutip atau lolos. Saya merasakan sakit itu :)
sumber
Tidak ada yang salah dengan CSV hingga titik tertentu
CSV bekerja dengan baik untuk data yang didefinisikan secara kaku yang tidak mungkin berubah format dan tidak menimbulkan banyak kejutan pada parser penerima.
Berikut daftar praktis dari gotcha besar:
Anda bisa mendekati ini dengan header meta-data yang menjelaskan bagaimana bidang harus diurai, tetapi Anda juga bisa menggunakan XML. Ini karena jenis kekacauan CSV bentuk bebas yang diciptakan. Pendekatan XML sepertinya terlalu berat untuk apa yang bisa, pada kenyataannya, menjadi masalah sederhana.
Alternatif yang populer adalah strategi "pembatas karakter aneh". Ini mengatasi banyak masalah pelolosan di atas karena Anda menggunakan sesuatu seperti | (pipa) karakter untuk pembatas lapangan, dan CRLF untuk penghentian rekaman. Ini tidak mengatasi masalah bidang multi-garis (kecuali jika Anda menggunakan penghitung bidang) tetapi Anda mendapatkan garis yang diformat dengan baik untuk manusia.
Secara keseluruhan, jika Anda hanya mencari cara sederhana untuk menangani file semacam ini maka, di dunia Java, Anda bisa melempar OpenCSV padanya. Dengan begitu Anda memisahkan semua masalah ke dalam kerangka kerja yang sudah ada.
sumber
CSV masih merupakan format yang valid dalam banyak situasi, terutama karena masih harus menjadi cara termudah bagi pelanggan untuk menulis data yang perlu diimpor ke dalam aplikasi Anda. Beberapa pelanggan kami suka berurusan dengan XML, mungkin karena itu sangat bertele-tele dan memiliki semua kurung sudut "menakutkan". Jauh lebih mudah bagi mereka untuk membungkus otak mereka di sekitar daftar item sederhana yang dipisahkan oleh karakter yang disepakati, dan juga setuju bahwa karakter yang sama tidak akan diizinkan dalam isi bidang.
Yang mengatakan, Anda masih harus menangani input dengan benar dan memeriksa situasi di mana mereka menggunakan karakter yang tidak valid. Saya sudah mulai menggunakan FileHelpers untuk kebutuhan parsing CSV saya.
sumber
Saya biasanya tetap berpegang pada standar dan melarikan diri dari mereka. dalam kebanyakan bahasa pemrograman ada dukungan builtin yang baik atau perpustakaan yang baik tersedia.
itu tergantung pada situasi format mana yang akan digunakan dan CSV adalah format yang masuk akal untuk bertukar struktur format data sederhana.
sumber
Lupakan CSV, gunakan JSON . Mudah ditulis, mudah diurai. XML sangat 2005 .
sumber
Biasanya, apa yang saya lakukan adalah mendapatkan TSV (tab-separated values) daripada file CSV, tarik file tersebut ke Emacs dan lihat karakter mana yang jarang digunakan oleh PERNAH ($ biasanya merupakan pilihan yang baik di sekitar sini), dan kemudian saya mengonversi semua tab menjadi $.
Dari sana, GNU AWK dapat dikatakan menggunakan $ sebagai pemisah bidang, dan Bob adalah paman Anda.
sumber