CSV全称是:Comma Separated Values 或者 Character Separated Values。

尽管第一种说法更常见,但我觉得还是第二种说法更确切一些,因为你可以使用其它字符做分隔符。

使用逗号做分隔符的CSV文件有一个好处:你可以直接用Excel打开。如果使用其它分隔符,比如“|”,你必须告诉Excel该文件使用“|”作分隔符,Excel才能把它导入进来。

前几天,project manager告诉我:我们有许多CSV文件,都是使用“|”做分隔符,用Excel打开的时候比较麻烦,用户想在Excel中直接打开。这样就需要使用“,”做分隔符。但是文件中有些字段含有逗号,必须对这些逗号特殊处理,才能保证CSV文件在Excel中正确打开。他还给了我一个算法:

如果字段中有逗号(,),该字段使用双引号(")括起来;

如果该字段中有双引号,该双引号前要再加一个双引号,然后把该字段使用双引号括起来。

看完project manager的要求,我真是满头起包啊。在IT业混了十几年了,竟然不知道这样处理逗号。

举几个例子:

字段处理前

字段处理后

abc,d2

"abc,d2"

ab"c,d2

"ab""c,d2"

"abc

"""abc"

""

""""""

如果字段中有两个挨着的双引号,比如:aaa""ccc。这种情况不用特殊处理。这是我在写这篇博客的时候才想起来的,赶忙使用Excel测试了一下。还好,不用特殊处理就能正常打开,不然我还得改程序。当然了,如果你把它处理成:"aaa""""ccc" Excel也能正常打开。事后总结总结真是有好处啊。

另外,如果某字段第一个字符是空格,第二个字符是双引号,这种情况不用特殊处理。Project Manager在给我描述算法的时候,也举了一个字段只有一个双引号的例子,但他不小心在双引号前面加了个空格,把问题掩盖过去了。

我是在WinXP和MS Excel2007下测试的。如果运行在其他环境和应用程序下,还需进行测试,规则可能不一样。

(这是一篇老博文,11-1-22 下午11:44 发布在Google Blogger上。但我只是几年前在那里发了几篇文章,早已经不维护了,干脆把看得上眼的文章搬过来算了)

如何转义CSV文件中的逗号的更多相关文章

  1. scala/java等其他语言从CSV文件中读取数据,使用逗号','分割可能会出现的问题

    众所周知,csv文件默认以逗号","分割数据,那么在scala命令行里查询的数据: 可以看见,字段里就包含了逗号",",那接下来切割的时候,这本应该作为一个整体 ...

  2. C# 将List中的数据导入csv文件中

    //http://www.cnblogs.com/mingmingruyuedlut/archive/2013/01/20/2849906.html C# 将List中的数据导入csv文件中   将数 ...

  3. 将CSV文件中的数据导入到SQL Server 数据库中

    导入数据时,需要注意 CSV 文件中的数据是否包含逗号以及双引号,存在时,导入会失败 选择数据库 -> 右键 -> 任务 -> 导入数据 ,然后根据弹出的导入导出向导(如下图)中的提 ...

  4. CSV文件数据如何读取、导入、导出到新的CSV文件中以及CSV文件的创建

    CSV文件数据如何读取.导入.导出到新的CSV文件中以及CSV文件的创建 一.csv文件的创建 (1)新建一个文本文档: 打开新建文本文档,进行编辑. 注意:关键字与关键字之间用英文半角逗号隔开.第一 ...

  5. MySQL添加CSV文件中的数据

    一.MySQL添加csv数据 此问题是前几天整理数据的时候碰到的,数据存在 CSV文件中(200多万记录),通过python 往数据库中导入太慢了,后来使用MySQL 中自带的命令 LOAD DATA ...

  6. Java从.CSV文件中读取数据和写入

    .CSV文件是以逗号分割的数据仓储,读取数据时从每一行中读取一条数据元祖,也就是一条数据,再用字符分割的方式获取表中的每一个数据项. import java.io.BufferedReader;    ...

  7. 直接把数据库中的数据保存在CSV文件中

    今天突然去聊就来写一个小小的demo喽,嘿嘿 public partial class Form1 : Form { public Form1() { InitializeComponent(); } ...

  8. 取出csv文件中的中文评论数据

    # -*- coding: utf-8 -*- import csv import re csvfile = 'weibo.csv' def columns_data(path, column): c ...

  9. Jmeter实现从csv文件中随机读取数据

    一.需求 参数放在csv文件中,文件格式如下,需求每次从文件中随机读取一行数据. 二.步骤 1.在csv文件中新增加一列,pl 2.新增一个配置原件-随机数,设置如下: 50是文件数据的行数 3.新增 ...

随机推荐

  1. Mac下忘记了phpAdmin设置的MySQL密码

    事情是这样的,我昨天配置完MySQL和PHP环境后,又配置了phpAdmin. 这本来是件好事,结果我看到phpAdmin提醒我说我的MySQL的Root帐号密码是空密码,于是我修改了下密码. 由于p ...

  2. DS18B20 crc 算法

    http://blog.csdn.net/pengrui18/article/details/24740973 https://www.maximintegrated.com/cn/app-notes ...

  3. .net4 dynamic parse xml

    using System.Collections.Generic; using System.Linq; using System.Xml.Linq; using System.Dynamic; na ...

  4. mac svn 命令

    https://www.cnblogs.com/luckythan/p/4478706.html http://blog.csdn.net/aizhiqiang2/article/details/53 ...

  5. Brackets - 前端编辑器推荐

    Brackets是一款基于web(html+css+js)开发的web前端编辑器.它有许多普通编辑器难以实现的功能,是web前端开发者的神器. 戳我去下载 其功能如下: 1.快速编辑 将光标定在颜色上 ...

  6. 将ViewState放在Session里(转载)

    using System; using System.Collections.Generic; using System.Linq; using System.Web;   namespace Ent ...

  7. self.navigationItem.titleView 不居中显示的问题

    自定义一个AUIView, AUIView * v=[AUIView new]; self.navigationItem.titleView = v; 在AUIView类内重写 setFrame -  ...

  8. [svc]linux文件特殊权限

    这是老以前写的文章, 断断续续的可见那时候的心态还是不稳的. 生产使用: g1,g2组2个组的员工,  g2组要访问g1组/home下的文件,rx权限.  这个setfacl就有用. 方法1: 修改普 ...

  9. oracle 创建表空间及oracle 11g表空间之最大最小

    /*分为四步 *//*第1步:创建临时表空间 */create temporary tablespace emaoyi_temp tempfile 'D:\app\Administrator\prod ...

  10. Oracle Explain plan 使用总结

    Oracle Explain plan使用总结    写多了SQL语句,伴随着数据量的海增,总会遇到性能的问题.在Oracle领域一个不好的习惯,一旦遇到性能问题就推给DBA来做.长期如此,反而对DB ...