Jak ogólnie jest budowany plik CSV? Przecinkami czy średnikami? Masz jakąś radę, której użyć?
;
, które jest automatycznie rozpoznawane zarówno w systemie Ubuntu, jak i Windows, bez konieczności dyktowania jakichkolwiek konkretnych ustawień.
Jak ogólnie jest budowany plik CSV? Przecinkami czy średnikami? Masz jakąś radę, której użyć?
;
, 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.
sep=;
na górze pliku CSV.
C
lub 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));
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"
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ó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ć
1.> Zmień format pliku na .CSV (rozdzielany średnikami)
Aby osiągnąć pożądany efekt musimy tymczasowo zmienić delimiter
ustawienie w Excel
Opcjach:
Move to File -> Options -> Advanced -> Editing Section
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.
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
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?
"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,
,
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, Next
a następnie wybierz tylko Comma
włączone, Delimiters
a natychmiast zobaczysz zmiany w Data 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.
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