2013-09-16 102 views
0

我開始學習javascript和d3.js(版本3.3.3)。我需要從非csvtsv格式的文件中讀取數據。我大概可以使用d3.dsv.parseRows,但我有點困惑 - 我非常感謝一些幫助,一個例子會很棒。用d3.dsv.parseRows讀取格式化數據

數據格式爲ASCII,由未知數量的空白字符(製表符或空格)分隔的兩列數字。評論字符是#

# Example 
# The data is obviously poorly aligned 
# The two values in each row are separated 
# by one or more tabs and/or spaces 
# 
1.0 10.00 
    2.0 20 
3.0  30.   # this data line should be read 
# 4.0 40.0  # this data line should be ignored 
5.0 50.00 

我必須數字數組的數組中的數據,這樣我就可以用一些漂亮的D3繪製下去:

[ [1.0,10.0], [2.0,20.0], [3.0,30.0], [5.0,50.0] ] 
+0

在這種情況下,它通常更容易使用腳本來預處理數據轉換爲JSON,然後可以在D3中讀取而不會出現問題。 –

+0

不幸的是,它不在我的手中,對數據文件進行預處理,其中有大量的數據文件,它們來自第三方來源。 – user1069609

回答

0

這聽起來像you'l必須寫自己請求,我已經在下面的幾個筆記做了一個開頭,你需要完成它...

var dsvFile = new XMLHttpRequest(); 
    dsvFile.open("GET", "dsv.txt", true); 

var req = new XMLHttpRequest(); 
    req.onreadystatechange = function() { 
     if (req.readyState == 4) { 
     if (req.status === 200 || 
      req.status === 0) { 

      var data = req.responseText; 
      cleanData(data) 
      } 
     } 
     }; 

    req.open('GET', "dsv.txt", true); 
    req.send(null); 

    var cleanData = function(data) { 

     var clean = []; 
     var lines = data.split("\n"); 

     for (var i = 0; i < lines.length; i++) { 
     var comment = /^#/ 
     var whiteSpace = /^\s+/ 
     var OK = comment.exec(lines[i]) // check for comment lines 
     var white = whiteSpace.exec(lines[i]) // check white whitespace at begining of line 
     if(!OK) // if no comments then 
      { 
      if(white) // if whitespace at begining of line remove 
      { 
       var str = lines[i].replace(whiteSpace, '') 
      } 
      else 
      { 
       var str = lines[i] 
      } 
      clean.push(str) 
      } 
     }; 

     console.log(clean) 

    };