CSV với dấu phẩy hay dấu chấm phẩy?


80

Nói chung, tệp CSV được xây dựng như thế nào? Với dấu phẩy hay dấu chấm phẩy? Bất kỳ lời khuyên về cái nào để sử dụng?



4
CSV -> Giá trị được phân tách bằng dấu phẩy
ChadNC

@ChadNC Tôi cũng nghĩ đến điều đó khi chọn dấu phân cách mà mã của tôi sẽ sử dụng. Giải pháp dễ nhất là sử dụng ;, giải pháp này được tự động nhận dạng trong cả Ubuntu và Windows, mà tôi không cần phải ra lệnh bất kỳ (các) cài đặt cụ thể nào.
gsamaras

Câu trả lời:


77

Trong Windows, nó phụ thuộc vào màn hình tùy chỉnh "Tùy chọn khu vực và ngôn ngữ" nơi bạn tìm thấy dấu phân tách Danh sách. Đây là ký tự mà các ứng dụng Windows mong đợi là dấu phân cách CSV.

Tất nhiên điều này chỉ có hiệu lực trong các ứng dụng Windows, ví dụ như Excel sẽ không tự động chia dữ liệu thành các cột nếu tệp không sử dụng dấu phân tách đã đề cập ở trên. Tất cả các ứng dụng sử dụng cài đặt vùng của Windows sẽ có hành vi này.

Nếu bạn đang viết một chương trình cho Windows sẽ yêu cầu nhập CSV trong các ứng dụng khác và bạn biết rằng bộ phân tách danh sách được đặt cho các máy mục tiêu của mình ,, thì hãy tiếp tục, nếu không, tôi thích ;nó hơn vì nó ít gây ra vấn đề hơn với dấu thập phân, nhóm chữ số và không xuất hiện trong nhiều văn bản.


35
Thay đổi này cũng sẽ ảnh hưởng đến việc Mở tệp CSV trong Excel. Nếu bạn muốn tương thích hơn cho tệp CSV của windows, hãy đặt tệp CSV lên sep=;trên.
papo

11
> "Tôi thích hơn; vì nó ít gây ra vấn đề hơn với dấu thập phân". Đây là giải pháp sai lầm. Nếu dấu phân cách của bạn là dấu phẩy và giá trị của ô cũng chứa dấu phẩy, bạn phải đặt giá trị vào dấu ngoặc kép. Ví dụ: 111,222, "33,5", 444, "55,98", 666
Elmue

1
Đó là trường hợp của ứng dụng Mac Numbers. Tôi đang nhổ tóc vì không thể tạo csv mà Photoshop nhận dạng được. Tôi đã thay đổi tùy chọn vùng trở lại tiếng Anh Mỹ và tất cả đều hoạt động tốt trở lại
Tibidabo

21
Thứ khu vực đó là thứ ngu ngốc nhất mà nó có thể làm được. Làm thế nào có thể định dạng của csv thể khác nhau giữa các khu vực, điều này có nghĩa các đồng nghiệp của tôi có thể không mở hoặc tiết kiệm csv cho chàng trai với một máy tính ở một vùng khác .. oucch
Miguel

Nếu bạn lập trình đang ở Choặc C++trong môi trường Windows, bạn có thể sử dụng API sau đây để lấy toàn hệ thống, hoặc sử dụng dấu phân cách:GetLocaleInfo(lcid, LOCALE_SLIST, buff, _countof(buff));
ahmd0

52

Tôi muốn nói hãy gắn vào dấu phẩy vì nó được công nhận và hiểu rộng rãi. Hãy chắc chắn trích dẫn các giá trị của bạn và thoát khỏi các trích dẫn của bạn.

ID,NAME,AGE
"23434","Norris, Chuck","24"
"34343","Bond, James ""master""","57"

5
1 cho bao gồm rất nhiều các kịch bản csv với một ví dụ rất ngắn
Niels Brinch

1
Tự phân tách bằng dấu phẩy là tốt, nhưng bạn sẽ gặp vấn đề khi nhận được các trường có dấu phẩy trong đó. Đây là một tài liệu tham khảo tốt mà tôi tìm thấy trong sách hướng dẫn
Ibu

4
SAI LẦM! Trong máy của tôi, nếu tôi viết tệp CSV bằng cách sử dụng dấu phẩy làm dấu phân cách và mở tệp đó trong Excel, tôi sẽ nhận được toàn bộ dòng chỉ chiếm một cột! Nó phải là một số cài đặt khu vực Windows!
sergiol

2
@sergiol Tôi không chắc điều đó làm mất hiệu lực những gì họ đã nói.
AMC

