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