CSV用逗号或分号?

一般来说,CSV文件是如何构build的? 用逗号或分号? 任何build议使用哪一个?

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

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

如果你正在为Windows编写一个程序,需要在其他应用程序中导入CSV,并且你知道为你的目标机器设置的列表分隔符是,然后去做,否则我更喜欢; 因为它引起的小数点的问题较less,数字分组并不出现在很多文本中。

我会说坚持逗号,因为它被广泛认可和理解。 一定要引用你的价值观,并逃避你的报价。

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

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

甚至在此之前,CSV中的C一直代表逗号,而不是semiColon 🙁

微软一直忽略这一点,并且仍然坚持几十年前的怪胎(是的,我承认,这是在RFC创build之前)。

  • 每行一个logging,除非引用文本中出现换行符(参见下文)。
  • COMMA作为列分隔符。 从来没有分号。
  • PERIOD作为数字中的小数点。 从来没有逗号。
  • 包含“双引号”中逗号,句点和/或换行符的文本。
  • 只有文本用双引号括起来,文本中的这种引号才会加倍。 这些例子代表了相同的三个领域:

    1“,该文本包含”“引号”“”,3

    1,本文中包含“引号”,3

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

也是相关的,但特别是对于excel来说,看这个答案和另一个build议,在CSV的开头插入一行

 "sep=," 

通知excel需要哪个分隔符

最初它是一个逗号,但是因为逗号经常被用作小数点,所以它不是很好的分隔符,所以其他的像分号,大部分是依赖于国家

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

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

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

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

那么只是要有一些关于分号的说法。 在很多国家,逗号是用来十进制而不是句号的。 大多数欧盟殖民地,由世界的一半,另一半按照英国标准(如何英国如此之大O_O),反过来使用逗号为包括数字的数据库创造许多头痛,因为Excel拒绝承认它为分隔符。

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

1.>将文件格式更改为.CSV(以分号分隔)

为了达到预期的效果,我们需要临时更改Excel选项中的delimiter设置:

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

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

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

最好的办法是将它保存在一个带有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) 

文件已存在:

 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