Próbując dowiedzieć się, jak uzyskać prawidłowe otwieranie sep=,
plików CSV w programie Excel na hiszpańskim komputerze PC (należącym do klienta), na górze pliku znalazłem wiele odpowiedzi zalecających użycie :
- Najprostszym sposobem na otwarcie pliku CSV z przecinkami w programie Excel
- Jak kontrolować import CSV do Excela 2010
- Jak otwierać pliki CSV rozdzielane średnikami w programie Excel w wersji amerykańskiej
- Spacja lub tabulatory jako separatory w CSV
- Jak przekonać Excela do interpretowania przecinka jako domyślnego separatora w plikach CSV?
Na pierwszy rzut oka to podejście działa, ale żadna z tych odpowiedzi nie zawiera żadnych dalszych informacji na temat tego, skąd pochodzi ta opcja metadanych. Próbowałem poszukać, co to znaczy (i dlatego znalazłem wszystkie te odpowiedzi), ale nie byłem w stanie uzyskać żadnych dalszych informacji, szczególnie biorąc pod uwagę, że interpunkcja jest bardzo trudna do znalezienia.
Moim głównym problemem jest to, czy jest to funkcja specyficzna dla programu Excel . Podejrzewam, że tak, ale nie znalazłem nic ostatecznego, aby to potwierdzić.
Niektóre powiązane pytania to:
- Jakich znaków można użyć w tym ustawieniu?
- Jakie inne ustawienia są dostępne (np. Znak zakończenia linii, znak cudzysłowu itp.).
- Czy są jakieś inne narzędzia, które oficjalnie obsługują tę funkcję?
Mam nadzieję, że gdzieś jest dokumentacja, na którą ktoś może mnie wskazać, która odpowie na wszystkie te pytania i jeszcze więcej; Po prostu nie byłem w stanie go znaleźć.
Pewne wyjaśnienie:
To sep=
nie jest parametr analizatora składni. Ma być umieszczony w CSV. Przykład:
sep=|
"LETTER"|"ANIMAL"
"a"|"aardvark"
"b"|"bear"
"c"|"cow"
źródło
Odpowiedzi:
RFC 4180 jest powszechnie uznawany za standard dla formatu CSV i nie wspomina o żadnej takiej funkcji.
Model W3C dla danych tabelarycznych i metadanych w sieci wymienia go jako funkcję, która nie wchodzi w ich zakres:
Chociaż nie znalazłem żadnego bezpośredniego dowodu, że ta funkcja jest specyficzna dla programu Excel, najwyraźniej nadal tak jest, ponieważ wydaje się, że nie ma dokumentu standaryzacyjnego obejmującego tę funkcję.
źródło
Aby udzielić odpowiedzi na jedno z twoich pytań: „Czy są jakieś inne narzędzia, które oficjalnie obsługują tę funkcję?”
To nie jest obsługiwane przez Apple Numbers (testowałem przy użyciu Numbers w wersji 3.6.2).
Nie jest również obsługiwany przez csv2json ( https://www.npmjs.com/package/csv2json ) ani csvtojson ( https://www.npmjs.com/package/csvtojson ).
źródło
Instrukcja sep = jest używana we wszystkich krajach, w których przecinek jest używany jako separator dziesiętny, jak we Włoszech. Ponieważ program Excel eksportuje CSV za pomocą średników zamiast przecinków w tych krajach, jeśli chcesz mieć pewność, że plik można odczytać w USA lub innych krajach, POTRZEBUJESZ
sep =;
na górze pliku. Jest to specyficzne dla programu Excel i może być ignorowane przez inne aplikacje.
źródło
Prawie każde narzędzie, które może importować z plików .csv, rozpoznaje, że przecinek nie jest jedynym możliwym separatorem, na przykład tabulatory są powszechne od dłuższego czasu. Myślę, że to sięga nawet do czasów kart dziurkowanych, że musi istnieć jakiś znak, który jest rozpoznawany jako koniec pola danych - z wyjątkiem systemów, które używają pól o stałej szerokości lub pól z prefiksem długości prawie każdy system tego potrzebuje. od pojawienia się komputerów.
3 niezbędne elementy to separator pól, separator rekordów i znacznik końca danych, csv domyślnie używa odpowiednio przecinka, nowej linii i końca pliku, ale można użyć niemal każdego poprawnego wejścia, jednak potrzebujesz mechanizmu za ucieczkę od specjalnych znaczników, jeśli występują w waszych ważnych danych.
Jeden historyczny system, z którym się zetknąłem, używał znaku nowej linii na końcu pola, 2 pustych linii na końcu zapisu i
*!*!* END *!*!*
na końcu danych. Często spotykam wszystkie,\t|:
używane jako separatory pól wraz z różnymi znakami kontrolnymi.Należy uważać na to, że Francuzi i inni używają przecinka jako miejsca dziesiętnego - może to powodować różnego rodzaju zabawy i gry. W rfc4180 istnieje pewien stopień standaryzacji plików csv, ale są chwile, kiedy trzeba ręcznie edytować pliki podczas eksportowania z jednego programu i importowania do innego.
Aby odpowiedzieć na drugą część pytania, na przykład Python zawiera czytnik / program zapisujący csv jako jedną ze standardowych bibliotek, która oferuje następujące opcje:
delimiter
- To jest separator pól, (jeśli nie jest poprzedzony znakiem ucieczki).doublequote
- Jeśli to prawda, to"
wewnątrz pola będzie reprezentowane jako""
escapechar
- usuwa wszelkie specjalne znaczenie z dowolnego następującego znaku, np. jeśli jest ustawiony na,\
wówczas cytat może być reprezentowany jako\"
lineterminator
- zwykle jeden\n
,\r
,\r\n
lub\n\r
quotechar
- znak używany do cytowania ciągów znaków, zwykle"
lub'
quoting
- oznacz jako jeden z:ALL
- Każde pole jest w cudzysłowie, tzn .:"1","Free Beer","ASAP"
MINIMAL
- Cytuj tylko pola, które mają znaki specjalne, tj .:1,"Beer, (Free)", Now, Please
QUOTE_NONNUMERIC
- Cytuj wszystko, co nie jest liczbą, tj .:1,"Beer, (Free)", "Now", "Please"
NONE
- Zamiast tego nie cytuj ucieczki, tzn .:1,Beer\, (Free), Now, Please
skipinitialspace
- pomiń dowolne początkowe miejsce w każdym polu, abyś mógł użyć go,
zamiast,
separatora pól.Ogólnie rzecz biorąc, im bardziej elastyczne i dobrze przemyślane narzędzie, które może importować pliki csv, tym więcej z tych opcji (prawdopodobnie o różnych nazwach i / lub mechanizmach), które będzie miało.
źródło
sep=
nie jest parametrem parsera. Dodałem trochę wyjaśnienia do mojego pytania.sep=
jest i skąd pochodzi.