Napisałem bibliotekę open source, która analizuje uporządkowane dane, ale celowo pomijałem wykrywanie powrotu karetki, ponieważ nie widzę sensu. Dodaje dodatkową złożoność i ogólne koszty dla niewielkiej / zerowej korzyści.
Ku mojemu zdziwieniu użytkownik zgłosił błąd, w którym analizator składni nie działał, a ja odkryłem, że przyczyną problemu było to, że dane używały zakończeń linii CR w przeciwieństwie do LF lub CRLF.
Czy OSX nie używa zakończeń linii w stylu LF od czasu przejścia na platformę uniksową?
Wiem, że istnieją aplikacje takie jak Notepad ++, w których zakończenia linii można zmienić, aby jawnie używać CR, ale nie rozumiem, dlaczego ktoś chciałby to zrobić.
Czy bezpiecznie jest wykluczyć obsługę statystycznie nieistotnego odsetka użytkowników, którzy decydują się (z jakiegokolwiek powodu) na zakończenia linii w starym stylu Mac OS?
Aktualizacja:
Aby to wyjaśnić, obsługa zakończeń linii Windows (tj. CRLF) nie wymaga rozpoznawania tokenów CR. Dla celów wydajności leksyk dopasowuje się na podstawie jednego znaku. Ignorując znaki CR po cichu, token CRLF upraszcza się do LF. W związku z tym sam token CRLF można uznać za anachronizm sam w sobie, ale nie o to chodzi w tym pytaniu.
Ostatnim systemem operacyjnym, który zapewnił wsparcie systemowe dla zakończeń linii w stylu CR, był Mac OS 9 . Jak na ironię, jedyną aplikacją, która nadal używa go jako domyślnej w OSX, jest Microsoft Excel.
źródło
CR
nowych linii do bazy kodu. (... a jeśli mocno wierzysz, że tak nie jest, konstrukcja twojego parsera musi być dość gorączkowa)Odpowiedzi:
Istnieje dobra praktyka, w której jesteś „liberalny w tym, co akceptujesz, i konserwatywny w tym, co wysyłasz” .
Innymi słowy, jeśli istnieje szansa (choćby niewielka), że ktoś da ci koniec linii cr (i spodziewa się, że będzie działał poprawnie), będziesz musiał go wesprzeć.
TBH, nie widzę, jak dodanie obsługi CR trwałoby tak długo.
Kiedy zobaczysz znak
cr
w leksykach, zerknij na następny znak, a jeśli jest tonl
, połknij znak nowej linii i wyślij token nowej linii, jeśli następny znak nie jestnl
po prostu wyślij token nowej linii i kontynuuj.źródło
Nie. CR nie jest przestarzały (zdefiniowany jako „już nie produkowany ani używany”). Ty sam to udowodniłeś. Być może jest to rzadkie , ale nie przestarzałe .
Jeśli chodzi o „czy bezpiecznie jest wykluczyć wsparcie” dla CR? Jak mówisz, nie jest to kwestia utraty sprzedaży i nie możesz obsłużyć każdej dziwnej kombinacji znaków i formatu plików na świecie, a tylko Ty znasz swoje oprogramowanie i bazę użytkowników. Powiedziałbym więc, że można go bezpiecznie wykluczyć, jeśli jesteś przekonany, że obciążenie związane z brakiem dodawania (jak wyjaśnia mouviciel) nie przeważa nad nakładem czasu na dodanie. Ale nie wiedząc dużo więcej o produkcie i bazie użytkowników, nie jestem pewien, jak być bardziej szczegółowym.
źródło
O lenistwie: musisz zrównoważyć:
wysiłek w celu zmiany kodu, aby CR był bezpiecznie obsługiwany (a następnie o nim zapomniał).
wysiłek w wyjaśnianiu użytkownikom, dlaczego pliki, z których byli zadowoleni przez dziesięciolecia, nagle powodują awarię aplikacji, znajdowanie obejść, z których mogą korzystać bez narażania sprzedaży, oraz proszenie o argumenty i odpowiedzi na komentarze tutaj.
Od Ciebie zależy, która ścieżka jest najbardziej leniwa.
źródło
Być może niewielu użytkowników to wykryje, ale w pokoju jest słoń: zakończenia linii Windows (
CRLF
). Jeśli je popierasz (generalnie tak, chociaż używam tylko Windowsa do gier), obsługa trzeciej części tego historycznego trójkąta bermudzkiego powinna być trywialna.Jeśli nie obsługujesz czegoś takiego, powinieneś przynajmniej wspomnieć o tym w dokumentacji (styl „To nie jest błąd”) oraz o tym, jak zmieniać pliki, aby działały z twoim narzędziem w najprostszy możliwy sposób (
dos2unix
na przykład).źródło
CRLF
- jest to domyślna linia kończąca się w tym systemie operacyjnym. I nie ma sposobu, aby zagwarantować źródło pliku .csv, więc łatwo można go utworzyć w systemie Windows.Istnieje wiele urządzeń szeregowych, które polegają na
CR
zakończeniu strumienia danych przedETX
wysłaniem. To konwencja, która nigdy nie odejdzie.źródło
Potraktowałbym tę prośbę jako każdą prośbę o funkcję, w której trzeba porównać koszty z korzyściami.
Jeśli dokładnie jedna osoba poprosiła o wsparcie CR, być może nie jest to konieczne. Zobacz poniższy rozdział książki z 37 sygnałów, które mówią, że powinieneś martwić się tylko bardzo popularnymi żądaniami funkcji.
http://gettingreal.37signals.com/ch05_Forget_Feature_Requests.php
źródło
Systemy MS OS od MSDOS używają kombinacji CR + LF jako separatora linii (myślę, że głównie z powodu drukarek matrycowych, które ich potrzebują).
Więc tak, to kłótnia, ale wciąż potrzebujesz wsparcia dla tego cholerstwa.
źródło