D3.js进阶系列之CSV表格文件的读取详解


Posted in Javascript onJune 06, 2017

前言

之前在入门系列的教程中,我们常用 d3.json() 函数来读取 json 格式的文件。json 格式很强大,但对于普通用户可能不太适合,普通用户更喜欢的是用 Microsoft Excel 或 OpenOffice Calc 等生成的表格文件,因为简单易懂,容易编辑。

Microsoft Excel 通常会保存为 xls 格式, OpenOffice Calc 通常会保存为 ods 格式。这些格式作为表格文件来说都很强大,但要读取它们是有些麻烦的,D3 中也没有提供这样的方法。但是表格软件都会支持生成csv 格式,它是一种非常基本的、通用的、简单的表格文件。本文将会说明在 D3 中怎么读取和使用 csv 文件,下面来看看详细的介绍:

1. CSV 格式是什么

CSV(Comma Separated Values),逗号分隔值,它是以纯文本形式存储表格数据的,每个单元格之间用逗号(Comma)分隔。CSV格式没有一个通用标准,通常使用的是RFC 4180 中所示的描述。
CSV 的文本格式如下:

省份,人口,GDP 
山东,9000,50000 
浙江,5000,20000

理解起来非常简单,每一个单元格之间用逗号隔开。如果想在单元格里输入逗号怎么办呢?用双引号框起来就行,如下:

省份,人口,GDP 
山东,"9,000","50,000" 
浙江,"5,000","20,000"

有些软件在保存CSV格式时,会让你选择使用什么符号(逗号、分号等)来分隔单元格,尽量选择逗号吧。

2. 在 OpenOffice 中编辑和保存 CSV 文件

Microsoft Excel 虽然强大却是收费的,近几年我已不使用。 OpenOffice 不仅开源免费,而且功能同样强大。下面来说一下用 OpenOffice 怎么编辑和保存为 CSV 文件,当然一般自己摸索着也能会用,非常简单。

(1) 首先,打开 OpenOffice Calc 。就像 Microsoft Office 中有 Word、Excel、PowerPoint 一样,OpenOffice 中编辑表示使用的是 Calc 。打开之后,像正常一样输入单元格的内容,假设输入如下:

D3.js进阶系列之CSV表格文件的读取详解

(2)点击“文件”,“另存为”。文件类型选择 “CSV 文本”,底下再勾选上“编辑筛选设置”。

D3.js进阶系列之CSV表格文件的读取详解

(3) 弹出的对话框中,选择编码(建议用 UTF8),字段分隔符选择"逗号",文本分隔符选择“分号”。点击“确定”。

D3.js进阶系列之CSV表格文件的读取详解

(4) 保存成功后,用记事本打开,结果如下:

D3.js进阶系列之CSV表格文件的读取详解

在 D3.js 中,读取 CSV 文件的函数只支持用逗号分隔单元格,所以请务必这样保存。

3. 在 D3.js 中读取 CSV 文件

在 D3.js 中提供了 d3.csv() 函数来读取 CSV 文件。函数 API 可参见: https://github.com/mbostock/d3/wiki/CSV 。

用它读取文件的代码如下:

d3.csv("table.csv",function(error,csvdata){ 
 
 if(error){ 
  console.log(error); 
 } 
 console.log(csvdata); 
  
});

这段代码是读取了 table.csv 文件后,再输出读到的数据。输出如下:

D3.js进阶系列之CSV表格文件的读取详解

我们可以看到,变量中 csvdata 是保存了一个数组,数组中的每个元素都一个对象,每个对象里都有 age 、name、sex 三个成员变量。这三个成员变量正是所编辑的表格的头一排的三个单元格。如此,我们就可以在代码中这样调用了。

for( var i=0; i<csvdata.length; i++ ){ 
 var name = csvdata[i].name; 
 var sex = csvdata[i].sex; 
 var age = csvdata[i].age; 
 console.log( "name: " + name + "\n" + 
     "sex: " + sex + "\n" + 
     "age: " + age ); 
}

4. 将读入的数据转换为字符串

