2012-04-13 265 views
44

通常构建的CSV文件如何?用逗号或分号? 任何建议使用哪一个?含逗号或分号的CSV?

+2

请参见[逗号分隔值](http://en.wikipedia.org/wiki/Comma-separated_values)(Wikipedia)。 – Jesper 2012-04-13 12:42:37

+1

CSV - >逗号分隔值 – ChadNC 2012-04-13 13:02:20

回答

40

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

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

如果您正在为Windows,需要在其他应用程序导入CSV写一个程序,你知道的列表分隔您的目标机器设置为,,然后去了,否则我宁愿;,因为它会导致少的问题带小数点,数字分组,不出现在很多文本中。

+12

此更改还会影响在Excel中打开CSV文件。 如果您想要使Windows CSV文件更加兼容,请将'sep =;'放在CSV文件的顶部。 – papo 2015-12-30 03:23:31

+4

>“我更喜欢;因为它会导致更少的小数点问题”。这是错误的解决方案。如果您的分隔符是逗号,并且单元格的值也包含逗号,则必须将该值放在双引号中。例如:111,222,“33,5”,444,“55,98”,666 – Elmue 2016-07-27 20:41:43

+0

Mac Numbers应用程序也是如此。因为我无法制作Photoshop识别出的csv,所以我拉了我的头发。我将区域选项改回美国英语,并且一切都正常工作 – Tibidabo 2017-05-11 08:30:50

2

CSV是一个逗号分隔文件。通常分隔符是逗号,但我看到许多其他字符用作分隔符。他们不是经常使用。

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

+5

我想在欧洲的;流行。主要是因为我们有像60,00€这样的逗号。 – oers 2012-04-13 12:43:23

+5

@oers只要你“引用”你的价值观,这应该不重要。 – adarshr 2012-04-13 12:45:06

+0

嗯,我主要看到用于联网种子文件的其他分隔符,但欧洲的钱也可以! – 2012-04-13 12:45:36

33

我会说坚持逗号,因为它被广泛认可和理解。请务必引用您的价值观并尽量避免您的报价。

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

用于覆盖很多csv场景的+1用一个很短的示例 – 2012-09-03 12:53:20

+1

逗号分开是很好的,但是当您获取其中包含逗号的字段时会出现问题。这里有一个很好的参考,我发现[在手册上](http://www.php.net/manual/en/function.fputcsv.php#56827) – Ibu 2013-05-16 18:35:57

+1

错误!在我的机器上,如果我使用逗号作为分隔符编写CSV文件,并在Excel中打开它,则整行只占用一列!它必须是一些Windows区域设置! – sergiol 2017-01-04 14:56:17

23

CSV是RFC 4180(2005年)中概述的标准格式,所以不存在缺乏标准的情况。 https://www.ietf.org/rfc/rfc4180.txt

甚至在此之前,在CSV的C一贯主张逗号,而不是分号:(

可惜的是微软一直忽略这一点,还在坚持,他们把它变成了几十年前的怪物(是的,我承认,这是创建的RFC之前)。

  • 每行记录一个,除非换行引用的文字中出现(见下文)。
  • 逗号作为列分隔符。从来没有一个分号。
  • PERIOD作为数字中的小数点。从来没有逗号。
  • 包含在“双引号”中的逗号,句点和/或换行符的文本。
  • 只有如果文本用双引号引起来,文本中的这种引号标志会加倍。这些例子表示相同的三个字段:

    1 “这个文本包含 ”“ 引号” “”,3

    1,这个文本包含 “引号”,3

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

+4

如果首先选择分号,那么monstruosity将永远不会出现。逗号不仅用于小数或千位分隔符,而且经常用于文本,与分号不同。分号本来是一个更好的选择,因为它更难得... – AFract 2016-06-27 09:04:04

+3

当我说怪物时,我的意思是说微软使它与语言有关。 Excel会打开CSV文件并将它们视为电子表格,并且可以以CSV格式保存电子表格,但如果法国或比利时的某个人试图打开CSV文件,Excel中保存的CSV文件将无法工作,反之亦然。无论什么标准对我来说都行,只要有一个适用于所有人的标准。 – 2016-06-28 10:21:35

+0

据我所见,“PERIOD作为数字中的小数点”和“包含句点的文本必须用双引号括起来”,而不是RFC4180的一部分。但我同意,这是一个很好的建议。 – Fried 2016-08-30 08:22:14

2

若要将逗号更改为分号作为CSV的默认Excel分隔符,请转到区域 - >其他设置 - >数字选项卡 - >列表分隔符 和类型;而不是默认的,

+1

如果使用','作为小数点分隔符设置区域设置,并且在Excel中打开文件时,文本将出现在ONLY ONE列中。在Excel 2013中,选择第一列,转到数据 - >文本到列 - >选择'分隔符',单击'下一步',然后在'Delimiters'上只选择'Comma',你会看到'数据预览'最后点击'完成' – sergiol 2017-01-04 15:15:24

1

1>更改文件格式为.csv(分号分隔)

为了实现我们需要临时变更在Excel选项delimiter设定期望的结果:

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

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

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

1

嗯,只是有一些关于分号的说法。在很多国家,逗号是用于十进制而不是句号的东西。大多数欧盟殖民地,其中一半由世界组成,另一半则遵循英国标准(英国如何如此之大),所以反过来使用包含数字的数据库的逗号会产生许多令人头疼的问题,因为Excel拒绝将其识别为分隔符。

与我国越南智慧一样,遵循法国标准,我们的合作伙伴香港使用英国标准,所以逗号使CSV无法使用,我们使用\ t或;而不是用于国际用途,但它仍然不是每个CSV文档的“标准”。

13

也与此有关,但特别擅长,看this answerthis other one这表明,将在CSV的开头符合

"sep=," 

要通知Excel来期待

+0

它可以在Excel中使用,但不能被Microsoft Power BI识别。 – qub1n 2017-12-14 12:32:57

0

最好的方式,也分隔将其保存在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