How is a CSV file built in general? With commas or semicolons? Any advice on which one to use?
10 回答
在 Windows 中,它取决于“区域和语言选项”自定义屏幕,您可以在其中找到列表分隔符。这是 Windows 应用程序期望作为 CSV 分隔符的字符。
当然,这仅在 Windows 应用程序中有效,例如,如果文件未使用上述分隔符,Excel 不会自动将数据拆分为列。所有使用 Windows 区域设置的应用程序都将具有此行为。
如果您正在编写一个需要在其他应用程序中导入 CSV 的 Windows 程序,并且您知道为您的目标计算机设置的列表分隔符是,
,那么就去做吧,否则我更喜欢它,;
因为它会减少小数点、数字分组的问题并且不会出现在很多文本中。
CSV 是一种标准格式,在 RFC 4180(2005 年)中进行了概述,因此不乏标准。 https://www.ietf.org/rfc/rfc4180.txt
甚至在此之前,CSV 中的 C 一直代表逗号,而不是分号:(
遗憾的是,微软一直忽视这一点,并且仍然坚持他们在几十年前把它变成的怪物(是的,我承认,那是在创建 RFC 之前)。
- 每行一条记录,除非在引用的文本中出现换行符(见下文)。
- 逗号作为列分隔符。从来没有分号。
- PERIOD 作为数字中的小数点。从来没有逗号。
- 包含用“双引号”括起来的逗号、句点和/或换行符的文本。
仅当文本用双引号括起来时,文本中的此类引号才会通过双引号进行转义。这些示例代表相同的三个字段:
1,"此文本包含""引号""",3
1、本文包含“引号”,3
该标准不包括日期和时间值,我个人尝试坚持 ISO 8601 格式以避免日/月/年 - 月/日/年混淆。
I'd say stick to comma as it's widely recognized and understood. Be sure to quote your values and escape your quotes though.
ID,NAME,AGE
"23434","Norris, Chuck","24"
"34343","Bond, James ""master""","57"
1.> 将文件格式更改为 .CSV(分号分隔)
为了达到预期的效果,我们需要临时更改选项delimiter
中的设置Excel
:
Move to File -> Options -> Advanced -> Editing Section
取消选中“使用系统分隔符”设置并在“小数分隔符”字段中添加逗号。
现在以.CSV
格式保存文件,它将以分号分隔的格式保存。
最初它是一个逗号,但由于逗号经常用作小数点,所以它不是很好的分隔符,因此其他人喜欢分号,主要取决于国家/地区
http://en.wikipedia.org/wiki/Comma-separated_values#Lack_of_a_standard
CSV is a Comma Seperated File. Generally the delimiter is a comma, but I have seen many other characters used as delimiters. They are just not as frequently used.
As for advising you on what to use, we need to know your application. Is the file specific to your application/program, or does this need to work with other programs?
要将逗号更改为分号作为 CSV 的默认 Excel 分隔符 - 转到区域 -> 其他设置 -> 数字选项卡 -> 列表分隔符并键入;而不是默认值,
好吧,只是想谈谈分号。在许多国家/地区,逗号用于小数而不是句点。大多数欧盟殖民地,占世界的一半,另一半遵循英国标准(英国怎么这么大 O_O)所以反过来使用逗号作为包含数字的数据库会造成很多麻烦,因为 Excel 拒绝将其识别为分隔符.
就像我的国家越南一样,遵循法国的标准,我们的合作伙伴香港使用英国标准,所以逗号使 CSV 无法使用,我们使用 \t 或 ; 而是用于国际使用,但根据 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