1

我开始学习 javascript 和 d3.js(版本 3.3.3)。我需要从既不是csv也不是tsv. 我可能可以使用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] ]
4

2 回答 2

0

听起来您必须编写自己的请求,我已经开始使用下面的几个注释,但您需要完成它...

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)

    };
于 2013-09-16T15:37:51.533 回答
0

要处理具有多个空格(可能还有更复杂的模式)的数据文件, 可以将d3.text与正则表达式组合,然后将d3.csvParseRows

var a = [];
d3.text("http://cdsarc.u-strasbg.fr/ftp/J/AJ/159/187/table3.dat")
     .then(function(d){a = d3.csvParseRows(d.replace(/ +/g, ","))})

请注意,由于 CORS,url 仅适用于某些网页。

于 2021-05-09T13:00:41.747 回答