在 D3 的官方 API 中,看上去似乎还有一些函数: parse 、parseRows、format、formatRows。但经过我的试验,只有 format 一个函数可以使用,其它的都是在 D3 内部使用的。基本上需要读入 CSV 的数据的情况下,只要有上面第3节所叙述的内容就足够了。

下面是 format 的使用方法。

d3.csv("table.csv",function(error,csvdata){  
 var str = d3.csv.format( csvdata );   
 console.log(str.length); 
 console.log(str);  
});

上面的代码,str 中保存的就是转换后的字符串。

总结

CSV 格式是一种非常简单的表格文件,它的每个单元格以逗号分隔,有的表格编辑软件在保存的时候会让选择用分号或逗号等保存,这时候最好是选择用逗号。

在 D3 中读取 CSV 文件基本上只需要用 d3.csv() 函数即可。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
javascript下arguments,caller,callee,call,apply示例及理解
Dec 24 Javascript
实现placeholder效果的方案汇总
Jun 11 Javascript
js格式化时间的方法
Dec 18 Javascript
javascript 利用arguments实现可变长参数
Nov 21 Javascript
微信小程序用户信息encryptedData详解
Aug 24 Javascript
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
Feb 20 jQuery
使用element-ui table expand展开行实现手风琴效果
Mar 15 Javascript
常见的浏览器存储方式(cookie、localStorage、sessionStorage)
May 07 Javascript
bootstrap table实现iview固定列的效果实例代码详解
Sep 30 Javascript
Vue 使用beforeEach实现登录状态检查功能
Oct 31 Javascript
koa2 数据api中间件设计模型的实现方法
Jul 13 Javascript
vue实现lodop打印功能的示例
Nov 11 Javascript
JavaScript实现移动端轮播效果
Jun 06 #Javascript
js评分组件使用详解
Jun 06 #Javascript
javascript中mouseenter与mouseover的异同
Jun 06 #Javascript
jquery仿京东商品放大浏览页面
Jun 06 #jQuery
Node.js连接mongodb实例代码
Jun 06 #Javascript
jquery实现图片放大点击切换
Jun 06 #jQuery
AngularJS 验证码60秒倒计时功能的实现
Jun 05 #Javascript
You might like
PHP include任意文件或URL介绍
2014/04/29 PHP
PHP使用递归算法无限遍历数组示例
2017/01/13 PHP
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
javascript多种数据类型表格排序代码分析
2010/09/11 Javascript
JS左右无缝滚动(一般方法+面向对象方法)
2012/08/17 Javascript
Jquery中使用show()与hide()方法动画显示和隐藏图片
2015/10/08 Javascript
对Js OOP编程 创建对象的一些全面理解
2016/07/26 Javascript
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
vue异步加载高德地图的实现
2018/06/19 Javascript
代码分析vue中如何配置less
2018/09/28 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
[36:41]完美世界DOTA2联赛循环赛FTD vs Magma第一场 10月30日
2020/10/31 DOTA
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
2018/01/16 Python
python利用requests库模拟post请求时json的使用教程
2018/12/07 Python
python实现QQ批量登录功能
2019/06/19 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
2019/07/02 Python
详解python实现小波变换的一个简单例子
2019/07/18 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
python 一维二维插值实例
2020/04/22 Python
详解pyinstaller生成exe的闪退问题解决方案
2020/06/19 Python
python中逻辑与或(and、or)和按位与或异或(&amp;、|、^)区别
2020/08/05 Python
java字符串格式化输出实例讲解
2021/01/06 Python
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
Nike俄罗斯官方网站:Nike RU
2021/03/05 全球购物
介绍一下linux的文件系统
2015/10/06 面试题
租房协议书怎么写
2014/04/10 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
简洁的英文求职信范文
2014/05/03 职场文书
新颖的化妆品活动方案
2014/08/21 职场文书
建设工程授权委托书
2014/09/22 职场文书
2014年班组建设工作总结
2014/12/01 职场文书
python缺失值的解决方法总结
2021/06/09 Python
浅谈mysql哪些情况会导致索引失效
2021/11/20 MySQL
JavaScript阻止事件冒泡的方法
2021/12/06 Javascript