CSV用逗号或分号?

时间:2012-04-13 12:39:08

标签: csv

一般情况下如何构建CSV文件?用逗号或分号? 有关哪一个使用的建议?

10 个答案:

答案 0 :(得分:61)

在Windows中,它依赖于“区域和语言选项”自定义屏幕,您可以在其中找到列表分隔符。这是char应用程序期望的CSV分隔符。

当然这仅对Windows应用程序有效,例如,如果文件未使用上述分隔符,Excel将不会自动将数据拆分为列。所有使用Windows区域设置的应用程序都会出现这种情况。

如果您正在编写一个Windows程序,需要在其他应用程序中导入CSV,并且您知道为目标计算机设置的列表分隔符为,,那么请选择它,否则我更喜欢{{1因为它可以减少小数点,数字分组的问题,并且不会出现在很多文本中。

答案 1 :(得分:43)

我会坚持使用逗号,因为它被广泛认可和理解。请务必引用您的值并转义您的报价。

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

答案 2 :(得分:34)

CSV是RFC 4180(2005年)中概述的标准格式,因此不缺乏标准。 https://www.ietf.org/rfc/rfc4180.txt

甚至在此之前,CSV中的C始终代表逗号,而不是代码为halfColon :(

很可惜微软一直在忽视这一点,并且仍然坚持他们几十年前把它变成怪物(是的,我承认,那是在创建RFC之前)。

  • 每行一条记录,除非在引用文本中出现换行符(见下文)。
  • COMMA作为列分隔符。永远不要用分号。
  • PERIOD作为数字的小数点。从不逗号。
  • 包含逗号,句号和/或换行符的文字"双引号"。
  • 如果文本用双引号括起来,则文本中的引号会被加倍转义。这些示例代表相同的三个字段:

    1,"此文字包含""引号""",3

    1,此文本包含"引号",3

该标准不包括日期和时间值,我个人尝试坚持ISO 8601格式,以避免日/月/年 - 月/日/年混淆。

答案 3 :(得分:29)

同样相关,但特别要擅长,请查看this answerthis other one,建议在CSV的开头插入一行

"sep=,"

告知excel期望哪个分隔符

答案 4 :(得分:5)

最初它是一个逗号,但由于逗号通常用作小数点,它不会是如此好的分隔符,因此其他像分号,主要是依赖于国家

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

答案 5 :(得分:5)

<强> 1.&GT;将文件格式更改为.CSV(以分号分隔)

要获得所需的结果,我们需要临时更改delimiter选项中的Excel设置:

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

取消选中“使用系统分隔符”设置,并在“十进制分隔符”字段中输入逗号。

现在以.CSV格式保存文件,它将以分号分隔格式保存。

答案 6 :(得分:3)

CSV是逗号分隔文件。通常,分隔符是逗号,但我看到许多其他字符用作分隔符。它们的使用频率不高。

至于建议您使用什么,我们需要知道您的应用程序。该文件是否特定于您的应用程序/程序,还是需要与其他程序一起使用?

答案 7 :(得分:2)

要将逗号更改为分号作为CSV的默认Excel分隔符,请转到“区域” - &gt;其他设置 - &gt;数字标签 - &gt;列表分隔符 和类型;而不是默认值,

答案 8 :(得分:1)

刚才有一些关于分号的说法。在许多国家,逗号是用于小数而不是期间的用途。大多数欧盟殖民地,包括世界的一半,另一半遵循英国标准(地狱英国如此大O_O)所以反过来使用逗号包括数字的数据库创造了很多头痛,因为Excel拒绝将其识别为分隔符

在我的国家,越南,按照法国的标准,我们的合作伙伴HongKong使用英国标准,因此逗号使CSV无法使用,我们使用\ t或;相反,国际使用,但它仍然不是CSV文件的“标准”。

答案 9 :(得分:-1)

最好的方法是将其保存在带有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)

FILEEXISTS:

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