@ChadNC Też o tym pomyślałem, wybierając separator, którego będzie używał mój kod. Najłatwiejszym rozwiązaniem było użycie ;, które jest automatycznie rozpoznawane zarówno w systemie Ubuntu, jak i Windows, bez konieczności dyktowania jakichkolwiek konkretnych ustawień.
gsamaras,
Odpowiedzi:
77
W systemie Windows jest to zależne od ekranu dostosowywania „Opcje regionalne i językowe”, na którym znajduje się separator listy. Jest to znak, który aplikacje Windows mają być separatorem CSV.
Oczywiście działa to tylko w aplikacjach Windows, na przykład Excel nie podzieli automatycznie danych na kolumny, jeśli plik nie używa wspomnianego powyżej separatora. Wszystkie aplikacje korzystające z ustawień regionalnych systemu Windows będą miały takie zachowanie.
Jeśli piszesz program dla Windows, który będzie wymagał zaimportowania CSV w innych aplikacjach i wiesz, że separator listy ustawiony dla twoich maszyn docelowych to ,, to idź do niego, w przeciwnym razie wolę, ;ponieważ powoduje mniej problemów z przecinkami dziesiętnymi, grupowaniem cyfr i nie pojawia się w dużej ilości tekstu.
Ta zmiana wpłynie również na otwieranie plików CSV w programie Excel. Jeśli chcesz, aby plik CSV był bardziej zgodny z systemem Windows, umieść go sep=;na górze pliku CSV.
papo
11
> „Wolę; ponieważ powoduje mniej problemów z przecinkiem”. To jest złe rozwiązanie. Jeśli separatorem jest przecinek, a wartość komórki również zawiera przecinek, musisz ująć wartość w podwójne cudzysłowy. Na przykład: 111 222, „33,5”, 444, „55,98”, 666
Elmue
1
Dotyczy to również aplikacji Mac Numbers. Wyciągałem włosy, ponieważ nie mogłem zrobić pliku csv, który rozpoznał Photoshop. Zmieniłem opcję regionu z powrotem na angielski amerykański i wszystko znów działało dobrze
Tibidabo
21
Ta regionalna rzecz jest najgłupszą rzeczą, jaką można było zrobić. W jaki sposób format pliku csv może być różny w różnych regionach, co oznacza, że moi koledzy nie mogą otwierać ani zapisywać pliku csv dla facetów z komputerem w innym regionie .. oucch
Miguel
Jeśli programujesz w systemie Windows Club C++pod nim, możesz użyć następującego interfejsu API do pobrania całego systemu lub separatora użytkownika:GetLocaleInfo(lcid, LOCALE_SLIST, buff, _countof(buff));
ahmd0
52
Powiedziałbym trzymać się przecinka, ponieważ jest to powszechnie rozpoznawane i rozumiane. Pamiętaj jednak, aby cytować swoje wartości i unikać cytatów.
ID,NAME,AGE
"23434","Norris, Chuck","24"
"34343","Bond, James ""master""","57"
Samo oddzielanie przecinków jest dobre, ale pojawiają się problemy, gdy pojawiają się pola, które zawierają przecinki. Oto dobre odniesienie, które znalazłem w instrukcji
Ibu
4
ŹLE! Na moim komputerze, jeśli napiszę plik CSV używając przecinków jako separatorów i otworzę go w Excelu, cała linia zajmie tylko jedną kolumnę! To musi być jakieś ustawienie regionalne systemu Windows!
sergiol
2
@sergiol Nie jestem pewien, jak to unieważnia to, co powiedzieli.
A nawet wcześniej C w CSV zawsze oznaczało przecinek, a nie półkolon :(
Szkoda, że Microsoft to ignoruje i nadal trzyma się potworności, w którą go przemienili dziesiątki lat temu (tak, przyznaję, to było przed powstaniem RFC).
Jeden rekord w wierszu, chyba że w cytowanym tekście występuje znak nowej linii (patrz poniżej).
COMMA jako separator kolumn. Nigdy średnik.
PERIOD jako kropka dziesiętna w liczbach. Nigdy przecinek.
Tekst zawierający przecinki, kropki i / lub znaki nowego wiersza ujęte w „podwójne cudzysłowy”.
Tylko wtedy, gdy tekst jest ujęty w podwójne cudzysłowy, takie cudzysłowy w tekście są poprzedzane podwojeniem. Te przykłady reprezentują te same trzy pola:
1, "ten tekst zawiera" "cudzysłowy" "", 3
1, ten tekst zawiera „cudzysłowy”, 3
Norma nie obejmuje wartości daty i czasu, osobiście staram się trzymać formatu ISO 8601, aby uniknąć pomyłki dzień / miesiąc / rok - miesiąc / dzień / rok.
Monstruyczność nigdy by się nie pojawiła, gdyby na pierwszym miejscu wybrano średnik. Przecinek jest używany nie tylko do separatorów dziesiętnych lub tysięcy, ale także bardzo często w tekście, w przeciwieństwie do średnika. Średnik byłby lepszym wyborem, ponieważ jest znacznie rzadszy ...
AFract
14
Kiedy powiedziałem o potworności, miałem na myśli, że Microsoft uzależnił to od języka. Excel otwiera pliki CSV i traktuje je jako arkusze kalkulacyjne i może zapisywać arkusze kalkulacyjne w formacie CSV, ale plik CSV zapisany przez Excel w USA (na przykład) nie zadziała, jeśli ktoś we Francji lub Belgii spróbuje go otworzyć i odwrotnie. Jakikolwiek standard jest dla mnie OK, o ile istnieje taki, który sprawdza się dla każdego.
Luc VdV
4
„CSV to standardowy format, określony w RFC 4180 (w 2005 r.), Więc nie brakuje standardu”. Niestety, RFC 4180 to prośba o komentarze, a NIE standard. U góry jest napisane - „nie określa żadnego standardu internetowego”. Później jest napisane, że RFC 4180 „dokumentuje format, który wydaje się być używany przez większość implementacji”. Wygląda na to, że została stworzona przez małą prywatną firmę, niezwiązaną z żadną normą. To doskonały punkt wyjścia, ale niestety istnieje wiele plików CSV, które nie są zgodne z tym „standardem”.
Jim Rea
9
WSZYSTKIE standardy internetowe nazywane są RFC.
Luc VdV,
2
Ale kiedy są standardowe, nie twierdzą, że nie mają być normatywne. Zamiast tego mają w sobie szereg normatywnych sekcji, co nie ma miejsca w RFC 4180.
Frédéric
42
Również istotne, ale szczególnie po to, by wyróżnić się, spójrz na tę odpowiedź i tę, która sugeruje, wstawiając wiersz na początku pliku CSV z
"sep=,"
Aby poinformować program Excel, którego separatora się spodziewać
Początkowo miał to być przecinek, jednak ponieważ przecinek jest często używany jako przecinek dziesiętny, nie byłby tak dobrym separatorem, stąd inne, takie jak średnik, głównie zależne od kraju
Ta część artykułu w Wikipedii zniknęła. Możesz ponownie utworzyć link do en.wikipedia.org/wiki/Comma-separated_values#Basic_rules. Zawiera on fragment dotyczący ustawień regionalnych:> „ Sąsiadujące pola muszą być oddzielone pojedynczym przecinkiem. Jednak formaty„ CSV ”różnią się znacznie pod względem ten wybór znaku separatora. W szczególności w ustawieniach regionalnych, w których przecinek jest używany jako separator dziesiętny, zamiast niego używany jest średnik, TAB lub inne znaki. "
Jules Kerssemakers
4
CSV to plik oddzielony przecinkami. Generalnie separatorem jest przecinek, ale widziałem wiele innych znaków używanych jako separatory. Po prostu nie są tak często używane.
Jeśli chodzi o porady, czego użyć, musimy znać Twoją aplikację. Czy plik jest specyficzny dla twojej aplikacji / programu, czy też musi współpracować z innymi programami?
Myślę, że w Europie; jest powszechne. Przede wszystkim dlatego, że mamy przecinki w liczbach takich jak 60,00 €.
oferuje
5
@oers To nie powinno mieć znaczenia tak długo, jak "quote"Twoje wartości.
adarshr
Cóż, przeważnie widziałem inne ograniczniki używane w sieciowaniu plików seed, ale europejskie pieniądze też się sprawdzają!
Youssef G.
4
Aby zmienić przecinek na średnik jako domyślny separator Excela dla CSV - przejdź do Region -> Ustawienia dodatkowe -> zakładka Numery -> Separator listy i wpisz; zamiast domyślnego,
Jeśli ustawienia regionalne są ustawione ,jako separator dziesiętny i wyeksportujesz plik z kolumnami oddzielonymi ,po otwarciu W programie Excel tekst pojawi się TYLKO w JEDNEJ kolumnie. W programie Excel 2013 wybierz pierwszą kolumnę, przejdź do DANE -> Tekst do kolumn -> Wybierz Delimited, kliknij, Nexta następnie wybierz tylko Commawłączone, Delimitersa natychmiast zobaczysz zmiany w Data previewi na końcu kliknijFinish
sergiol
2
Cóż, żeby mieć coś do powiedzenia na temat średnika. W większości krajów przecinek jest tym, co służy do oznaczania dziesiętnego, a nie kropki. Przeważnie kolonie UE, które składają się na połowę świata, kolejna połowa jest zgodna ze standardami brytyjskimi (jak do diabła w Wielkiej Brytanii jest tak duże O_O), więc z kolei używanie przecinka do bazy danych zawierającej liczbę powoduje duży ból głowy, ponieważ Excel odmawia uznania go jako separatora .
Podobnie jak w moim kraju, Wietnamie, postępuj zgodnie ze standardami francuskimi, nasz partner HongKong używa standardu brytyjskiego, więc przecinek powoduje, że CSV nie nadaje się do użytku, a my używamy \ t lub; zamiast tego do użytku międzynarodowego, ale nadal nie jest to „standardowe” zgodnie z dokumentem CSV.
najlepszym sposobem będzie zapisanie go w pliku tekstowym z rozszerzeniem csv:
Sub ExportToCSV()
Dim i, j As Integer
Dim Name As String
Dim pathfile As String
Dim fs As Object
Dim stream As Object
Set fs = CreateObject("Scripting.FileSystemObject")
On Error GoTo fileexists
i = 15
Name = Format(Now(), "ddmmyyHHmmss")
pathfile = "D:\1\" & Name & ".csv"
Set stream = fs.CreateTextFile(pathfile, False, True)
plik istnieje:
If Err.Number = 58 Then
MsgBox "File already Exists"
'Your code here
Return
End If
On Error GoTo 0
j = 1
Do Until IsEmpty(ThisWorkbook.ActiveSheet.Cells(i, 1).Value)
stream.WriteLine (ThisWorkbook.Worksheets(1).Cells(i, 1).Value & ";" & Replace(ThisWorkbook.Worksheets(1).Cells(i, 6).Value, ".", ","))
j = j + 1
i = i + 1
Loop
stream.Close
End Sub
;
, które jest automatycznie rozpoznawane zarówno w systemie Ubuntu, jak i Windows, bez konieczności dyktowania jakichkolwiek konkretnych ustawień.Odpowiedzi:
W systemie Windows jest to zależne od ekranu dostosowywania „Opcje regionalne i językowe”, na którym znajduje się separator listy. Jest to znak, który aplikacje Windows mają być separatorem CSV.
Oczywiście działa to tylko w aplikacjach Windows, na przykład Excel nie podzieli automatycznie danych na kolumny, jeśli plik nie używa wspomnianego powyżej separatora. Wszystkie aplikacje korzystające z ustawień regionalnych systemu Windows będą miały takie zachowanie.
Jeśli piszesz program dla Windows, który będzie wymagał zaimportowania CSV w innych aplikacjach i wiesz, że separator listy ustawiony dla twoich maszyn docelowych to
,
, to idź do niego, w przeciwnym razie wolę,;
ponieważ powoduje mniej problemów z przecinkami dziesiętnymi, grupowaniem cyfr i nie pojawia się w dużej ilości tekstu.źródło
sep=;
na górze pliku CSV.C
lubC++
pod nim, możesz użyć następującego interfejsu API do pobrania całego systemu lub separatora użytkownika:GetLocaleInfo(lcid, LOCALE_SLIST, buff, _countof(buff));
Powiedziałbym trzymać się przecinka, ponieważ jest to powszechnie rozpoznawane i rozumiane. Pamiętaj jednak, aby cytować swoje wartości i unikać cytatów.
źródło
CSV jest standardowym formatem opisanym w RFC 4180 (w 2005 roku), więc nie brakuje standardu. https://www.ietf.org/rfc/rfc4180.txt
A nawet wcześniej C w CSV zawsze oznaczało przecinek, a nie półkolon :(
Szkoda, że Microsoft to ignoruje i nadal trzyma się potworności, w którą go przemienili dziesiątki lat temu (tak, przyznaję, to było przed powstaniem RFC).
Tylko wtedy, gdy tekst jest ujęty w podwójne cudzysłowy, takie cudzysłowy w tekście są poprzedzane podwojeniem. Te przykłady reprezentują te same trzy pola:
1, "ten tekst zawiera" "cudzysłowy" "", 3
1, ten tekst zawiera „cudzysłowy”, 3
Norma nie obejmuje wartości daty i czasu, osobiście staram się trzymać formatu ISO 8601, aby uniknąć pomyłki dzień / miesiąc / rok - miesiąc / dzień / rok.
źródło
Również istotne, ale szczególnie po to, by wyróżnić się, spójrz na tę odpowiedź i tę, która sugeruje, wstawiając wiersz na początku pliku CSV z
Aby poinformować program Excel, którego separatora się spodziewać
źródło
1.> Zmień format pliku na .CSV (rozdzielany średnikami)
Aby osiągnąć pożądany efekt musimy tymczasowo zmienić
delimiter
ustawienie wExcel
Opcjach:Odznacz ustawienie „Użyj separatorów systemowych” i umieść przecinek w polu „Separator dziesiętny”.
Teraz zapisz plik w
.CSV
formacie, a zostanie on zapisany w formacie rozdzielanym średnikami.źródło
Początkowo miał to być przecinek, jednak ponieważ przecinek jest często używany jako przecinek dziesiętny, nie byłby tak dobrym separatorem, stąd inne, takie jak średnik, głównie zależne od kraju
http://en.wikipedia.org/wiki/Comma-separated_values#Lack_of_a_standard
źródło
CSV to plik oddzielony przecinkami. Generalnie separatorem jest przecinek, ale widziałem wiele innych znaków używanych jako separatory. Po prostu nie są tak często używane.
Jeśli chodzi o porady, czego użyć, musimy znać Twoją aplikację. Czy plik jest specyficzny dla twojej aplikacji / programu, czy też musi współpracować z innymi programami?
źródło
"quote"
Twoje wartości.Aby zmienić przecinek na średnik jako domyślny separator Excela dla CSV - przejdź do Region -> Ustawienia dodatkowe -> zakładka Numery -> Separator listy i wpisz; zamiast domyślnego,
źródło
,
jako separator dziesiętny i wyeksportujesz plik z kolumnami oddzielonymi,
po otwarciu W programie Excel tekst pojawi się TYLKO w JEDNEJ kolumnie. W programie Excel 2013 wybierz pierwszą kolumnę, przejdź do DANE -> Tekst do kolumn -> WybierzDelimited
, kliknij,Next
a następnie wybierz tylkoComma
włączone,Delimiters
a natychmiast zobaczysz zmiany wData preview
i na końcu kliknijFinish
Cóż, żeby mieć coś do powiedzenia na temat średnika. W większości krajów przecinek jest tym, co służy do oznaczania dziesiętnego, a nie kropki. Przeważnie kolonie UE, które składają się na połowę świata, kolejna połowa jest zgodna ze standardami brytyjskimi (jak do diabła w Wielkiej Brytanii jest tak duże O_O), więc z kolei używanie przecinka do bazy danych zawierającej liczbę powoduje duży ból głowy, ponieważ Excel odmawia uznania go jako separatora .
Podobnie jak w moim kraju, Wietnamie, postępuj zgodnie ze standardami francuskimi, nasz partner HongKong używa standardu brytyjskiego, więc przecinek powoduje, że CSV nie nadaje się do użytku, a my używamy \ t lub; zamiast tego do użytku międzynarodowego, ale nadal nie jest to „standardowe” zgodnie z dokumentem CSV.
źródło
najlepszym sposobem będzie zapisanie go w pliku tekstowym z rozszerzeniem csv:
plik istnieje:
źródło