D3.js進(jìn)階系列之CSV表格文件的讀取詳解
前言
之前在入門系列的教程中,我們常用 d3.json()
函數(shù)來讀取 json 格式的文件。json 格式很強(qiáng)大,但對(duì)于普通用戶可能不太適合,普通用戶更喜歡的是用 Microsoft Excel 或 OpenOffice Calc 等生成的表格文件,因?yàn)楹?jiǎn)單易懂,容易編輯。
Microsoft Excel 通常會(huì)保存為 xls 格式, OpenOffice Calc 通常會(huì)保存為 ods 格式。這些格式作為表格文件來說都很強(qiáng)大,但要讀取它們是有些麻煩的,D3 中也沒有提供這樣的方法。但是表格軟件都會(huì)支持生成csv 格式,它是一種非?;镜摹⑼ㄓ玫?、簡(jiǎn)單的表格文件。本文將會(huì)說明在 D3 中怎么讀取和使用 csv 文件,下面來看看詳細(xì)的介紹:
1. CSV 格式是什么
CSV(Comma Separated Values),逗號(hào)分隔值,它是以純文本形式存儲(chǔ)表格數(shù)據(jù)的,每個(gè)單元格之間用逗號(hào)(Comma)分隔。CSV格式?jīng)]有一個(gè)通用標(biāo)準(zhǔn),通常使用的是RFC 4180 中所示的描述。
CSV 的文本格式如下:
省份,人口,GDP 山東,9000,50000 浙江,5000,20000
理解起來非常簡(jiǎn)單,每一個(gè)單元格之間用逗號(hào)隔開。如果想在單元格里輸入逗號(hào)怎么辦呢?用雙引號(hào)框起來就行,如下:
省份,人口,GDP 山東,"9,000","50,000" 浙江,"5,000","20,000"
有些軟件在保存CSV格式時(shí),會(huì)讓你選擇使用什么符號(hào)(逗號(hào)、分號(hào)等)來分隔單元格,盡量選擇逗號(hào)吧。
2. 在 OpenOffice 中編輯和保存 CSV 文件
Microsoft Excel 雖然強(qiáng)大卻是收費(fèi)的,近幾年我已不使用。 OpenOffice 不僅開源免費(fèi),而且功能同樣強(qiáng)大。下面來說一下用 OpenOffice 怎么編輯和保存為 CSV 文件,當(dāng)然一般自己摸索著也能會(huì)用,非常簡(jiǎn)單。
(1) 首先,打開 OpenOffice Calc 。就像 Microsoft Office 中有 Word、Excel、PowerPoint 一樣,OpenOffice 中編輯表示使用的是 Calc 。打開之后,像正常一樣輸入單元格的內(nèi)容,假設(shè)輸入如下:
(2)點(diǎn)擊“文件”,“另存為”。文件類型選擇 “CSV 文本”,底下再勾選上“編輯篩選設(shè)置”。
(3) 彈出的對(duì)話框中,選擇編碼(建議用 UTF8),字段分隔符選擇"逗號(hào)",文本分隔符選擇“分號(hào)”。點(diǎn)擊“確定”。
(4) 保存成功后,用記事本打開,結(jié)果如下:
在 D3.js 中,讀取 CSV 文件的函數(shù)只支持用逗號(hào)分隔單元格,所以請(qǐng)務(wù)必這樣保存。
3. 在 D3.js 中讀取 CSV 文件
在 D3.js 中提供了 d3.csv() 函數(shù)來讀取 CSV 文件。函數(shù) 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 文件后,再輸出讀到的數(shù)據(jù)。輸出如下:
我們可以看到,變量中 csvdata 是保存了一個(gè)數(shù)組,數(shù)組中的每個(gè)元素都一個(gè)對(duì)象,每個(gè)對(duì)象里都有 age 、name、sex 三個(gè)成員變量。這三個(gè)成員變量正是所編輯的表格的頭一排的三個(gè)單元格。如此,我們就可以在代碼中這樣調(diào)用了。
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. 將讀入的數(shù)據(jù)轉(zhuǎn)換為字符串
在 D3 的官方 API 中,看上去似乎還有一些函數(shù): parse 、parseRows、format、formatRows。但經(jīng)過我的試驗(yàn),只有 format 一個(gè)函數(shù)可以使用,其它的都是在 D3 內(nèi)部使用的?;旧闲枰x入 CSV 的數(shù)據(jù)的情況下,只要有上面第3節(jié)所敘述的內(nèi)容就足夠了。
下面是 format 的使用方法。
d3.csv("table.csv",function(error,csvdata){ var str = d3.csv.format( csvdata ); console.log(str.length); console.log(str); });
上面的代碼,str 中保存的就是轉(zhuǎn)換后的字符串。
總結(jié)
CSV 格式是一種非常簡(jiǎn)單的表格文件,它的每個(gè)單元格以逗號(hào)分隔,有的表格編輯軟件在保存的時(shí)候會(huì)讓選擇用分號(hào)或逗號(hào)等保存,這時(shí)候最好是選擇用逗號(hào)。
在 D3 中讀取 CSV 文件基本上只需要用 d3.csv()
函數(shù)即可。
好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
給Flash加一個(gè)超鏈接(推薦使用透明層)兼容主流瀏覽器
給一個(gè)Flash加一個(gè)超鏈接,原想直接在object外直接套一個(gè)超鏈接即可,試了之后卻發(fā)現(xiàn)不是這么回事2013-06-06JS中的兩種數(shù)據(jù)類型及實(shí)現(xiàn)引用類型的深拷貝的方法
大家都知道在JS中數(shù)據(jù)類型按照訪問方式和存儲(chǔ)方式的不同可分為基本類型和引用類型。這篇文章主要介紹了JS中的兩種數(shù)據(jù)類型以及實(shí)現(xiàn)引用類型的深拷貝 ,需要的朋友可以參考下2018-08-08移動(dòng)端如何用下拉刷新的方式實(shí)現(xiàn)上拉加載
這篇文章主要介紹了移動(dòng)端如何用下拉刷新的方式實(shí)現(xiàn)上拉加載,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12JS創(chuàng)建自定義表格具體實(shí)現(xiàn)
創(chuàng)建自定義表格的方法有很多,本文為大家介紹下使用js是如何創(chuàng)建的,感興趣的朋友可以參考下2014-02-02js獲取瀏覽器的可視區(qū)域尺寸的實(shí)現(xiàn)代碼
js獲取瀏覽器的可視區(qū)域尺寸的實(shí)現(xiàn)代碼,需要的朋友可以參考下。2011-11-11js中將URL中的參數(shù)提取出來作為對(duì)象的實(shí)現(xiàn)代碼
將URL中的參數(shù)提取出來作為對(duì)象的實(shí)現(xiàn)代碼,適合希望獲取url參數(shù)的朋友。2011-08-08JS實(shí)現(xiàn)的倒計(jì)時(shí)效果實(shí)例(2則實(shí)例)
這篇文章主要介紹了JS實(shí)現(xiàn)的倒計(jì)時(shí)效果,列舉了兩則JavaScript倒計(jì)時(shí)效果代碼供大家參考,原理基本相似,代碼簡(jiǎn)潔實(shí)用,需要的朋友可以參考下2015-12-12javascript Firefox與IE 替換節(jié)點(diǎn)的方法
Firefox 與 IE 替換節(jié)點(diǎn)的方法2010-02-02