Escribí una biblioteca de código abierto que analiza datos estructurados pero intencionalmente omitió la detección de retorno de carro porque no veo el punto. Agrega complejidad adicional y gastos generales para poco o ningún beneficio.
Para mi sorpresa, un usuario envió un error donde el analizador no funcionaba y descubrí que la causa del problema era que los datos usaban terminaciones de línea CR en lugar de LF o CRLF.
¿No ha estado OSX usando terminaciones de línea de estilo LF desde que se cambió a una plataforma basada en Unix?
Sé que hay aplicaciones como Notepad ++ donde las terminaciones de línea se pueden cambiar para usar CR explícitamente, pero no veo por qué alguien querría hacerlo.
¿Es seguro excluir el soporte para el porcentaje estadísticamente insignificante de usuarios que deciden (por cualquier razón) las antiguas terminaciones de estilo de Mac OS?
Actualizar:
Para aclarar, admitir los finales de línea de Windows (es decir, CRLF) no requiere el reconocimiento de token CR. Para fines de eficiencia, el lexer coincide por cada carácter. Al ignorar silenciosamente los caracteres CR, el token CRLF se simplifica a LF. Como tal, el token CRLF en sí mismo podría considerarse un anacronismo en sí mismo, pero de eso no se trata esta pregunta.
El último sistema operativo que proporcionó soporte en todo el sistema para las terminaciones de línea de estilo CR fue Mac OS 9 . Irónicamente, la única aplicación que todavía lo usa como predeterminada en OSX es Microsoft Excel.
fuente
CR
nuevas líneas en su base de código. (... y si cree firmemente que este no es el caso, el diseño de su analizador debe ser bastante agitado)Respuestas:
Hay una buena práctica en la que eres "liberal en lo que aceptas y conservador en lo que envías" .
En otras palabras, si existe la posibilidad (por pequeña que sea) de que alguien le dé un final de línea cruzada (y espere que funcione correctamente), deberá apoyarlo.
TBH, no puedo ver cómo agregar el soporte CR tomaría tanto tiempo.
Cuando vea a
cr
en el lexer, eche un vistazo al siguiente personaje y, si es unnl
, trague la nueva línea y emita un token de nueva línea, si el siguiente personaje no esnl
simplemente emita un token de nueva línea y continúe.fuente
No. CR no está obsoleto (definido como "ya no se produce ni se usa"). Usted mismo ha proporcionado evidencia de eso. Quizás sea poco común , pero no obsoleto .
En cuanto a "¿es seguro excluir el soporte" para CR? Como usted dice, no se trata de perder ventas, y no puede soportar todas las combinaciones de caracteres extraños y formatos de archivo en el mundo, y solo usted conoce su software y base de usuarios. Entonces diría que sería seguro excluirlo si está convencido de que la carga de soporte de no agregarlo (como explica Mouviciel) no supera la carga de tiempo de agregarlo. Pero sin saber mucho más sobre el producto y la base de usuarios, no estoy seguro de cómo ser más específico.
fuente
Sobre la pereza: tienes que equilibrar:
esfuerzo en cambiar el código para que CR se maneje de forma segura (y luego olvidarse de él).
esfuerzo para explicar a los usuarios por qué los archivos con los que estuvieron contentos durante décadas de repente bloquean su aplicación, encontrar soluciones que puedan usar sin comprometer sus ventas y pedir argumentos y responder comentarios aquí.
Depende de usted decidir qué camino es el más flojo.
fuente
Tal vez no muchos usuarios lo detecten, pero hay un elefante en la sala: finales de línea de Windows (
CRLF
). Si los admite (generalmente lo hago, aunque solo uso Windows para juegos), debería ser trivial admitir la tercera parte de este histórico triángulo de las Bermudas.Si no admite algo como esto, al menos debería mencionarlo en la documentación (estilo "Esto no es un error") y cómo cambiar los archivos para que funcionen con su herramienta de la manera más simple posible (
dos2unix
por ejemplo).fuente
CRLF
: es la línea predeterminada que termina en ese sistema operativo. Y no hay forma de garantizar el origen de un archivo .csv, por lo que fácilmente podría haberse creado en un sistema Windows.Hay muchos dispositivos en serie que se basan en el
CR
final del flujo de datos antes de queETX
se envíe. Es una convención que nunca desaparecerá.fuente
Consideraría la solicitud como una solicitud de función en la que necesita comparar los costos con los beneficios.
Si exactamente una persona ha solicitado soporte CR, tal vez no sea necesario. Vea el capítulo del libro a continuación de 37 señales donde dicen que solo debe preocuparse por solicitudes de funciones muy populares.
http://gettingreal.37signals.com/ch05_Forget_Feature_Requests.php
fuente
Los MS OS de MSDOS en adelante usan la combinación CR + LF como un separador de línea (creo que principalmente debido a las impresoras matriciales que los necesitan).
Así que sí, es un fastidio, pero aún necesitas apoyo para la maldita cosa.
fuente