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 相关文章推荐
JQuery文本框高亮显示插件代码
Apr 02 Javascript
javascript实现锁定网页、密码解锁效果(类似系统屏幕保护效果)
Aug 15 Javascript
JavaScript实现简单图片翻转的方法
Apr 17 Javascript
jquery常用的12个小功能
Jul 22 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
Nov 29 Javascript
jquery uploadify隐藏上传进度的实现方法
Feb 06 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
Aug 31 Javascript
五步轻松实现JavaScript HTML时钟效果
Mar 25 Javascript
Vue自定义指令封装节流函数的方法示例
Jul 09 Javascript
vue中node_modules中第三方模块的修改使用详解
May 31 Javascript
js正则匹配多个全部数据问题
Dec 20 Javascript
浅析JavaScript预编译和暗示全局变量
Sep 03 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中的超全局变量
2006/10/09 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
2011/12/16 PHP
PHP逐行输出(ob_flush与flush的组合)
2012/02/04 PHP
PHP面向对象之后期静态绑定功能介绍
2015/05/18 PHP
PHP7.0安装笔记整理
2015/08/28 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
PHP实现的解汉诺塔问题算法示例
2018/08/06 PHP
javascript下给元素添加事件的方法与代码
2007/08/13 Javascript
JS高级笔记
2011/07/13 Javascript
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
jQuery实现边框动态效果的实例代码
2016/09/23 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
2017/02/21 Javascript
使用travis-ci如何持续部署node.js应用详解
2017/07/30 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
js时间转换毫秒的实例代码
2019/08/21 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
2020/08/07 Javascript
[01:58]最残酷竞争 2016国际邀请赛中国区预选赛积分循环赛回顾
2016/06/28 DOTA
Python中的异常处理学习笔记
2015/01/28 Python
python实时分析日志的一个小脚本分享
2017/05/07 Python
Django框架教程之正则表达式URL误区详解
2018/01/28 Python
python指定写入文件时的编码格式方法
2018/06/07 Python
Python中asyncio模块的深入讲解
2019/06/10 Python
超简单的Python HTTP服务
2019/07/22 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
python能否java成为主流语言吗
2020/06/22 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
h5移动端调用支付宝、微信支付的实现
2020/06/08 HTML / CSS
审计主管岗位职责
2014/01/31 职场文书
ktv总经理岗位职责
2014/02/17 职场文书
2014年创卫实施方案
2014/02/18 职场文书
大学毕业晚会开场白
2015/05/29 职场文书
MySQL数据库简介与基本操作
2022/05/30 MySQL