Jakie metadane „sep =” można dodać do plików CSV?

22

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 :

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"
Burhan Ali
źródło
4
Tak, jest to specyficzne dla programu Excel .
Raystafarian
2
Czy udało ci się coś na tym uzyskać? Mam problem z tym samym pytaniem i jeszcze nie znalazłem specyfikacji MS opisującej tę funkcję. Jeśli ta funkcja nie jest udokumentowana przez stwardnienie rozsiane, w jaki sposób, do cholery, ona się wydostała?
toddlermenot
@toddlermenot Niestety nie. Jedyne, co otrzymuję, to ludzie, którzy twierdzą, że jest specyficzny dla Excela, i nie mają nic na poparcie tego twierdzenia, co jest rozczarowujące.
Burhan Ali,

Odpowiedzi:

6

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:

Wiele plików „CSV” osadza metadane, na przykład w wierszach przed wierszem nagłówka dokumentu CSV. Ta specyfikacja nie definiuje żadnych formatów osadzania metadanych w plikach CSV, oprócz nazw kolumn w wierszu nagłówka.

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ę.

Stefan Kögl
źródło
Dobre zaopatrzenie. Powinienem powiedzieć, że sep = | definiuje separator do użycia w programie Excel jako znak potoku („|”). Nie jest szeroko stosowany, ale nie jest wyłączny dla Excela. Jest to dyrektywa oddzielna. Międzynarodowe wersje programu Excel iirc mają różne znaki, na przykład język europejski na komputerze z programem Excel używa średników.
var firstName
1
Jestem świadomy użycia (być może nie było to całkowicie jasne z mojej odpowiedzi). Właśnie wskazałem, że wydaje się, że Excel wprowadził tę funkcję, ponieważ jest oparty na dowolnym (publicznym) standardzie.
Stefan Kögl
0

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 ).

kintel
źródło
-1

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.

Dario de Judicibus
źródło
-3

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\nlub\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.

Steve Barnes
źródło
2
To nie odpowiada na moje pytanie. Wyjaśnia, czym są CSV, o czym już wiem. Moje pytanie dotyczy konkretnej składni. Czy jest jakieś tło, które mógłbym dodać do mojego pytania w celu wyjaśnienia rzeczy?
Burhan Ali
1
Dzięki, ale to wciąż nie pomaga. sep=nie jest parametrem parsera. Dodałem trochę wyjaśnienia do mojego pytania.
Burhan Ali,
1
@ SteveBarnes Ale czy jakieś narzędzie, na przykład wspomniana biblioteka Pythona, zezwala na opcje jako część zawartości pliku? To jest, moim zdaniem, główny punkt pytania.
Randy Orrison
1
„Ponieważ są jedną z wielu niezwykłych osobliwości”. Czy to jest To część tego, co próbuję wypracować. Nie chcę wiedzieć, co to jest CSV. Nie chcę wiedzieć, jak analizować plik CSV. Chcę wiedzieć, co sep=jest i skąd pochodzi.
Burhan Ali
1
sep = jest specyficzną dla Microsoft Excel metodą podpowiedzi, która nie jest objęta żadną specyfikacją inną niż Microsoft, którą mogę znaleźć. Pochodzi z części Microsoft.
Steve Barnes