Saya menulis pustaka sumber terbuka yang mem-parsing data terstruktur tetapi sengaja mengabaikan deteksi carriage-return karena saya tidak mengerti intinya. Ini menambah kompleksitas dan overhead tambahan untuk sedikit / tanpa manfaat.
Yang mengejutkan saya, seorang pengguna mengirimkan bug di mana parser tidak berfungsi dan saya menemukan penyebab masalah adalah bahwa data menggunakan ujung garis CR yang bertentangan dengan LF atau CRLF.
Bukankah OSX telah menggunakan akhiran gaya LF sejak beralih ke platform berbasis unix?
Saya tahu ada aplikasi seperti Notepad ++ di mana ujung garis dapat diubah untuk menggunakan CR secara eksplisit tapi saya tidak melihat mengapa ada orang yang mau.
Apakah aman untuk mengecualikan dukungan untuk persentase yang tidak signifikan secara statistik dari pengguna yang memutuskan (untuk alasan apa pun) ke jajaran akhir gaya Mac OS?
Memperbarui:
Untuk memperjelas, mendukung akhir jalur Windows (yaitu CRLF) tidak memerlukan pengakuan token CR. Untuk tujuan efisiensi, lexer cocok dengan basis per-char. Dengan mengabaikan char CR secara diam-diam, token CRLF menyederhanakan ke LF. Dengan demikian, token CRLF sendiri dapat dianggap sebagai anakronisme sendiri tetapi bukan itu yang menjadi pertanyaan.
OS terakhir yang memberikan dukungan seluruh sistem untuk akhir baris gaya CR adalah Mac OS 9 . Ironisnya, satu-satunya aplikasi yang masih menggunakannya sebagai default di OSX adalah Microsoft Excel.
sumber
CR
baris baru ke basis kode Anda. (... dan jika Anda yakin ini bukan masalahnya, desain parser Anda harusnya sangat sibuk)Jawaban:
Ada praktik yang baik di mana Anda "liberal dalam apa yang Anda terima, dan konservatif dalam apa yang Anda kirim" .
Dengan kata lain, jika ada kesempatan (betapapun kecilnya itu) bahwa seseorang akan memberi Anda akhiran garis cr (dan mengharapkannya bekerja dengan benar), Anda harus mendukungnya.
TBH, saya tidak bisa melihat bagaimana menambahkan dukungan CR akan memakan waktu selama itu.
Saat Anda melihat
cr
dalam lexer, intip karakter berikutnya dan jika itu adalahnl
, telusuri baris baru dan keluarkan token baris baru, jika karakter berikutnya bukannl
hanya memancarkan token baris baru dan melanjutkan.sumber
Tidak. CR tidak usang (didefinisikan sebagai "tidak lagi diproduksi atau digunakan"). Anda sendiri telah memberikan bukti tentang itu. Ini mungkin tidak biasa , tetapi tidak usang .
Adapun "apakah aman untuk mengecualikan dukungan" untuk CR? Seperti yang Anda katakan, ini bukan masalah kehilangan penjualan, dan Anda tidak dapat mendukung setiap kombinasi karakter aneh dan format file di dunia, dan hanya Anda yang tahu perangkat lunak dan basis pengguna Anda. Jadi saya akan mengatakan bahwa akan lebih aman untuk mengecualikannya jika Anda yakin bahwa beban dukungan untuk tidak menambahkannya (seperti yang dijelaskan mouviciel) tidak melebihi beban waktu menambahkannya. Tetapi tanpa mengetahui lebih banyak tentang produk dan basis pengguna saya tidak yakin bagaimana menjadi lebih spesifik.
sumber
Tentang kemalasan: Anda harus menyeimbangkan:
upaya mengubah kode sehingga CR ditangani dengan aman (dan kemudian lupakan).
upaya dalam menjelaskan kepada pengguna mengapa file yang mereka senangi selama beberapa dekade tiba-tiba membuat aplikasi Anda mogok, dalam menemukan solusi yang dapat mereka gunakan tanpa mengorbankan penjualan Anda dan dalam meminta argumen dan menjawab komentar di sini.
Terserah Anda untuk memutuskan jalan mana yang paling malas.
sumber
Mungkin tidak terlalu banyak pengguna yang akan mendeteksinya, tetapi ada seekor gajah di ruangan itu: Windows line endings (
CRLF
). Jika Anda mendukung itu (saya biasanya melakukannya, meskipun saya hanya menggunakan Windows untuk game), itu harus sepele untuk mendukung bagian ketiga dari segitiga Bermuda bersejarah ini.Jika Anda tidak mendukung sesuatu seperti ini, Anda setidaknya harus menyebutkannya dalam dokumentasi (gaya "Ini bukan bug") dan cara mengubah file agar berfungsi dengan alat Anda dengan cara yang sesederhana mungkin (
dos2unix
misalnya).sumber
CRLF
- ini adalah garis default yang berakhir pada OS itu. Dan tidak ada cara untuk menjamin sumber file .csv, sehingga dengan mudah bisa dibuat pada sistem Windows.Ada banyak perangkat serial yang mengandalkan
CR
sebagai akhir dari aliran data sebelumETX
dikirim. Itu adalah konvensi yang tidak akan pernah hilang.sumber
Saya akan memperlakukan permintaan tersebut sebagai permintaan fitur apa pun di mana Anda perlu mempertimbangkan biaya dibandingkan manfaatnya.
Jika tepatnya satu orang telah meminta dukungan CR, mungkin itu tidak perlu. Lihat bab buku di bawah ini dari 37 sinyal di mana mereka mengatakan Anda seharusnya hanya khawatir tentang permintaan fitur yang sangat populer.
http://gettingreal.37signals.com/ch05_Forget_Feature_Requests.php
sumber
MS OS dari MSDOS dan seterusnya menggunakan kombinasi CR + LF sebagai pemisah garis (saya pikir sebagian besar karena printer matriks yang membutuhkannya).
Jadi ya, itu mengecewakan, tetapi Anda masih membutuhkan dukungan untuk hal terkutuk itu.
sumber