Я написал библиотеку с открытым исходным кодом, которая анализирует структурированные данные, но намеренно исключил обнаружение возврата каретки, потому что не вижу смысла. Это добавляет дополнительную сложность и накладные расходы для небольшой выгоды.
К моему удивлению, пользователь представил ошибку, из-за которой анализатор не работал, и я обнаружил, что причиной проблемы было то, что данные использовали окончания строки CR, а не LF или CRLF.
Разве OSX не использовала окончания LF в стиле после перехода на Unix-платформу?
Я знаю, что есть приложения, такие как Notepad ++, в которых окончания строк могут быть изменены для явного использования CR, но я не понимаю, почему кто-то захочет.
Безопасно ли исключать поддержку статистически незначительного процента пользователей, которые решают (по какой-либо причине) использовать линейные окончания старого стиля Mac OS?
Обновить:
Для пояснения, поддержка окончания строки Windows (например, CRLF) не требует распознавания маркера CR. В целях эффективности лексер сопоставляется отдельно для каждого символа. Незаметно игнорируя символы CR, токен CRLF упрощается до LF. Таким образом, сам по себе токен CRLF можно считать анахронизмом, но вопрос не в этом.
Последней ОС, которая обеспечивала общесистемную поддержку концов строк в стиле CR, была Mac OS 9 . По иронии судьбы, единственное приложение, которое по-прежнему использует его по умолчанию в OSX, - это Microsoft Excel.
источник
CR
новых строк в вашу кодовую базу. (... и если вы твердо уверены, что это не так, дизайн вашего парсера должен быть довольно беспокойным)Ответы:
Существует хорошая практика, когда вы «либеральны в том, что вы принимаете, и консервативны в том, что вы посылаете» .
Другими словами, если есть вероятность (какой бы маленькой она ни была), что кто-то даст вам окончание строки cr (и ожидает, что она будет работать правильно), вам нужно будет ее поддержать.
TBH, я не вижу, как добавление поддержки CR займет столько времени.
Когда вы видите
cr
в лексере заглядывание следующего символа и, если это такnl
, проглотите символ новой строки и испустите токен новой строки, если следующий символ неnl
просто испускает токен новой строки и продолжайте.источник
Нет. CR не устарел (определяется как «больше не производится или не используется»). Вы сами предоставили доказательства этого. Это, возможно, необычно , но не устарело .
Что касается " безопасно ли исключать поддержку" для ЧР? Как вы говорите, это не означает потери продаж, и вы не можете поддерживать каждую странную комбинацию символов и формат файла в мире, и только вы знаете свое программное обеспечение и базу пользователей. Поэтому я бы сказал, что было бы безопасно исключить его, если вы уверены, что бремя поддержки его не добавления (как объясняет mouviciel) не перевешивает временное бремя его добавления. Но, не зная намного больше о продукте и пользовательской базе, я не уверен, как быть более конкретным.
источник
Про лень: надо балансировать
усилия по изменению кода так, чтобы CR был безопасно обработан (а затем забудьте об этом).
попытка объяснить пользователям, почему файлы, которыми они были довольны в течение десятилетий, внезапно приводит к сбою в вашем приложении, найти обходные пути, которые они могут использовать, не ставя под угрозу ваши продажи, и попросить аргументы и дать комментарии прямо здесь.
Вам решать, какой путь самый ленивый.
источник
Возможно, не слишком много пользователей обнаружат это, но в комнате есть слон: окончания строки Windows (
CRLF
). Если вы поддерживаете их (как правило, да, хотя я использую только Windows для игр), поддержка третьей части этого исторического Бермудского треугольника должна быть тривиальной.Если вы не поддерживаете что-то подобное, вы должны хотя бы упомянуть об этом в документации (стиль «Это не ошибка») и о том, как изменить файлы для работы с вашим инструментом самым простым способом (
dos2unix
например).источник
CRLF
- это строка по умолчанию, заканчивающаяся в этой ОС. И нет никакого способа гарантировать источник файла .csv, поэтому его легко можно было бы создать в системе Windows.Есть много последовательных устройств, которые полагаются
CR
как конец потока данных передETX
отправкой. Это соглашение, которое никогда не исчезнет.источник
Я бы обработал запрос как любой запрос на добавление функциональных возможностей, если вам необходимо сопоставить затраты с выгодами.
Если ровно один человек обратился за поддержкой CR, возможно, в этом нет необходимости. См. Главу из 37 сигналов ниже, где говорится, что вам следует беспокоиться только об очень популярных запросах функций.
http://gettingreal.37signals.com/ch05_Forget_Feature_Requests.php
источник
ОС MS от MSDOS и далее используют комбинацию CR + LF в качестве разделителя строк (я думаю, в основном из-за матричных принтеров, которые в них нуждаются).
Так что да, это облом, но вам все еще нужна поддержка для проклятого.
источник