Czytałem to artykuł i jestem ciekawy właściwej odpowiedzi na to pytanie.
Jedyne, co przychodzi mi do głowy, to być może, że w niektórych krajach separatorem dziesiętnym jest przecinek i mogą być problemy z udostępnianiem danych w CSV , ale tak naprawdę nie jestem pewien mojej odpowiedzi.
project-management
David Gasquez
źródło
źródło
Odpowiedzi:
Specyfikacja formatu CSV jest zdefiniowana w RFC 4180 . Ta specyfikacja została opublikowana, ponieważ
Niestety od 2005 roku (data publikacji RFC) nic się nie zmieniło. Wciąż mamy szeroką gamę wdrożeń. Ogólne podejście zdefiniowane w RFC 4180 polega na umieszczaniu pól zawierających znaki takie jak przecinki w cudzysłowie, jednak to zalecenie nie zawsze spełnia inne oprogramowanie.
Problem polega na tym, że w różnych europejskich lokalizacjach przecinek służy jako kropka dziesiętna, więc
0,005
zamiast tego piszesz0.005
. Jednak w innych przypadkach przecinki są używane zamiast spacji do sygnalizowania grup cyfr, np.4,000,000.00
(Patrz tutaj ). W obu przypadkach użycie przecinków może prowadzić do błędów w odczycie danych z plików csv, ponieważ twoje oprogramowanie tak naprawdę nie wie, czy0,005, 0,1
są to dwie liczby, czy cztery różne liczby (patrz przykład tutaj ).Wreszcie, jeśli przechowujesz tekst w pliku danych, przecinki są znacznie bardziej powszechne w tekście niż, na przykład, średniki, więc jeśli tekst nie jest ujęty w cudzysłów, dane takie można również łatwo odczytać z błędami .
Nic nie czyni przecinków lepszymi ani gorszymi separatorami pól, o ile pliki CSV są używane zgodnie z zaleceniami RFC 4180, które chronią przed problemami opisanymi powyżej. Jeśli jednak istnieje ryzyko zastosowania uproszczonego formatu CSV, który nie zawiera pól w cudzysłowie, lub zalecenie może być zastosowane niespójnie, wówczas inne separatory (np. Średnik) wydają się bezpieczniejsze.
źródło
,
zamiast rzadszego separatora powoduje rozdęcie danych, ponieważ trzeba przez cały czas ich unikać, jest jednak prawdziwy. I oczywiście są wszyscy ludzie, którzy myślą, że wiedzą, jak działa CSV, ale tak naprawdę nie.Technicznie przecinek jest tak dobry, jak każdy inny znak, który może być użyty jako separator. Nazwa formatu bezpośrednio wskazuje, że wartości są rozdzielane przecinkami (wartości rozdzielane przecinkami).
Opis formatu CSV wykorzystuje przecinek jako separator.
Każde pole zawierające przecinek powinno być cytowane podwójnie. Nie powoduje to problemów z wczytywaniem danych. Patrz punkt 6 z opisu :
Na przykład funkcje
read.csv
iwrite.csv
domyślnie R używają przecinka jako separatora.źródło
values
tego, że są oddzielone przecinkami. Inni, nawiązując do europejskichformatting
liczb, nie jest to problemem dla csvstandard
, jak poprawnie cytujesz pkt 6 powyżej. Istnieją rozbieżności z „prawidłowym użytkowaniem” w dowolnym formacie danych. Chodzi o to - poznaj swoje dane. Inni wspominajątab
lub;
ograniczają, ale mogą mieć te same problemy, co przecinki, gdy masz do czynienia z danymi wprowadzonymi przez użytkownika (być może za pośrednictwem formularza i przechwyconego przez bazę danych - musiałem się sprzeczać z polami do swobodnego wprowadzania tekstu, które ludzie mam tłuszcz w palcachtab
... to jest do bani)Oprócz tego, że jest cyfrowym separatorem cyfr, stanowi także część adresu (np. Adres klienta itp.) W wielu krajach. Podczas gdy niektóre kraje mają krótkie, dobrze zdefiniowane adresy, wiele innych ma długie adresy, w tym czasami dwa przecinki w tej samej linii. Dobre pliki CSV zawierają wszystkie takie dane w podwójnych cudzysłowach. Jednak nadmiernie uproszczone, źle napisane parsery nie przewidują ich czytania i różnicowania. (Następnie pojawia się problem używania podwójnych cudzysłowów jako części danych, takich jak cytat z wiersza).
źródło
Chociaż odpowiedź @Tim jest poprawna - chciałbym dodać, że „csv” jako całość nie ma wspólnego standardu - zwłaszcza reguły dotyczące ucieczki nie są w ogóle zdefiniowane, co prowadzi do „formatów”, które można odczytać w jednym programie, ale nie w innym . Jest to uzasadnione tym, że każdy „programista” pod słońcem myśli po prostu „oooh csv- Zbuduję własny parser!” a następnie pomija wszystkie przypadki krawędzi.
Co więcej, csv całkowicie brakuje możliwości przechowywania metadanych, a nawet typu danych kolumny - co prowadzi do kilku dokumentów, które należy przeczytać, aby zrozumieć dane.
źródło
Jeśli możesz porzucić separator przecinka i użyć znaku tabulacji, odniesiesz znacznie większy sukces. Możesz zostawić plik o nazwie .CSV, a importowanie do większości programów zwykle nie stanowi problemu. Po prostu zaimportuj plik po prostu określ TAB rozdzielany, a nie przecinkami. Jeśli w twoich danych są przecinki, będziesz mieć problem z określeniem rozdzielania przecinków, jak dobrze wiesz.
źródło
|
jako ogranicznik w plikach tekstowych rekordów w domowych plikach CSV podobnych do plików (z tytułami książek i innymi metadanymi dokumentów).|
nigdy nie pojawia się w danych, z którymi pracuję, więc mogę po prostu pisać skrypty Perla, które po prostu dzielą / łączą się bez sprawdzania jakiegokolwiek cytowania. Dotyczyło to jednorazowego projektu, który polega tylko na przetwarzaniu metadanych zapisanych z bazy danych MS Access. W przypadku każdego większego projektu lub jeśli planujesz długoterminowe przechowywanie danych w tym formacie, wybierz coś bardziej niezawodnego! Zawsze mogłem coś ulepszyć, jeśli partia tego miesiąca coś zepsuła.split
polecenie dla Staty, spojrzałem między innymi na odpowiednik Perla, aby zobaczyć, co zrobił, a czego nie zrobił. Nie kod źródłowy, tylko oferowana funkcjonalność.cut
,sort
iuniq
.ASCII zapewnia nam cztery znaki „separatora”, jak pokazano poniżej we fragmencie ze strony podręcznika ascii (7) * nix:
Ta odpowiedź zapewnia porządny przegląd ich zamierzonego użycia.
Oczywiście, te kody kontrolne nie są przyjazne dla człowieka (czytelność i dane wejściowe) bardziej popularnych ograniczników, ale są akceptowalnym wyborem dla wewnętrznej i / lub efemerycznej wymiany danych między programami.
źródło
Problemem nie jest przecinek; problemem jest cytowanie. Bez względu na to, jakich ograniczników rekordów i pól używasz, musisz być przygotowany na spotkanie ich w treści. Potrzebujesz więc mechanizmu cytowania. A NASTĘPNIE potrzebujesz sposobu, aby pojawił się również cytat.
Przestrzeganie standardu RFC 4180 sprawia, że wszystko jest prostsze dla wszystkich.
Osobiście musiałem napisać skrypt, aby prawdopodobnie naprawić dane wyjściowe z programu, który popełnił błąd, więc trochę się nad tym zastanawiam. „prawdopodobnie naprawić” oznacza, że zadziałało dla MOICH danych, ale widzę sytuacje, w których się nie udałoby. (W obronie tego programu został napisany przed standardem).
źródło