51

CSV là một định dạng tiêu chuẩn, được nêu trong RFC 4180 (năm 2005), vì vậy không thiếu tiêu chuẩn. https://www.ietf.org/rfc/rfc4180.txt

Và thậm chí trước đó, chữ C trong CSV đã luôn viết tắt cho Dấu phẩy, không phải cho semiColon :(

Thật đáng tiếc khi Microsoft tiếp tục bỏ qua điều đó và vẫn tiếp tục duy trì sự quái dị mà họ đã biến nó thành nhiều thập kỷ trước (vâng, tôi thừa nhận, đó là trước khi RFC được tạo ra).

  • Một bản ghi trên mỗi dòng, trừ khi một dòng mới xuất hiện trong văn bản được trích dẫn (xem bên dưới).
  • COMMA làm dấu phân tách cột. Không bao giờ là dấu chấm phẩy.
  • PERIOD dưới dạng dấu thập phân trong số. Không bao giờ là dấu phẩy.
  • Văn bản chứa dấu phẩy, dấu chấm và / hoặc dòng mới được đặt trong "dấu ngoặc kép".
  • Chỉ khi văn bản được đặt trong dấu ngoặc kép, các dấu ngoặc kép như vậy trong văn bản được thoát ra bằng cách nhân đôi. Các ví dụ này đại diện cho ba trường giống nhau:

    1, "văn bản này chứa" "dấu ngoặc kép" "", 3

    1, văn bản này chứa "dấu ngoặc kép", 3

Tiêu chuẩn không bao gồm các giá trị ngày và giờ, cá nhân tôi cố gắng bám vào định dạng ISO 8601 để tránh nhầm lẫn ngày / tháng / năm - tháng / ngày / năm.


16
Dấu chấm phẩy sẽ không bao giờ xuất hiện nếu dấu chấm phẩy được chọn ở vị trí đầu tiên. Dấu phẩy không chỉ được sử dụng cho số thập phân hoặc dấu phân cách hàng nghìn, mà còn rất thường xuyên trong văn bản, không giống như dấu chấm phẩy. Dấu chấm phẩy sẽ là lựa chọn tốt hơn vì nó hiếm hơn nhiều ...
AFract

14
Khi tôi nói sự quái dị, ý tôi là Microsoft đã khiến nó phụ thuộc vào ngôn ngữ. Excel mở tệp CSV và coi chúng là bảng tính, đồng thời có thể lưu bảng tính ở định dạng CSV, nhưng tệp CSV do Excel lưu ở Hoa Kỳ (ví dụ) sẽ không hoạt động nếu ai đó ở Pháp hoặc Bỉ cố gắng mở nó và ngược lại. Đối với tôi, tiêu chuẩn nào cũng được, miễn là có một tiêu chuẩn phù hợp với mọi người.
Luc VdV

4
"CSV là một định dạng tiêu chuẩn, được nêu trong RFC 4180 (năm 2005), vì vậy không thiếu một tiêu chuẩn nào." Thật không may, RFC 4180 là một yêu cầu nhận xét, KHÔNG phải là một tiêu chuẩn. Nó nói ngay ở trên cùng - "không chỉ định bất kỳ tiêu chuẩn Internet nào." Sau đó, nó nói rằng RFC 4180 "ghi lại định dạng có vẻ như được tuân theo bởi hầu hết các triển khai." Có vẻ như điều này được tạo ra bởi một công ty tư nhân nhỏ, không liên quan đến cơ thể của bất kỳ tiêu chuẩn nào. Đó là một điểm khởi đầu tuyệt vời, nhưng không may là có rất nhiều tệp CSV ngoài tự nhiên không tuân theo "tiêu chuẩn" này.
Jim Rea

9
TẤT CẢ các tiêu chuẩn internet được gọi là RFC.
Luc VdV

2
Nhưng khi chúng là tiêu chuẩn, chúng không nói rằng chúng không nhằm mục đích trở thành chuẩn mực. Thay vào đó, họ có một số bộ phận bản quy phạm bên trong, mà không phải là trường hợp của RFC 4180.
Frédéric

42

Cũng có liên quan, nhưng đặc biệt để nổi trội, hãy xem câu trả lời nàycâu trả lời khác gợi ý, chèn một dòng ở đầu CSV với

"sep=,"

Để thông báo cho excel dấu phân tách nào được mong đợi


3
Nó hoạt động với Excel, nhưng nó không được Microsoft Power BI công nhận.
Tomas Kubes

9

1.> Thay đổi định dạng tệp thành .CSV (phân tách bằng dấu chấm phẩy)

Để đạt được kết quả mong muốn, chúng tôi cần tạm thời thay đổi delimitercài đặt trong ExcelTùy chọn:

Move to File -> Options -> Advanced -> Editing Section

Bỏ chọn cài đặt "Sử dụng dấu phân tách hệ thống" và đặt dấu phẩy vào trường "Dấu phân cách thập phân".

Bây giờ hãy lưu tệp theo .CSVđịnh dạng và nó sẽ được lưu ở định dạng được phân tách bằng dấu chấm phẩy.


6

Ban đầu nó là một dấu phẩy, tuy nhiên vì dấu phẩy thường được sử dụng như một dấu thập phân, nó sẽ không phải là dấu phân cách tốt như vậy, do đó những người khác thích dấu chấm phẩy, chủ yếu phụ thuộc vào quốc gia

http://en.wikipedia.org/wiki/Comma-separated_values#Lack_of_a_standard


Phần đó của bài viết Wikipedia đã biến mất. Bạn có thể muốn liên kết lại đến en.wikipedia.org/wiki/Comma-separated_values#Basic_rules , Đoạn văn này có một đoạn về ngôn ngữ:> " Các trường liền kề phải được phân tách bằng một dấu phẩy. Tuy nhiên, các định dạng" CSV "rất khác nhau về sự lựa chọn ký tự phân tách này. Đặc biệt, trong các ngôn ngữ nơi dấu phẩy được sử dụng làm dấu phân tách thập phân, dấu chấm phẩy, TAB hoặc các ký tự khác được sử dụng thay thế. "
Jules Kerssemakers

4

CSV là một tệp được phân tách bằng dấu phẩy. Nói chung dấu phân cách là một dấu phẩy, nhưng tôi đã thấy nhiều ký tự khác được sử dụng làm dấu phân cách. Chúng không được sử dụng thường xuyên.

Đối với việc tư vấn cho bạn về những gì nên sử dụng, chúng tôi cần biết ứng dụng của bạn. Tệp dành riêng cho ứng dụng / chương trình của bạn hay tệp này có cần hoạt động với các chương trình khác không?


6
Tôi nghĩ rằng ở châu Âu; đang thịnh hành. Chủ yếu là vì chúng ta có dấu phẩy trong các số như 60,00 €.
oers

5
@oers Nó không thành vấn đề miễn là bạn có "quote"giá trị của mình.
adarshr

Chà, tôi hầu như chỉ thấy các dấu phân cách khác được sử dụng trong các tệp hạt giống mạng, nhưng tiền ở châu Âu cũng hoạt động!
Youssef G.

4

Để thay đổi dấu phẩy thành dấu chấm phẩy làm dấu phân tách Excel mặc định cho CSV - đi tới Khu vực -> Cài đặt bổ sung -> tab Số -> Dấu phân tách danh sách và loại; thay vì mặc định,


1
Nếu cài đặt khu vực của bạn được đặt ,làm dấu phân tách thập phân và bạn xuất tệp có các cột được phân tách bằng ,khi bạn mở nó Trong Excel, văn bản sẽ chỉ xuất hiện trong MỘT cột. Trong Excel 2013, chọn cột đầu tiên, đi đến DỮ LIỆU -> Text To Cột -> Chọn Delimited, bấm Nextsau đó chọn chỉ Commatrên Delimitersvà bạn sẽ thấy sự thay đổi ngay lập tức trong Data previewvà cuối cùng clickFinish
sergiol

2

Chỉ để có một số câu nói về dấu chấm phẩy. Ở nhiều quốc gia, dấu phẩy được sử dụng cho số thập phân không phải dấu chấm. Chủ yếu là các thuộc địa của EU, bao gồm một nửa thế giới, một nửa còn lại tuân theo tiêu chuẩn của Vương quốc Anh (làm thế nào mà Vương quốc Anh lại lớn đến vậy), do đó, việc sử dụng dấu phẩy cho cơ sở dữ liệu bao gồm số tạo ra nhiều vấn đề đau đầu vì Excel từ chối nhận nó là dấu phân cách .

Cũng giống như Việt Nam, ở nước tôi, theo tiêu chuẩn của Pháp, đối tác HongKong của chúng tôi sử dụng tiêu chuẩn của Vương quốc Anh nên dấu phẩy khiến CSV không sử dụng được và chúng tôi sử dụng \ t hoặc; thay vào đó để sử dụng quốc tế, nhưng nó vẫn không "chuẩn" theo tài liệu của CSV.


-3

cách tốt nhất sẽ là lưu nó trong một tệp văn bản có phần mở rộng 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)

File tồn tại:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.