Mam dwukolumnowy plik CSV z nazwą i numerem. Niektóre osoby używają przecinków, na przykład Joe Blow, CFA.
Przecinek ten łamie format CSV, ponieważ jest interpretowany jako nowa kolumna.
Przeczytałem i najczęstszą receptą wydaje się być zastąpienie tego znaku lub zastąpienie separatora nową wartością (np this|that|the, other
.).
Naprawdę chciałbym zachować separator przecinków (wiem, że excel obsługuje inne ograniczniki, ale inni tłumacze mogą nie). Chciałbym również zachować przecinek w nazwie, ponieważ Joe Blow| CFA
wygląda dość głupio.
Czy istnieje sposób na dodanie przecinków do kolumn CSV bez przerywania formatowania, na przykład poprzez ich ucieczkę?
Odpowiedzi:
Umieść pole w cudzysłowie, np
Zobacz wikipedia .
Zaktualizowano :
Aby zakodować cytat, użyj
"
, jeden symbol podwójnego cudzysłowu w polu zostanie zakodowany jako""
i całe pole stanie się""""
. Jeśli więc widzisz następujące elementy, np. Excel:plik CSV będzie zawierał:
Przecinek jest po prostu enkapsulowany za pomocą cudzysłowów, więc
,
staje się","
.Przecinek i cytat muszą być enkapsulowane i cytowane, tak
","
się stanie""","""
.źródło
","
), A cudzysłowy są unikane (np."""
)Problem z formatem CSV polega na tym, że nie ma jednej specyfikacji, istnieje kilka zaakceptowanych metod, bez możliwości rozróżnienia, które należy zastosować (do generowania / interpretowania). Omówiłem wszystkie metody ucieczki znaków (w tym przypadku znaki nowej linii, ale te same podstawowe założenia) w innym poście . Zasadniczo sprowadza się to do użycia procesu generowania / ucieczki CSV dla zamierzonych użytkowników, mając nadzieję, że reszta nie będzie miała nic przeciwko.
Dokument specyfikacji referencyjnej .
źródło
Jeśli chcesz to powiedzieć, możesz użyć cudzysłowów. Coś takiego
więc teraz możesz używać przecinka w zmiennej nazwy.
źródło
$whatever = "\"".$name."\"";
Musisz podać te wartości.
Oto bardziej szczegółowa specyfikacja.
źródło
Oprócz punktów w innych odpowiedziach: jeśli używasz cudzysłowów w programie Excel, należy zwrócić uwagę na położenie spacji. Jeśli masz taką linię kodu:
Excel potraktuje początkowy cytat jako dosłowny cytat zamiast używać go do zmiany przecinków. Twój kod będzie musiał zmienić się na
To ta subtelność mnie tu sprowadziła.
źródło
Napotkałem ten sam problem i zacytowanie
,
nie pomogło. Ostatecznie I otrzymuje,
się+
, wykończone przetwarzania, zapisane na wyjście z outfile i otrzymuje+
z,
. To może wydawać się brzydkie, ale zadziałało dla mnie.źródło
+
ogóle nie ma takich danych. Dziękuję za miły komentarz.""
. To jest normalny sposób na zrobienie tego.field = field.replace('"', '""')
Krok 2 - po kroku 1 umieść pole w podwójnych cudzysłowach, np.field = '"' + field + '"'
- myślę, że jesteś odlewem żelaznym.W zależności od języka może być dostępna metoda to_json. Pozwoli to uniknąć wielu rzeczy, które psują CSV.
źródło
Odkryłem, że niektóre aplikacje, takie jak Numbers na Macu, ignorują podwójny cudzysłów, jeśli jest przed nim miejsce.
a, "b,c"
nie działa podczasa,"b,c"
pracy.źródło
Możesz zakodować swoje wartości, na przykład w PHP base64_encode ($ str) / base64_decode ($ str)
IMO jest to prostsze niż podwojenie cytatów itp.
https://www.php.net/manual/en/function.base64-encode.php
Zakodowane wartości nigdy nie będą zawierać przecinka, więc każdy przecinek w pliku CSV będzie separatorem.
źródło
Możesz używać literałów szablonów (ciągów szablonów)
np. -
źródło
Możesz użyć
Text_Qualifier
pola w menedżerze połączeń plików Flat do as"
. To powinno zawinąć twoje dane w cytaty i oddzielić je przecinkami, które są poza cytatami.źródło
Po pierwsze, jeśli wartość pozycji ma znak podwójnego cudzysłowu („), zamień na 2 znak podwójnego cudzysłowu („ ”)
Na koniec zawiń wartość przedmiotu:
NA LEWO: ze znakiem podwójnego cudzysłowu („)
NA PRAWO: Ze znakiem podwójnego cudzysłowu („) i przecinkiem (,)
źródło
Podwójne cytaty nie działały dla mnie, działały dla mnie
\"
. Jeśli chcesz umieścić podwójne cudzysłowy jako przykład, możesz ustawić\"\"
.Możesz budować formuły, na przykład:
napisze w csv:
źródło
Może nie być to, co jest potrzebne, ale jest to bardzo stare pytanie, a odpowiedź może pomóc innym. Porada, którą uważam za przydatną przy importowaniu do programu Excel przy użyciu innego separatora, to otwarcie pliku w edytorze tekstu i dodanie pierwszego wiersza, takiego jak:
sep = |
gdzie | to separator, którego chcesz używać w programie Excel. Alternatywnie możesz zmienić domyślny separator w systemie Windows, ale nieco przesadzony:
Panel sterowania> Zegar i region> Region> Formaty> Dodatkowe> Liczby> Separator list [zmień z przecinka na preferowaną alternatywę]. Oznacza to, że Excel domyślnie eksportuje również CSV przy użyciu wybranego separatora.
źródło